diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..da50f6cf4 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,24 @@ +language: cpp + +cache: apt + +before_install: + - sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded -y + - sudo apt-get update -qq + - sudo apt-get install -y gcc-arm-none-eabi + +before_script: + - export CC="arm-none-eabi-gcc" + - export CXX="arm-none-eabi-g++" + +script: + # TODO: Introduce top-level Makefile, this is lame. + - pushd firmware/ + - make release + - popd + +addons: + artifacts: + paths: + - $(ls firmware/portapack-h1-firmware-*.tar.bz2 | tr "\n" ":") + - $(ls firmware/portapack-h1-firmware-*.zip | tr "\n" ":") diff --git a/README.md b/README.md index 63962fc26..e08b5ca9f 100644 --- a/README.md +++ b/README.md @@ -2,19 +2,19 @@ The PortaPack H1 makes the [HackRF One software-defined radio](http://greatscottgadgets.com/hackrf/) portable. It adds an LCD touchscreen, user interface navigation controls, audio output and input, micro SD card slot, and real-time clock battery backup. -As it name implies, HAVOC is a firmware aimed towards serious fun. Don't use it. In fact, we never did. +As its name implies, HAVOC is a firmware aimed towards serious fun. Don't use it. We never did. Fork features: * RDS (Radio Data System) basic group forming and transmit * LCR (Language de Commande Routier) basic message forming * Fully configurable AFSK transmit * "Play Dead" in case of emergency +* Fully configurable Jammer Todo: * AFSK receiver * Moltonel (tone detector/scanner) * Whistle (tone generator) -* Signal drowner (jammer) * Wireless microphone transmit * CTCSS talkie transmit * Play wave files from µSD diff --git a/doc/images/wiki/windows/gpl_v2_accept_win81.png b/doc/images/wiki/windows/gpl_v2_accept_win81.png new file mode 100644 index 000000000..6887d4f1a Binary files /dev/null and b/doc/images/wiki/windows/gpl_v2_accept_win81.png differ diff --git a/doc/images/wiki/windows/install_device_firmware_sharebrained_win81.png b/doc/images/wiki/windows/install_device_firmware_sharebrained_win81.png new file mode 100644 index 000000000..e21d8f879 Binary files /dev/null and b/doc/images/wiki/windows/install_device_firmware_sharebrained_win81.png differ diff --git a/doc/images/wiki/windows/installer_finished_win81.png b/doc/images/wiki/windows/installer_finished_win81.png new file mode 100644 index 000000000..b98ee3907 Binary files /dev/null and b/doc/images/wiki/windows/installer_finished_win81.png differ diff --git a/doc/images/wiki/windows/portapack_firmware_install_cmd_win81.png b/doc/images/wiki/windows/portapack_firmware_install_cmd_win81.png new file mode 100644 index 000000000..65b25fd89 Binary files /dev/null and b/doc/images/wiki/windows/portapack_firmware_install_cmd_win81.png differ diff --git a/doc/images/wiki/windows/program_group_win81.png b/doc/images/wiki/windows/program_group_win81.png new file mode 100644 index 000000000..6ff9a41ed Binary files /dev/null and b/doc/images/wiki/windows/program_group_win81.png differ diff --git a/doc/images/wiki/windows/uac_installer_sharebrained_win81.png b/doc/images/wiki/windows/uac_installer_sharebrained_win81.png new file mode 100644 index 000000000..2642bd79a Binary files /dev/null and b/doc/images/wiki/windows/uac_installer_sharebrained_win81.png differ diff --git a/firmware/Makefile b/firmware/Makefile index 5e89d2ab6..d735d3d79 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -23,11 +23,6 @@ PATH_BOOTSTRAP=bootstrap PATH_APPLICATION=application PATH_BASEBAND=baseband -# TODO: Pass these (as #defines?) to Makefiles, use values in code. -PAD_BOOTSTRAP=0x10000 -PAD_HACKRF_FIRMWARE=65536 -PAD_BASEBAND=0x20000 - TARGET=portapack-h1-firmware TARGET_BOOTSTRAP=$(PATH_BOOTSTRAP)/bootstrap @@ -35,10 +30,12 @@ TARGET_HACKRF_FIRMWARE=hackrf_one_usb_ram TARGET_APPLICATION=$(PATH_APPLICATION)/build/application TARGET_BASEBAND=$(PATH_BASEBAND)/build/baseband +MAKE_SPI_IMAGE=tools/make_spi_image.py + DFU_HACKRF=hackrf_one_usb_ram.dfu LICENSE=../LICENSE -REVISION=$(shell git log -n 1 --format=%h) +GIT_REVISION=$(shell git log -n 1 --format=%h) CP=arm-none-eabi-objcopy @@ -47,8 +44,8 @@ all: $(TARGET).bin release: $(TARGET).bin $(DFU_HACKRF) $(LICENSE) # TODO: Bad hack to fix location of LICENSE file for tar. cp $(LICENSE) LICENSE - tar -c -j -f $(TARGET)-$(REVISION).tar.bz2 $(TARGET).bin $(DFU_HACKRF) LICENSE - zip -9 -q $(TARGET)-$(REVISION).zip $(TARGET).bin $(DFU_HACKRF) LICENSE + tar -c -j -f $(TARGET)-$(GIT_REVISION).tar.bz2 $(TARGET).bin $(DFU_HACKRF) LICENSE + zip -9 -q $(TARGET)-$(GIT_REVISION).zip $(TARGET).bin $(DFU_HACKRF) LICENSE rm -f LICENSE program: $(TARGET).bin @@ -56,36 +53,31 @@ program: $(TARGET).bin sleep 1s hackrf_spiflash -w $(TARGET).bin -$(TARGET).bin: $(TARGET_BOOTSTRAP)_pad.bin $(TARGET_HACKRF_FIRMWARE)_dfu_pad.bin $(TARGET_BASEBAND)_pad.bin $(TARGET_APPLICATION).bin - cat $(TARGET_BOOTSTRAP)_pad.bin $(TARGET_HACKRF_FIRMWARE)_dfu_pad.bin $(TARGET_BASEBAND)_pad.bin $(TARGET_APPLICATION).bin >$(TARGET).bin +$(TARGET).bin: $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND).bin $(TARGET_APPLICATION).bin + $(MAKE_SPI_IMAGE) $(TARGET_BOOTSTRAP).bin $(TARGET_HACKRF_FIRMWARE).dfu $(TARGET_BASEBAND).bin $(TARGET_APPLICATION).bin $(TARGET).bin -$(TARGET_BOOTSTRAP)_pad.bin: $(TARGET_BOOTSTRAP).elf - $(CP) -O binary --pad-to $(PAD_BOOTSTRAP) $(TARGET_BOOTSTRAP).elf $(TARGET_BOOTSTRAP)_pad.bin +$(TARGET_BOOTSTRAP).bin: $(TARGET_BOOTSTRAP).elf + $(CP) -O binary $(TARGET_BOOTSTRAP).elf $(TARGET_BOOTSTRAP).bin -$(TARGET_HACKRF_FIRMWARE)_dfu_pad.bin: $(TARGET_HACKRF_FIRMWARE).dfu - # TODO: Not confident this is reliable. It certainly won't work on Windows. - # Pad the .dfu with zeros, then truncate to the desired length. - head -c $(PAD_HACKRF_FIRMWARE) /dev/zero | cat $(TARGET_HACKRF_FIRMWARE).dfu - | head -c $(PAD_HACKRF_FIRMWARE) >$(TARGET_HACKRF_FIRMWARE)_dfu_pad.bin - -$(TARGET_BASEBAND)_pad.bin: $(TARGET_BASEBAND).elf - $(CP) -O binary --pad-to $(PAD_BASEBAND) $(TARGET_BASEBAND).elf $(TARGET_BASEBAND)_pad.bin +$(TARGET_BASEBAND).bin: $(TARGET_BASEBAND).elf + $(CP) -O binary $(TARGET_BASEBAND).elf $(TARGET_BASEBAND).bin $(TARGET_APPLICATION).bin: $(TARGET_APPLICATION).elf $(CP) -O binary $(TARGET_APPLICATION).elf $(TARGET_APPLICATION).bin $(TARGET_BASEBAND).elf: always_check - @$(MAKE) -s -C $(PATH_BASEBAND) + @$(MAKE) -s -e GIT_REVISION=$(GIT_REVISION) -C $(PATH_BASEBAND) $(TARGET_APPLICATION).elf: always_check - @$(MAKE) -s -C $(PATH_APPLICATION) + @$(MAKE) -s -e GIT_REVISION=$(GIT_REVISION) -C $(PATH_APPLICATION) $(TARGET_BOOTSTRAP).elf: always_check - @$(MAKE) -s -C $(PATH_BOOTSTRAP) + @$(MAKE) -s -e GIT_REVISION=$(GIT_REVISION) -C $(PATH_BOOTSTRAP) clean: rm -f $(TARGET).bin - rm -f $(TARGET_BOOTSTRAP)_pad.bin - rm -f $(TARGET_BASEBAND)_pad.bin + rm -f $(TARGET_BOOTSTRAP).bin + rm -f $(TARGET_BASEBAND).bin rm -f $(TARGET_APPLICATION).bin $(MAKE) -C $(PATH_BASEBAND) clean $(MAKE) -C $(PATH_APPLICATION) clean diff --git a/firmware/application/Makefile b/firmware/application/Makefile index 766ac2964..38c2c6f78 100755 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -112,8 +112,7 @@ CSRC = $(PORTSRC) \ $(HALSRC) \ $(PLATFORMSRC) \ $(BOARDSRC) \ - $(FATFSSRC) \ - $(CHIBIOS)/os/various/evtimer.c + $(FATFSSRC) # C++ sources that can be compiled in ARM or THUMB mode depending on the global @@ -122,6 +121,7 @@ CPPSRC = main.cpp \ irq_ipc.cpp \ irq_lcd_frame.cpp \ irq_controls.cpp \ + irq_rtc.cpp \ event.cpp \ message_queue.cpp \ hackrf_hal.cpp \ @@ -166,13 +166,16 @@ CPPSRC = main.cpp \ ui_whistle.cpp \ ui_jammer.cpp \ ui_afsksetup.cpp \ + ui_baseband_stats_view.cpp \ ui_console.cpp \ ui_receiver.cpp \ ui_spectrum.cpp \ receiver_model.cpp \ transmitter_model.cpp \ spectrum_color_lut.cpp \ + ais_baseband.cpp \ ../common/utility.cpp \ + ../common/chibios_cpp.cpp \ ../common/debug.cpp \ ../common/gcc.cpp \ m4_startup.cpp \ @@ -218,6 +221,9 @@ INCDIR = ../common $(PORTINC) $(KERNINC) $(TESTINC) \ # Compiler settings # +# TODO: Entertain using MCU=cortex-m0.small-multiply for LPC43xx M0 core. +# However, on GCC-ARM-Embedded 4.9 2015q2, it seems to produce non-functional +# binaries. MCU = cortex-m0 #TRGT = arm-elf- @@ -260,7 +266,8 @@ CPPWARN = -Wall -Wextra # TODO: Switch -DCRT0_INIT_DATA depending on load from RAM or SPIFI? # NOTE: _RANDOM_TCC to kill a GCC 4.9.3 error with std::max argument types DDEFS = -DLPC43XX -DLPC43XX_M0 -D__NEWLIB__ -DHACKRF_ONE \ - -DTOOLCHAIN_GCC -DTOOLCHAIN_GCC_ARM -D_RANDOM_TCC=0 + -DTOOLCHAIN_GCC -DTOOLCHAIN_GCC_ARM -D_RANDOM_TCC=0 \ + -DGIT_REVISION=\"$(GIT_REVISION)\" # List all default ASM defines here, like -D_DEBUG=1 DADEFS = diff --git a/firmware/application/clock_manager.cpp b/firmware/application/clock_manager.cpp index e6c4d242f..86682b746 100644 --- a/firmware/application/clock_manager.cpp +++ b/firmware/application/clock_manager.cpp @@ -163,24 +163,16 @@ constexpr si5351::MultisynthFractional si5351_ms_10m { }; constexpr auto si5351_ms_3_10m_reg = si5351_ms_10m.reg(3); -constexpr si5351::MultisynthFractional si5351_ms_50m { +constexpr si5351::MultisynthFractional si5351_ms_40m { .f_src = si5351_vco_f, - .a = 16, + .a = 20, .b = 0, .c = 1, .r_div = 0, }; -// constexpr si5351::MultisynthFractional si5351_ms_40m { -// .f_src = si5351_vco_f, -// .a = 20, -// .b = 0, -// .c = 1, -// .r_div = 0, -// }; - -constexpr auto si5351_ms_rffc5072 = si5351_ms_50m; -constexpr auto si5351_ms_max2837 = si5351_ms_50m; +constexpr auto si5351_ms_rffc5072 = si5351_ms_40m; +constexpr auto si5351_ms_max2837 = si5351_ms_40m; constexpr auto si5351_ms_4_reg = si5351_ms_rffc5072.reg(clock_generator_output_first_if); constexpr auto si5351_ms_5_reg = si5351_ms_max2837.reg(clock_generator_output_second_if); @@ -232,7 +224,7 @@ constexpr ClockControls si5351_clock_control_common { ClockControl::CLK_IDRV_8mA | ClockControl::CLK_SRC_MS_Self | ClockControl::CLK_INV_Normal | ClockControl::MS_INT_Integer | ClockControl::CLK_PDN_Power_Off, ClockControl::CLK_IDRV_8mA | ClockControl::CLK_SRC_MS_Self | ClockControl::CLK_INV_Normal | ClockControl::MS_INT_Integer | ClockControl::CLK_PDN_Power_Off, ClockControl::CLK_IDRV_6mA | ClockControl::CLK_SRC_MS_Self | ClockControl::CLK_INV_Normal | ClockControl::MS_INT_Integer | ClockControl::CLK_PDN_Power_Off, - ClockControl::CLK_IDRV_2mA | ClockControl::CLK_SRC_MS_Self | ClockControl::CLK_INV_Normal | ClockControl::MS_INT_Integer | ClockControl::CLK_PDN_Power_Off, + ClockControl::CLK_IDRV_2mA | ClockControl::CLK_SRC_MS_Self | ClockControl::CLK_INV_Normal | ClockControl::MS_INT_Fractional | ClockControl::CLK_PDN_Power_Off, ClockControl::CLK_IDRV_6mA | ClockControl::CLK_SRC_MS_Self | ClockControl::CLK_INV_Normal | ClockControl::MS_INT_Integer | ClockControl::CLK_PDN_Power_Off, }; @@ -368,6 +360,23 @@ void ClockManager::set_sampling_frequency(const uint32_t frequency) { clock_generator.set_ms_frequency(clock_generator_output_codec, frequency * 2, si5351_vco_f, 1); } +void ClockManager::set_reference_ppb(const int32_t ppb) { + constexpr uint32_t pll_multiplier = si5351_pll_xtal_25m.a; + constexpr uint32_t denominator = 1000000 / pll_multiplier; + const uint32_t new_a = (ppb >= 0) ? pll_multiplier : (pll_multiplier - 1); + const uint32_t new_b = (ppb >= 0) ? (ppb / 1000) : (denominator + (ppb / 1000)); + const uint32_t new_c = (ppb == 0) ? 1 : denominator; + + const si5351::PLL pll { + .f_in = si5351_inputs.f_xtal, + .a = new_a, + .b = new_b, + .c = new_c, + }; + const auto pll_a_reg = pll.reg(0); + clock_generator.write(pll_a_reg); +} + void ClockManager::change_clock_configuration(const cgu::CLK_SEL clk_sel) { /* If starting PLL1, turn on the clock feeding GP_CLKIN */ if( clk_sel == cgu::CLK_SEL::PLL1 ) { diff --git a/firmware/application/clock_manager.hpp b/firmware/application/clock_manager.hpp index b99563420..54a80a03d 100644 --- a/firmware/application/clock_manager.hpp +++ b/firmware/application/clock_manager.hpp @@ -62,6 +62,8 @@ public: void set_sampling_frequency(const uint32_t frequency); + void set_reference_ppb(const int32_t ppb); + private: I2C& i2c0; si5351::Si5351& clock_generator; diff --git a/firmware/application/event.hpp b/firmware/application/event.hpp index e9b77c937..fbf40d0a4 100644 --- a/firmware/application/event.hpp +++ b/firmware/application/event.hpp @@ -26,7 +26,6 @@ constexpr auto EVT_MASK_RTC_TICK = EVENT_MASK(0); constexpr auto EVT_MASK_LCD_FRAME_SYNC = EVENT_MASK(1); -constexpr auto EVT_MASK_SD_CARD_PRESENT = EVENT_MASK(2); constexpr auto EVT_MASK_SWITCHES = EVENT_MASK(3); constexpr auto EVT_MASK_ENCODER = EVENT_MASK(4); constexpr auto EVT_MASK_TOUCH = EVENT_MASK(5); diff --git a/firmware/application/ffconf.h b/firmware/application/ffconf.h index 42429b219..b838f9f2b 100644 --- a/firmware/application/ffconf.h +++ b/firmware/application/ffconf.h @@ -36,7 +36,7 @@ / 3: f_lseek() function is removed in addition to 2. */ -#define _USE_STRFUNC 0 +#define _USE_STRFUNC 1 /* This option switches string functions, f_gets(), f_putc(), f_puts() and / f_printf(). / diff --git a/firmware/application/irq_controls.cpp b/firmware/application/irq_controls.cpp index afd8db89d..ddf8f154d 100644 --- a/firmware/application/irq_controls.cpp +++ b/firmware/application/irq_controls.cpp @@ -79,43 +79,48 @@ static touch::Frame touch_frame; static uint32_t touch_debounce = 0; static uint32_t touch_debounce_mask = (1U << 1) - 1; -static bool touch_stable = false; +static bool touch_detected = false; +static bool touch_cycle = false; static bool touch_update() { const auto samples = touch::adc::get(); const auto current_phase = touch_pins_configs[touch_phase]; - if( current_phase == portapack::IO::TouchPinsConfig::WaitTouch ) { - /* Debounce touches. */ - const bool touch_raw = (samples.yp < touch::touch_threshold) && (samples.yn < touch::touch_threshold); - touch_debounce = (touch_debounce << 1) | (touch_raw ? 1U : 0U); - touch_stable = ((touch_debounce & touch_debounce_mask) == touch_debounce_mask); - } else { - if( touch_stable ) { - switch(current_phase) { - case portapack::IO::TouchPinsConfig::SensePressure: - temp_frame.pressure += samples; - break; - - case portapack::IO::TouchPinsConfig::SenseX: - temp_frame.x += samples; - break; - - case portapack::IO::TouchPinsConfig::SenseY: - temp_frame.y += samples; - break; - - default: - break; + switch(current_phase) { + case portapack::IO::TouchPinsConfig::WaitTouch: + { + /* Debounce touches. */ + const bool touch_raw = (samples.yp < touch::touch_threshold) && (samples.yn < touch::touch_threshold); + touch_debounce = (touch_debounce << 1) | (touch_raw ? 1U : 0U); + touch_detected = ((touch_debounce & touch_debounce_mask) == touch_debounce_mask); + if( !touch_detected && !touch_cycle ) { + return false; } } + break; + + case portapack::IO::TouchPinsConfig::SensePressure: + temp_frame.pressure += samples; + break; + + case portapack::IO::TouchPinsConfig::SenseX: + temp_frame.x += samples; + break; + + case portapack::IO::TouchPinsConfig::SenseY: + temp_frame.y += samples; + break; + + default: + break; } touch_phase++; if( touch_phase >= touch_pins_configs.size() ) { /* New iteration, calculate values and flag touch event */ touch_phase = 0; - temp_frame.touch = touch_stable; + temp_frame.touch = touch_detected; + touch_cycle = touch_detected; touch_frame = temp_frame; temp_frame = {}; return true; diff --git a/firmware/baseband/access_code_correlator.cpp b/firmware/application/irq_rtc.cpp similarity index 56% rename from firmware/baseband/access_code_correlator.cpp rename to firmware/application/irq_rtc.cpp index f45052b09..f393d0f45 100644 --- a/firmware/baseband/access_code_correlator.cpp +++ b/firmware/application/irq_rtc.cpp @@ -19,26 +19,32 @@ * Boston, MA 02110-1301, USA. */ -#include "access_code_correlator.hpp" +#include "irq_rtc.hpp" -void AccessCodeCorrelator::configure( - const uint32_t new_code, - const size_t new_code_length, - const size_t new_maximum_hamming_distance -) { - if( new_code_length <= 32 ) { - code = new_code; - mask = mask_value(new_code_length); - maximum_hamming_distance = new_maximum_hamming_distance; - } +#include "ch.h" + +#include "lpc43xx_cpp.hpp" +using namespace lpc43xx; + +#include "event.hpp" + +void rtc_interrupt_enable() { + rtc::interrupt::enable_second_inc(); + nvicEnableVector(RTC_IRQn, CORTEX_PRIORITY_MASK(LPC_RTC_IRQ_PRIORITY)); +} + +extern "C" { + +CH_IRQ_HANDLER(RTC_IRQHandler) { + CH_IRQ_PROLOGUE(); + + chSysLockFromIsr(); + events_flag_isr(EVT_MASK_RTC_TICK); + chSysUnlockFromIsr(); + + rtc::interrupt::clear_all(); + + CH_IRQ_EPILOGUE(); } -bool AccessCodeCorrelator::execute( - const uint_fast8_t in -) { - history = (history << 1) | (in & 1); - const auto delta_bits = (history ^ code) & mask; - //const size_t count = __builtin_popcountll(delta_bits); - const size_t count = __builtin_popcountl(delta_bits); - return (count <= maximum_hamming_distance); } diff --git a/firmware/application/irq_rtc.hpp b/firmware/application/irq_rtc.hpp new file mode 100644 index 000000000..b2b67f81e --- /dev/null +++ b/firmware/application/irq_rtc.hpp @@ -0,0 +1,27 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __IPC_RTC_H__ +#define __IPC_RTC_H__ + +void rtc_interrupt_enable(); + +#endif/*__IPC_RTC_H__*/ diff --git a/firmware/application/m4_startup.cpp b/firmware/application/m4_startup.cpp index bbeb61803..6b9df47b4 100644 --- a/firmware/application/m4_startup.cpp +++ b/firmware/application/m4_startup.cpp @@ -23,6 +23,9 @@ #include "hal.h" +#include "message.hpp" +#include "portapack_shared_memory.hpp" + #include /* TODO: OK, this is cool, but how do I put the M4 to sleep so I can switch to @@ -32,17 +35,20 @@ * I suppose I could force M4MEMMAP to an invalid memory reason which would * cause an exception and effectively halt the M4. But that feels gross. */ -void m4_init(const portapack::spi_flash::region_t from, void* const to) { - //m4txevent_interrupt_disable(); - +void m4_init(const portapack::spi_flash::region_t from, const portapack::memory::region_t to) { /* Initialize M4 code RAM */ - std::memcpy(to, from.base_address(), from.size); + std::memcpy(reinterpret_cast(to.base()), from.base(), from.size); /* M4 core is assumed to be sleeping with interrupts off, so we can mess * with its address space and RAM without concern. */ - LPC_CREG->M4MEMMAP = reinterpret_cast(to); + LPC_CREG->M4MEMMAP = to.base(); /* Reset M4 core */ LPC_RGU->RESET_CTRL[0] = (1 << 13); } + +void m4_request_shutdown() { + ShutdownMessage shutdown_message; + shared_memory.baseband_queue.push(shutdown_message); +} diff --git a/firmware/application/m4_startup.hpp b/firmware/application/m4_startup.hpp index b47631565..ce22770e1 100644 --- a/firmware/application/m4_startup.hpp +++ b/firmware/application/m4_startup.hpp @@ -24,8 +24,10 @@ #include +#include "memory_map.hpp" #include "spi_image.hpp" -void m4_init(const portapack::spi_flash::region_t from, void* const to); +void m4_init(const portapack::spi_flash::region_t from, const portapack::memory::region_t to); +void m4_request_shutdown(); #endif/*__M4_STARTUP_H__*/ diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index a4e2eadb7..ef3301e61 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -60,6 +60,7 @@ using namespace lpc43xx; #include "irq_ipc.hpp" #include "irq_lcd_frame.hpp" #include "irq_controls.hpp" +#include "irq_rtc.hpp" #include "event.hpp" @@ -73,100 +74,9 @@ using namespace lpc43xx; #include -/* From ChibiOS crt0.c: - * Two stacks available for Cortex-M, main stack or process stack. - * - * Thread mode: Used to execute application software. The processor - * enters Thread mode when it comes out of reset. - * Handler mode: Used to handle exceptions. The processor returns to - * Thread mode when it has finished all exception processing. - * - * ChibiOS configures the Cortex-M in dual-stack mode. (CONTROL[1]=1) - * When CONTROL[1]=1, PSP is used when the processor is in Thread mode. - * - * MSP is always used when the processor is in Handler mode. - * - * __main_stack_size__ : 0x2000???? - 0x2000???? = - * Used for exception handlers. Yes, really. - * __process_stack_size__ : 0x2000???? - 0x2000???? = - * Used by main(). - * - * After chSysInit(), the current instructions stream (usually main()) - * becomes the main thread. - */ +#include "sd_card.hpp" -#if 0 -static const SPIConfig ssp_config_w25q80bv = { - .end_cb = NULL, - .ssport = ?, - .sspad = ?, - .cr0 = - CR0_CLOCKRATE() - | ? - | ? - , - .cpsr = ?, -}; - -static spi_bus_t ssp0 = { - .obj = &SPID1, - .config = &ssp_config_w25q80bv, - .start = spi_chibi_start, - .stop = spi_chibi_stop, - .transfer = spi_chibi_transfer, - .transfer_gather = spi_chibi_transfer_gather, -}; -#endif - -/* ChibiOS initialization sequence: - * ResetHandler: - * Initialize FPU (if present) - * Initialize stacks (fill with pattern) - * __early_init() - * Enable extra processor exceptions for debugging - * Init data segment (flash -> data) - * Initialize BSS (fill with 0) - * __late_init() - * reset_peripherals() - * halInit() - * hal_lld_init() - * Init timer 3 as cycle counter - * Init RIT as SysTick - * palInit() - * gptInit() - * i2cInit() - * sdcInit() - * spiInit() - * rtcInit() - * boardInit() - * chSysInit() - * Constructors - * main() - * Destructors - * _default_exit() (default is infinite loop) - */ - -extern "C" { - -CH_IRQ_HANDLER(RTC_IRQHandler) { - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - events_flag_isr(EVT_MASK_RTC_TICK); - chSysUnlockFromIsr(); - - rtc::interrupt::clear_all(); - - CH_IRQ_EPILOGUE(); -} - -} - -static bool ui_dirty = true; - -void ui::dirty_event() { - ui_dirty = true; -} +#include class EventDispatcher { public: @@ -187,6 +97,26 @@ public: }; } + void run() { + while(is_running) { + const auto events = wait(); + dispatch(events); + } + } + + void request_stop() { + is_running = false; + } + +private: + touch::Manager touch_manager; + ui::Widget* const top_widget; + ui::Painter& painter; + ui::Context& context; + uint32_t encoder_last = 0; + bool is_running = true; + bool sd_card_present = false; + eventmask_t wait() { return chEvtWaitAny(ALL_EVENTS); } @@ -204,10 +134,6 @@ public: handle_lcd_frame_sync(); } - if( events & EVT_MASK_SD_CARD_PRESENT ) { - handle_sd_card_detect(); - } - if( events & EVT_MASK_SWITCHES ) { handle_switches(); } @@ -221,121 +147,34 @@ public: } } -private: - touch::Manager touch_manager; - ui::Widget* const top_widget; - ui::Painter& painter; - ui::Context& context; - uint32_t encoder_last = 0; - void handle_application_queue() { - while( !shared_memory.application_queue.is_empty() ) { - auto message = shared_memory.application_queue.pop(); - - auto& fn = context.message_map[message->id]; - if( fn ) { - fn(message); - } - - message->state = Message::State::Free; + std::array message_buffer; + while(Message* const message = shared_memory.application_queue.pop(message_buffer)) { + context.message_map().send(message); } } void handle_rtc_tick() { - /* - if( shared_memory.application_queue.push(&rssi_request) ) { - led_rx.on(); - } - */ - /* - if( callback_second_tick ) { - rtc::RTC datetime; - rtcGetTime(&RTCD1, &datetime); + const auto sd_card_present_now = sdc_lld_is_card_inserted(&SDCD1); + if( sd_card_present_now != sd_card_present ) { + sd_card_present = sd_card_present_now; - callback_second_tick(datetime); - } - */ - //static std::function callback_fifos_state; - //static std::function callback_cpu_ticks; - /* - if( callback_fifos_state ) { - callback_fifos_state(shared_memory.application_queue.len(), baseband_queue.len()); - } - */ - /* - if( callback_cpu_ticks ) { - //const auto thread_self = chThdSelf(); - const auto thread = chSysGetIdleThread(); - //const auto ticks = chThdGetTicks(thread); - - callback_cpu_ticks(thread->total_ticks); - } - */ - - /* - callback_fifos_state = [&system_view](size_t app_n, size_t baseband_n) { - system_view.status_view.text_app_fifo_n.set( - ui::to_string_dec_uint(app_n, 3) - ); - system_view.status_view.text_baseband_fifo_n.set( - ui::to_string_dec_uint(baseband_n, 3) - ); - }; - */ - /* - callback_cpu_ticks = [&system_view](systime_t ticks) { - static systime_t last_ticks = 0; - const auto delta_ticks = ticks - last_ticks; - last_ticks = ticks; - - const auto text_pct = ui::to_string_dec_uint(delta_ticks / 2000000, 3) + "% idle"; - system_view.status_view.text_ticks.set( - text_pct - ); - }; - */ - } -/* - void paint_widget(ui::Widget* const w) { - if( w->visible() ) { - if( w->dirty() ) { - w->paint(painter); - // Force-paint all children. - for(const auto child : w->children()) { - child->set_dirty(); - paint_widget(child); + if( sd_card_present ) { + if( sdcConnect(&SDCD1) == CH_SUCCESS ) { + if( sd_card::filesystem::mount() == FR_OK ) { + SDCardStatusMessage message { true }; + context.message_map().send(&message); + } else { + // TODO: Error, modal warning? + } + } else { + // TODO: Error, modal warning? } - w->set_clean(); } else { - // Selectively paint all children. - for(const auto child : w->children()) { - paint_widget(child); - } - } - } - } -*/ - void paint_widget(ui::Widget* const w) { - if( w->hidden() ) { - // Mark widget (and all children) as invisible. - w->visible(false); - } else { - // Mark this widget as visible and recurse. - w->visible(true); + sdcDisconnect(&SDCD1); - if( w->dirty() ) { - w->paint(painter); - // Force-paint all children. - for(const auto child : w->children()) { - child->set_dirty(); - paint_widget(child); - } - w->set_clean(); - } else { - // Selectively paint all children. - for(const auto child : w->children()) { - paint_widget(child); - } + SDCardStatusMessage message { false }; + context.message_map().send(&message); } } } @@ -385,14 +224,7 @@ private: } void handle_lcd_frame_sync() { - if( ui_dirty ) { - paint_widget(top_widget); - ui_dirty = false; - } - } - - void handle_sd_card_detect() { - + painter.paint_widget_tree(top_widget); } void handle_switches() { @@ -402,7 +234,7 @@ private: if( switches_state[i] ) { const auto event = static_cast(i); if( !event_bubble_key(event) ) { - context.focus_manager.update(top_widget, event); + context.focus_manager().update(top_widget, event); } } } @@ -421,7 +253,7 @@ private: } bool event_bubble_key(const ui::KeyEvent event) { - auto target = context.focus_manager.focus_widget(); + auto target = context.focus_manager().focus_widget(); while( (target != nullptr) && !target->on_key(event) ) { target = target->parent(); } @@ -431,7 +263,7 @@ private: } void event_bubble_encoder(const ui::EncoderEvent event) { - auto target = context.focus_manager.focus_widget(); + auto target = context.focus_manager().focus_widget(); while( (target != nullptr) && !target->on_encoder(event) ) { target = target->parent(); } @@ -495,8 +327,6 @@ message_handlers[Message::ID::TestResults] = [&system_view](const Message* const */ int main(void) { - ui::Context context; - portapack::init(); if( !cpld_update_if_necessary() ) { @@ -506,51 +336,44 @@ int main(void) { init_message_queues(); portapack::io.init(); - portapack::display.init(); sdcStart(&SDCD1, nullptr); - rtc::interrupt::enable_second_inc(); - nvicEnableVector(RTC_IRQn, CORTEX_PRIORITY_MASK(LPC_RTC_IRQ_PRIORITY)); - - controls_init(); - - lcd_frame_sync_configure(); - - events_initialize(chThdSelf()); + events_initialize(chThdSelf()); + init_message_queues(); + ui::Context context; ui::SystemView system_view { context, - { 0, 0, 240, 320 } + portapack::display.screen_rect() }; ui::Painter painter; - - context.message_map[Message::ID::FSKPacket] = [](const Message* const p) { - const auto message = static_cast(p); - (void)message; - }; - - context.message_map[Message::ID::TXDone] = [](const Message* const p) { - const auto message = static_cast(p); - (void)message; - }; - - context.message_map[Message::ID::Retune] = [](const Message* const p) { - const auto message = static_cast(p); - (void)message; - }; - EventDispatcher event_dispatcher { &system_view, painter, context }; + auto& message_handlers = context.message_map(); + message_handlers.register_handler(Message::ID::Shutdown, + [&event_dispatcher](const Message* const) { + event_dispatcher.request_stop(); + } + ); + + m4_init(portapack::spi_flash::baseband, portapack::memory::map::m4_code); + + controls_init(); + lcd_frame_sync_configure(); + rtc_interrupt_enable(); m4txevent_interrupt_enable(); - m4_init(portapack::spi_flash::baseband, portapack::spi_flash::m4_text_ram_base); + event_dispatcher.run(); - while(true) { - const auto events = event_dispatcher.wait(); - event_dispatcher.dispatch(events); - } + sdcDisconnect(&SDCD1); + sdcStop(&SDCD1); + + portapack::shutdown(); + m4_init(portapack::spi_flash::hackrf, portapack::memory::map::m4_code_hackrf); + + rgu::reset(rgu::Reset::M0APP); return 0; } diff --git a/firmware/application/portapack.cpp b/firmware/application/portapack.cpp index 4912d62dd..99d23e449 100644 --- a/firmware/application/portapack.cpp +++ b/firmware/application/portapack.cpp @@ -21,6 +21,7 @@ #include "portapack.hpp" #include "portapack_hal.hpp" +#include "portapack_persistent_memory.hpp" #include "hackrf_hal.hpp" #include "hackrf_gpio.hpp" @@ -131,6 +132,7 @@ void init() { led_tx.setup(); clock_manager.init(); + clock_manager.set_reference_ppb(persistent_memory::correction_ppb()); clock_manager.run_at_full_speed(); clock_manager.start_audio_pll(); @@ -145,8 +147,6 @@ void init() { } void shutdown() { - sdcStop(&SDCD1); - display.shutdown(); radio::disable(); @@ -157,6 +157,9 @@ void shutdown() { // TODO: Wait a bit for supplies to discharge? chSysDisable(); + + systick_stop(); + hackrf::one::reset(); } diff --git a/firmware/application/radio.cpp b/firmware/application/radio.cpp index 6073ca10b..dcb6bfa7e 100644 --- a/firmware/application/radio.cpp +++ b/firmware/application/radio.cpp @@ -37,7 +37,6 @@ using namespace hackrf::one; #include "portapack.hpp" -#include "portapack_persistent_memory.hpp" namespace radio { @@ -118,9 +117,7 @@ void set_direction(const rf::Direction new_direction) { } bool set_tuning_frequency(const rf::Frequency frequency) { - const int32_t frequency_correction = frequency * portapack::persistent_memory::correction_ppb() / 1000000000; - rf::Frequency corrected_frequency = frequency + frequency_correction; - const auto tuning_config = tuning::config::create(corrected_frequency); + const auto tuning_config = tuning::config::create(frequency); if( tuning_config.is_valid() ) { first_if.disable(); @@ -164,6 +161,10 @@ void streaming_enable() { baseband_sgpio.streaming_enable(); } +void streaming_disable() { + baseband_sgpio.streaming_disable(); +} + void disable() { baseband_sgpio.streaming_disable(); baseband_codec.set_mode(max5864::Mode::Shutdown); diff --git a/firmware/application/radio.hpp b/firmware/application/radio.hpp index 280b96ab3..442968aad 100644 --- a/firmware/application/radio.hpp +++ b/firmware/application/radio.hpp @@ -43,6 +43,7 @@ void set_baseband_filter_bandwidth(const uint32_t bandwidth_minimum); void set_baseband_decimation_by(const size_t n); void streaming_enable(); +void streaming_disable(); void disable(); extern rffc507x::RFFC507x first_if; diff --git a/firmware/application/receiver_model.cpp b/firmware/application/receiver_model.cpp index d5f881ee8..23087077a 100644 --- a/firmware/application/receiver_model.cpp +++ b/firmware/application/receiver_model.cpp @@ -49,7 +49,7 @@ int32_t ReceiverModel::reference_ppm_correction() const { void ReceiverModel::set_reference_ppm_correction(int32_t v) { persistent_memory::set_correction_ppb(v * 1000); - update_tuning_frequency(); + clock_manager.set_reference_ppb(v * 1000); } bool ReceiverModel::rf_amp() const { @@ -92,19 +92,11 @@ uint32_t ReceiverModel::sampling_rate() const { return baseband_configuration.sampling_rate; } -void ReceiverModel::set_sampling_rate(uint32_t hz) { - baseband_configuration.sampling_rate = hz; - update_baseband_configuration(); -} uint32_t ReceiverModel::modulation() const { return baseband_configuration.mode; } -void ReceiverModel::set_modulation(int32_t v) { - baseband_configuration.mode = v; - update_modulation(); -} volume_t ReceiverModel::headphone_volume() const { return headphone_volume_; @@ -120,10 +112,6 @@ uint32_t ReceiverModel::baseband_oversampling() const { return baseband_configuration.decimation_factor; } -void ReceiverModel::set_baseband_oversampling(uint32_t v) { - baseband_configuration.decimation_factor = v; - update_baseband_configuration(); -} void ReceiverModel::enable() { radio::set_direction(rf::Direction::Receive); @@ -147,14 +135,17 @@ void ReceiverModel::disable() { .decimation_factor = 1, } }; - shared_memory.baseband_queue.push(&message); - while( !message.is_free() ); + shared_memory.baseband_queue.push(message); radio::disable(); } int32_t ReceiverModel::tuning_offset() { - return -(sampling_rate() / 4); + if( baseband_configuration.mode == 4 ) { + return 0; + } else { + return -(sampling_rate() / 4); + } } void ReceiverModel::update_tuning_frequency() { @@ -177,24 +168,22 @@ void ReceiverModel::update_vga() { radio::set_vga_gain(vga_gain_db_); } -void ReceiverModel::update_modulation() { +void ReceiverModel::set_baseband_configuration(const BasebandConfiguration config) { + baseband_configuration = config; update_baseband_configuration(); } void ReceiverModel::update_baseband_configuration() { + radio::streaming_disable(); + clock_manager.set_sampling_frequency(sampling_rate() * baseband_oversampling()); update_tuning_frequency(); radio::set_baseband_decimation_by(baseband_oversampling()); BasebandConfigurationMessage message { baseband_configuration }; - shared_memory.baseband_queue.push(&message); + shared_memory.baseband_queue.push(message); - // Block until message is consumed, since we allocated it on the stack. - while( !message.is_free() ); - - if( baseband_configuration.mode == 3 ) { - update_fsk_configuration(); - } + radio::streaming_enable(); } void ReceiverModel::update_headphone_volume() { @@ -203,27 +192,3 @@ void ReceiverModel::update_headphone_volume() { audio_codec.set_headphone_volume(headphone_volume_); } - -static constexpr FSKConfiguration fsk_configuration_ais = { - .symbol_rate = 9600, - .access_code = 0b01010101010101010101111110, - .access_code_length = 26, - .access_code_tolerance = 1, - .packet_length = 256, -}; - -static constexpr FSKConfiguration fsk_configuration_tpms_a = { - .symbol_rate = 19200, - .access_code = 0b0101010101010101010101010110, - .access_code_length = 28, - .access_code_tolerance = 1, - .packet_length = 160, -}; - -void ReceiverModel::update_fsk_configuration() { - FSKConfigurationMessage message { fsk_configuration_ais }; - shared_memory.baseband_queue.push(&message); - - // Block until message is consumed, since we allocated it on the stack. - while( !message.is_free() ); -} diff --git a/firmware/application/receiver_model.hpp b/firmware/application/receiver_model.hpp index 969ef3619..71b4c7db1 100644 --- a/firmware/application/receiver_model.hpp +++ b/firmware/application/receiver_model.hpp @@ -61,20 +61,19 @@ public: void set_vga(int32_t v_db); uint32_t sampling_rate() const; - void set_sampling_rate(uint32_t hz); uint32_t modulation() const; - void set_modulation(int32_t v); volume_t headphone_volume() const; void set_headphone_volume(volume_t v); uint32_t baseband_oversampling() const; - void set_baseband_oversampling(uint32_t v); void enable(); void disable(); + void set_baseband_configuration(const BasebandConfiguration config); + private: rf::Frequency frequency_step_ { 25000 }; bool rf_amp_ { false }; @@ -82,7 +81,7 @@ private: uint32_t baseband_bandwidth_ { max2837::filter::bandwidth_minimum }; int32_t vga_gain_db_ { 32 }; BasebandConfiguration baseband_configuration { - .mode = 1, + .mode = 1, /* TODO: Enum! */ .sampling_rate = 3072000, .decimation_factor = 4, }; @@ -96,11 +95,9 @@ private: void update_lna(); void update_baseband_bandwidth(); void update_vga(); - void update_modulation(); void update_baseband_configuration(); void update_headphone_volume(); - void update_fsk_configuration(); }; #endif/*__RECEIVER_MODEL_H__*/ diff --git a/firmware/application/sd_card.hpp b/firmware/application/sd_card.hpp new file mode 100644 index 000000000..d7827b90e --- /dev/null +++ b/firmware/application/sd_card.hpp @@ -0,0 +1,47 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __SD_CARD_H__ +#define __SD_CARD_H__ + +#include "ff.h" + +namespace sd_card { +namespace filesystem { + +namespace { + +FATFS fs; + +} + +FRESULT mount() { + return f_mount(&fs, "", 0); +} + +FRESULT unmount() { + return f_mount(NULL, "", 0); +} + +} /* namespace filesystem */ +} /* namespace sd_card */ + +#endif/*__SD_CARD_H__*/ diff --git a/firmware/application/touch.hpp b/firmware/application/touch.hpp index c56460c99..25d2dcd3b 100644 --- a/firmware/application/touch.hpp +++ b/firmware/application/touch.hpp @@ -38,7 +38,7 @@ using sample_t = uint16_t; constexpr sample_t sample_max = 1023; -constexpr sample_t touch_threshold = sample_max * 0.3f; +constexpr sample_t touch_threshold = sample_max * 0.5f; struct Samples { sample_t xp; diff --git a/firmware/application/transmitter_model.cpp b/firmware/application/transmitter_model.cpp index 35801b66b..9cf18cb03 100644 --- a/firmware/application/transmitter_model.cpp +++ b/firmware/application/transmitter_model.cpp @@ -119,8 +119,7 @@ void TransmitterModel::disable() { .decimation_factor = 1, } }; - shared_memory.baseband_queue.push(&message); - while( !message.is_free() ); + shared_memory.baseband_queue.push(message); radio::disable(); } @@ -154,13 +153,14 @@ void TransmitterModel::update_modulation() { } void TransmitterModel::update_baseband_configuration() { + radio::streaming_disable(); + clock_manager.set_sampling_frequency(sampling_rate() * baseband_oversampling()); update_tuning_frequency(); radio::set_baseband_decimation_by(baseband_oversampling()); BasebandConfigurationMessage message { baseband_configuration }; - shared_memory.baseband_queue.push(&message); + shared_memory.baseband_queue.push(message); - // Block until message is consumed, since we allocated it on the stack. - while( !message.is_free() ); + radio::streaming_enable(); } diff --git a/firmware/application/transmitter_model.hpp b/firmware/application/transmitter_model.hpp index 2fa296313..8cab94f01 100644 --- a/firmware/application/transmitter_model.hpp +++ b/firmware/application/transmitter_model.hpp @@ -72,7 +72,7 @@ private: uint32_t baseband_bandwidth_ { max2837::filter::bandwidth_minimum }; int32_t vga_gain_db_ { 8 }; BasebandConfiguration baseband_configuration { - .mode = 15, + .mode = 16, .sampling_rate = 2280000, .decimation_factor = 1, }; diff --git a/firmware/application/ui_afsksetup.cpp b/firmware/application/ui_afsksetup.cpp index 462f0563f..19f22de40 100644 --- a/firmware/application/ui_afsksetup.cpp +++ b/firmware/application/ui_afsksetup.cpp @@ -52,7 +52,7 @@ void AFSKSetupView::paint(Painter& painter) { void AFSKSetupView::updfreq(rf::Frequency f) { char finalstr[9] = {0}; - persistent_memory::set_tuned_frequency(f); + portapack::persistent_memory::set_tuned_frequency(f); transmitter_model.set_tuning_frequency(f); auto mhz = to_string_dec_int(f / 1000000, 3); @@ -90,16 +90,16 @@ AFSKSetupView::AFSKSetupView( &button_done } }); - if (persistent_memory::afsk_config() & 1) checkbox_lsb.set_value(true); - if (persistent_memory::afsk_config() & 2) checkbox_parity.set_value(true); - if (persistent_memory::afsk_config() & 4) checkbox_datasize.set_value(true); + if (portapack::persistent_memory::afsk_config() & 1) checkbox_lsb.set_value(true); + if (portapack::persistent_memory::afsk_config() & 2) checkbox_parity.set_value(true); + if (portapack::persistent_memory::afsk_config() & 4) checkbox_datasize.set_value(true); - updfreq(persistent_memory::tuned_frequency()); + updfreq(portapack::persistent_memory::tuned_frequency()); - field_mark.set_value(persistent_memory::afsk_mark_freq()*100); - field_space.set_value(persistent_memory::afsk_space_freq()*100); - field_bw.set_value(persistent_memory::afsk_bw()); - rpt = (persistent_memory::afsk_config() >> 8) & 0xFF; + field_mark.set_value(portapack::persistent_memory::afsk_mark_freq()*100); + field_space.set_value(portapack::persistent_memory::afsk_space_freq()*100); + field_bw.set_value(portapack::persistent_memory::afsk_bw()); + rpt = (portapack::persistent_memory::afsk_config() >> 8) & 0xFF; if (rpt > 99) rpt = 5; field_repeat.set_value(rpt); @@ -111,18 +111,18 @@ AFSKSetupView::AFSKSetupView( nav.push(new_view); }; - if (persistent_memory::afsk_bitrate() == 1200) { + if (portapack::persistent_memory::afsk_bitrate() == 1200) { button_setbps.set_text("1200 bps"); } else { button_setbps.set_text("2400 bps"); } button_setbps.on_select = [this](Button&){ - if (persistent_memory::afsk_bitrate() == 1200) { - persistent_memory::set_afsk_bitrate(2400); + if (portapack::persistent_memory::afsk_bitrate() == 1200) { + portapack::persistent_memory::set_afsk_bitrate(2400); button_setbps.set_text("2400 bps"); } else { - persistent_memory::set_afsk_bitrate(1200); + portapack::persistent_memory::set_afsk_bitrate(1200); button_setbps.set_text("1200 bps"); } }; @@ -130,15 +130,15 @@ AFSKSetupView::AFSKSetupView( button_done.on_select = [this,&nav](Button&){ uint32_t afsk_config = 0; - persistent_memory::set_afsk_mark(field_mark.value()/100); - persistent_memory::set_afsk_space(field_space.value()/100); - persistent_memory::set_afsk_bw(field_bw.value()); + portapack::persistent_memory::set_afsk_mark(field_mark.value()/100); + portapack::persistent_memory::set_afsk_space(field_space.value()/100); + portapack::persistent_memory::set_afsk_bw(field_bw.value()); if (checkbox_lsb.value() == true) afsk_config |= 1; if (checkbox_parity.value() == true) afsk_config |= 2; if (checkbox_datasize.value() == true) afsk_config |= 4; afsk_config |= (field_repeat.value() << 8); - persistent_memory::set_afsk_config(afsk_config); + portapack::persistent_memory::set_afsk_config(afsk_config); nav.pop(); }; diff --git a/firmware/application/ui_audio.cpp b/firmware/application/ui_audio.cpp index 08176d0df..0dd698e2b 100644 --- a/firmware/application/ui_audio.cpp +++ b/firmware/application/ui_audio.cpp @@ -26,13 +26,15 @@ namespace ui { void Audio::on_show() { - context().message_map[Message::ID::AudioStatistics] = [this](const Message* const p) { - this->on_statistics_update(static_cast(p)->statistics); - }; + context().message_map().register_handler(Message::ID::AudioStatistics, + [this](const Message* const p) { + this->on_statistics_update(static_cast(p)->statistics); + } + ); } void Audio::on_hide() { - context().message_map[Message::ID::AudioStatistics] = nullptr; + context().message_map().unregister_handler(Message::ID::AudioStatistics); } void Audio::paint(Painter& painter) { diff --git a/firmware/application/ui_baseband_stats_view.cpp b/firmware/application/ui_baseband_stats_view.cpp new file mode 100644 index 000000000..fcf0816ee --- /dev/null +++ b/firmware/application/ui_baseband_stats_view.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "ui_baseband_stats_view.hpp" + +#include +#include + +#include "hackrf_hal.hpp" +using namespace hackrf::one; + +namespace ui { + +/* BasebandStatsView *****************************************************/ + +BasebandStatsView::BasebandStatsView() { + add_children({ { + &text_stats, + } }); +} + +void BasebandStatsView::on_show() { + context().message_map().register_handler(Message::ID::BasebandStatistics, + [this](const Message* const p) { + this->on_statistics_update(static_cast(p)->statistics); + } + ); +} + +void BasebandStatsView::on_hide() { + context().message_map().unregister_handler(Message::ID::BasebandStatistics); +} + + +static std::string ticks_to_percent_string(const uint32_t ticks) { + constexpr size_t decimal_digits = 1; + constexpr size_t decimal_factor = decimal_digits * 10; + + const uint32_t percent_x10 = ticks / (base_m4_clk_f / (100 * decimal_factor)); + const uint32_t percent_x10_clipped = std::min(percent_x10, static_cast(100 * decimal_factor) - 1); + return + to_string_dec_uint(percent_x10_clipped / decimal_factor, 2) + "." + + to_string_dec_uint(percent_x10_clipped % decimal_factor, decimal_digits, '0'); +} + +void BasebandStatsView::on_statistics_update(const BasebandStatistics& statistics) { + std::string message = ticks_to_percent_string(statistics.idle_ticks) + + " " + ticks_to_percent_string(statistics.main_ticks) + + " " + ticks_to_percent_string(statistics.rssi_ticks) + + " " + ticks_to_percent_string(statistics.baseband_ticks); + + text_stats.set(message); +} + +} /* namespace ui */ diff --git a/firmware/application/ui_baseband_stats_view.hpp b/firmware/application/ui_baseband_stats_view.hpp new file mode 100644 index 000000000..700266183 --- /dev/null +++ b/firmware/application/ui_baseband_stats_view.hpp @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __UI_BASEBAND_STATS_VIEW_H__ +#define __UI_BASEBAND_STATS_VIEW_H__ + +#include "ui_widget.hpp" +#include "message.hpp" + +namespace ui { + +class BasebandStatsView : public View { +public: + BasebandStatsView(); + + void on_show() override; + void on_hide() override; + +private: + Text text_stats { + { 0 * 8, 0, (4 * 4 + 3) * 8, 1 * 16 }, + "", + }; + + void on_statistics_update(const BasebandStatistics& statistics); +}; + +} /* namespace ui */ + +#endif/*__UI_BASEBAND_STATS_VIEW_H__*/ diff --git a/firmware/application/ui_channel.cpp b/firmware/application/ui_channel.cpp index d1fc71f6e..a5c8a568d 100644 --- a/firmware/application/ui_channel.cpp +++ b/firmware/application/ui_channel.cpp @@ -26,13 +26,15 @@ namespace ui { void Channel::on_show() { - context().message_map[Message::ID::ChannelStatistics] = [this](const Message* const p) { - this->on_statistics_update(static_cast(p)->statistics); - }; + context().message_map().register_handler(Message::ID::ChannelStatistics, + [this](const Message* const p) { + this->on_statistics_update(static_cast(p)->statistics); + } + ); } void Channel::on_hide() { - context().message_map[Message::ID::ChannelStatistics] = nullptr; + context().message_map().unregister_handler(Message::ID::ChannelStatistics); } void Channel::paint(Painter& painter) { diff --git a/firmware/application/ui_console.cpp b/firmware/application/ui_console.cpp index 2fe993647..0c299acdb 100644 --- a/firmware/application/ui_console.cpp +++ b/firmware/application/ui_console.cpp @@ -26,8 +26,32 @@ using namespace portapack; namespace ui { +void Console::clear() { + display.fill_rectangle( + screen_rect(), + Color::black() + ); + pos = { 0, 0 }; + display.scroll_set_position(0); +} + void Console::write(const std::string message) { - (void)message; + const Style& s = style(); + const Font& font = s.font; + const auto rect = screen_rect(); + for(const auto c : message) { + const auto glyph = font.glyph(c); + const auto advance = glyph.advance(); + if( (pos.x + advance.x) > rect.width() ) { + crlf(); + } + const Point pos_glyph { + static_cast(rect.pos.x + pos.x), + display.scroll_area_y(pos.y) + }; + display.draw_glyph(pos_glyph, glyph, s.foreground, s.background); + pos.x += advance.x; + } } void Console::writeln(const std::string message) { @@ -36,33 +60,37 @@ void Console::writeln(const std::string message) { } void Console::paint(Painter& painter) { + // Do nothing. (void)painter; - /* - if( visible() ) { - const auto r = screen_rect(); - display.scroll_set_area(r.top(), r.bottom()); - display.scroll_set_position(0); - painter.fill_rectangle( - r, - background - ); - } else { - display.scroll_disable(); - } - */ +} + +void Console::on_show() { + const auto screen_r = screen_rect(); + display.scroll_set_area(screen_r.top(), screen_r.bottom()); + + clear(); +} + +void Console::on_hide() { + /* TODO: Clear region to eliminate brief flash of content at un-shifted + * position? + */ + display.scroll_disable(); } void Console::crlf() { - const auto line_height = style().font.line_height(); + const Style& s = style(); + const auto sr = screen_rect(); + const auto line_height = s.font.line_height(); pos.x = 0; pos.y += line_height; - const int32_t y_excess = pos.y + line_height - size().h; + const int32_t y_excess = pos.y + line_height - sr.height(); if( y_excess > 0 ) { - display.scroll(-line_height); + display.scroll(-y_excess); pos.y -= y_excess; - const Rect dirty { 0, display.scroll_area_y(pos.y), size().w, line_height }; - display.fill_rectangle(dirty, background); + const Rect dirty { sr.left(), display.scroll_area_y(pos.y), sr.width(), line_height }; + display.fill_rectangle(dirty, s.background); } } diff --git a/firmware/application/ui_console.hpp b/firmware/application/ui_console.hpp index 5722e8588..4f29486a7 100644 --- a/firmware/application/ui_console.hpp +++ b/firmware/application/ui_console.hpp @@ -32,21 +32,16 @@ namespace ui { class Console : public Widget { public: - constexpr Console( - const Rect parent_rect - ) : Widget { parent_rect } - { - } - + void clear(); void write(const std::string message); void writeln(const std::string message); void paint(Painter& painter) override; + + void on_show() override; + void on_hide() override; private: - static constexpr Color background { Color::black() }; - static constexpr Color foreground { Color::white() }; - Point pos { 0, 0 }; void crlf(); diff --git a/firmware/application/ui_debug.cpp b/firmware/application/ui_debug.cpp index a0cc826d1..42952a463 100644 --- a/firmware/application/ui_debug.cpp +++ b/firmware/application/ui_debug.cpp @@ -31,45 +31,10 @@ #include "radio.hpp" -#include "hackrf_hal.hpp" -using namespace hackrf::one; - namespace ui { FRESULT fr; /* FatFs function common result code */ -/* BasebandStatsView *****************************************************/ - -BasebandStatsView::BasebandStatsView() { - add_children({ { - &text_used, - &text_idle, - } }); -} - -void BasebandStatsView::on_show() { - context().message_map[Message::ID::BasebandStatistics] = [this](const Message* const p) { - this->on_statistics_update(static_cast(p)->statistics); - }; -} - -void BasebandStatsView::on_hide() { - context().message_map[Message::ID::BasebandStatistics] = nullptr; -} - - -static std::string ticks_to_percent_string(const uint32_t ticks) { - const uint32_t percent_x100 = ticks / (base_m4_clk_f / 10000); - return - to_string_dec_uint(percent_x100 / 100, 3) + "." + - to_string_dec_uint(percent_x100 % 100, 2, '0') + "%"; -} - -void BasebandStatsView::on_statistics_update(const BasebandStatistics& statistics) { - text_used.set(ticks_to_percent_string(statistics.baseband_ticks)); - text_idle.set(ticks_to_percent_string(statistics.idle_ticks)); -} - DebugMemoryView::DebugMemoryView(NavigationView& nav) { add_children({ { &text_title, @@ -195,7 +160,7 @@ DebugSDView::DebugSDView(NavigationView& nav) { fr = f_open(&fdst, "TST.SND", FA_OPEN_EXISTING | FA_READ); - if (!fr) led_rx.on(); + //if (!fr) led_rx.on(); /*fr = f_read(&fdst, buffer, 512*2, &bw); diff --git a/firmware/application/ui_debug.hpp b/firmware/application/ui_debug.hpp index 2568593a9..fe1658803 100644 --- a/firmware/application/ui_debug.hpp +++ b/firmware/application/ui_debug.hpp @@ -34,27 +34,6 @@ namespace ui { char hexify(char in); -class BasebandStatsView : public View { -public: - BasebandStatsView(); - - void on_show() override; - void on_hide() override; - -private: - Text text_used { - { 0, 0, 7 * 8, 1 * 16 }, - "", - }; - - Text text_idle { - { 8 * 8, 0, 7 * 8, 1 * 16 }, - "", - }; - - void on_statistics_update(const BasebandStatistics& statistics); -}; - class DebugMemoryView : public View { public: DebugMemoryView(NavigationView& nav); diff --git a/firmware/application/ui_jammer.cpp b/firmware/application/ui_jammer.cpp index a5c4e3dfb..b95b5a225 100644 --- a/firmware/application/ui_jammer.cpp +++ b/firmware/application/ui_jammer.cpp @@ -232,13 +232,16 @@ JammerView::JammerView( button_transmit.on_select = [this,&transmitter_model](Button&) { uint8_t i = 0; rf::Frequency t, range_lower; + auto& message_map = context().message_map(); - context().message_map[Message::ID::Retune] = [this, &transmitter_model](const Message* const p) { - const auto message = static_cast(p); - if (message->freq > 0) { - transmitter_model.set_tuning_frequency(message->freq); + message_map.register_handler(Message::ID::Retune, + [this,&transmitter_model](Message* const p) { + const auto message = static_cast(p); + if (message->freq > 0) { + transmitter_model.set_tuning_frequency(message->freq); + } } - }; + ); for (i = 0; i < 16; i++) { shared_memory.jammer_ranges[i].active = false; diff --git a/firmware/application/ui_lcr.cpp b/firmware/application/ui_lcr.cpp index 0476eb558..d2e077802 100644 --- a/firmware/application/ui_lcr.cpp +++ b/firmware/application/ui_lcr.cpp @@ -188,7 +188,7 @@ LCRView::LCRView( }; transmitter_model.set_modulation(16); - transmitter_model.set_tuning_frequency(persistent_memory::tuned_frequency()); + transmitter_model.set_tuning_frequency(portapack::persistent_memory::tuned_frequency()); memset(litteral, 0, 5*8); memset(rgsb, 0, 5); @@ -222,8 +222,8 @@ LCRView::LCRView( checkbox_am_e.set_value(true); // Recap: tx freq @ bps - auto fstr = to_string_dec_int(persistent_memory::tuned_frequency() / 1000, 6); - auto bstr = to_string_dec_int(persistent_memory::afsk_bitrate(), 4); + auto fstr = to_string_dec_int(portapack::persistent_memory::tuned_frequency() / 1000, 6); + auto bstr = to_string_dec_int(portapack::persistent_memory::afsk_bitrate(), 4); strcat(finalstr, fstr.c_str()); strcat(finalstr, " @ "); @@ -277,31 +277,35 @@ LCRView::LCRView( button_transmit.on_select = [this,&transmitter_model](Button&){ uint16_t c; + auto& message_map = context().message_map(); + make_frame(); - shared_memory.afsk_samples_per_bit = 228000/persistent_memory::afsk_bitrate(); - shared_memory.afsk_phase_inc_mark = persistent_memory::afsk_mark_freq()*(65536*1024)/2280; - shared_memory.afsk_phase_inc_space = persistent_memory::afsk_space_freq()*(65536*1024)/2280; + shared_memory.afsk_samples_per_bit = 228000/portapack::persistent_memory::afsk_bitrate(); + shared_memory.afsk_phase_inc_mark = portapack::persistent_memory::afsk_mark_freq()*(65536*1024)/2280; + shared_memory.afsk_phase_inc_space = portapack::persistent_memory::afsk_space_freq()*(65536*1024)/2280; - shared_memory.afsk_fmmod = persistent_memory::afsk_bw()*33; // ? + shared_memory.afsk_fmmod = portapack::persistent_memory::afsk_bw()*33; memset(shared_memory.lcrdata, 0, 256); memcpy(shared_memory.lcrdata, lcrframe_f, 256); shared_memory.afsk_transmit_done = false; - shared_memory.afsk_repeat = ((persistent_memory::afsk_config() >> 8) & 0xFF); + shared_memory.afsk_repeat = ((portapack::persistent_memory::afsk_config() >> 8) & 0xFF); - context().message_map[Message::ID::TXDone] = [this, &transmitter_model](const Message* const p) { - const auto message = static_cast(p); - if (message->n > 0) { - char str[8] = "0... "; - str[0] = hexify(message->n); - text_status.set(str); - } else { - text_status.set("Done ! "); - transmitter_model.disable(); + message_map.register_handler(Message::ID::TXDone, + [this,&transmitter_model](Message* const p) { + const auto message = static_cast(p); + if (message->n > 0) { + char str[8] = "0... "; + str[0] = hexify(message->n); + text_status.set(str); + } else { + text_status.set("Done ! "); + transmitter_model.disable(); + } } - }; + ); text_status.set("0... "); diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index 5b2e65d41..7713d027d 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -21,6 +21,7 @@ #include "ui_navigation.hpp" +#include "portapack.hpp" #include "receiver_model.hpp" #include "transmitter_model.hpp" #include "portapack_persistent_memory.hpp" @@ -265,16 +266,8 @@ PlayDeadView::PlayDeadView(NavigationView& nav, bool booting) { HackRFFirmwareView::HackRFFirmwareView(NavigationView& nav) { button_yes.on_select = [&nav](Button&){ - shutdown(); - - m4_init(spi_flash::hackrf, reinterpret_cast(0x10000000)); - - while(true) { - __WFE(); - } + m4_request_shutdown(); }; - - //377.6M: bouts de musique button_no.on_select = [&nav](Button&){ nav.pop(); @@ -282,6 +275,10 @@ HackRFFirmwareView::HackRFFirmwareView(NavigationView& nav) { add_children({ { &text_title, + &text_description_1, + &text_description_2, + &text_description_3, + &text_description_4, &button_yes, &button_no, } }); diff --git a/firmware/application/ui_navigation.hpp b/firmware/application/ui_navigation.hpp index f530757ad..012cc787a 100644 --- a/firmware/application/ui_navigation.hpp +++ b/firmware/application/ui_navigation.hpp @@ -135,8 +135,28 @@ public: private: Text text_title { - { 6 * 8, 7 * 16, 19 * 8, 16 }, - "Enter HackRF Mode?" + { 76, 4 * 16, 19 * 8, 16 }, + "HackRF Mode" + }; + + Text text_description_1 { + { 4, 7 * 16, 19 * 8, 16 }, + "Run stock HackRF firmware and" + }; + + Text text_description_2 { + { 12, 8 * 16, 19 * 8, 16 }, + "disable PortaPack until the" + }; + + Text text_description_3 { + { 4, 9 * 16, 19 * 8, 16 }, + "unit is reset or disconnected" + }; + + Text text_description_4 { + { 76, 10 * 16, 19 * 8, 16 }, + "from power?" }; Button button_yes { diff --git a/firmware/application/ui_receiver.cpp b/firmware/application/ui_receiver.cpp index 95072a54c..a4d85698b 100644 --- a/firmware/application/ui_receiver.cpp +++ b/firmware/application/ui_receiver.cpp @@ -21,9 +21,16 @@ #include "ui_receiver.hpp" +#include "ui_spectrum.hpp" +#include "ui_console.hpp" + #include "portapack.hpp" using namespace portapack; +#include "ais_baseband.hpp" + +#include "ff.h" + namespace ui { /* BasebandBandwidthField ************************************************/ @@ -269,7 +276,7 @@ void FrequencyKeypadView::field_toggle() { void FrequencyKeypadView::update_text() { const auto s = mhz.as_string() + "." + submhz.as_string(); - text_value.set(s.c_str()); + text_value.set(s); } /* FrequencyOptionsView **************************************************/ @@ -402,7 +409,6 @@ ReceiverView::ReceiverView( &field_volume, &view_frequency_options, &view_rf_gain_options, - &waterfall, } }); button_done.on_select = [&nav](Button&){ @@ -483,6 +489,7 @@ ReceiverView::ReceiverView( } ReceiverView::~ReceiverView() { + // TODO: Manipulating audio codec here, and in ui_receiver.cpp. Good to do // both? audio_codec.headphone_mute(); @@ -490,13 +497,107 @@ ReceiverView::~ReceiverView() { receiver_model.disable(); } -void ReceiverView::set_parent_rect(const Rect new_parent_rect) { - const ui::Dim header_height = 3 * 16; +void ReceiverView::on_show() { + auto& message_map = context().message_map(); + message_map.register_handler(Message::ID::AISPacket, + [this](Message* const p) { + const auto message = static_cast(p); + this->on_packet_ais(*message); + } + ); + message_map.register_handler(Message::ID::TPMSPacket, + [this](Message* const p) { + const auto message = static_cast(p); + this->on_packet_tpms(*message); + } + ); + message_map.register_handler(Message::ID::SDCardStatus, + [this](Message* const p) { + const auto message = static_cast(p); + this->on_sd_card_mounted(message->is_mounted); + } + ); +} - waterfall.set_parent_rect({ - 0, header_height, - new_parent_rect.width(), static_cast(new_parent_rect.height() - header_height) - }); +void ReceiverView::on_hide() { + auto& message_map = context().message_map(); + message_map.unregister_handler(Message::ID::SDCardStatus); + message_map.unregister_handler(Message::ID::TPMSPacket); + message_map.unregister_handler(Message::ID::AISPacket); +} + +void ReceiverView::on_packet_ais(const AISPacketMessage& message) { + const auto result = baseband::ais::packet_decode(message.packet.payload, message.packet.bits_received); + + auto console = reinterpret_cast(widget_content.get()); + if( result.first == "OK" ) { + console->writeln(result.second); + } +} + +static FIL fil_tpms; + +void ReceiverView::on_packet_tpms(const TPMSPacketMessage& message) { + auto payload = message.packet.payload; + auto payload_length = message.packet.bits_received; + + std::string hex_data; + std::string hex_error; + uint8_t byte_data = 0; + uint8_t byte_error = 0; + for(size_t i=0; i> 1) & 7) == 7 ) { + hex_data += to_string_hex(byte_data, 2); + hex_error += to_string_hex(byte_error, 2); + } + } + + auto console = reinterpret_cast(widget_content.get()); + console->writeln(hex_data.substr(0, 240 / 8)); + + if( !f_error(&fil_tpms) ) { + rtc::RTC datetime; + rtcGetTime(&RTCD1, &datetime); + std::string timestamp = + to_string_dec_uint(datetime.year(), 4) + + to_string_dec_uint(datetime.month(), 2, '0') + + to_string_dec_uint(datetime.day(), 2, '0') + + to_string_dec_uint(datetime.hour(), 2, '0') + + to_string_dec_uint(datetime.minute(), 2, '0') + + to_string_dec_uint(datetime.second(), 2, '0'); + + const auto tuning_frequency = receiver_model.tuning_frequency(); + // TODO: function doesn't take uint64_t, so when >= 1<<32, weirdness will ensue! + const auto tuning_frequency_str = to_string_dec_uint(tuning_frequency, 10); + + std::string log = timestamp + " " + tuning_frequency_str + " FSK 38.4 19.2 " + hex_data + "/" + hex_error + "\r\n"; + f_puts(log.c_str(), &fil_tpms); + f_sync(&fil_tpms); + } +} + +void ReceiverView::on_sd_card_mounted(const bool is_mounted) { + if( is_mounted ) { + const auto open_result = f_open(&fil_tpms, "tpms.txt", FA_WRITE | FA_OPEN_ALWAYS); + if( open_result == FR_OK ) { + const auto fil_size = f_size(&fil_tpms); + const auto seek_result = f_lseek(&fil_tpms, fil_size); + if( seek_result != FR_OK ) { + f_close(&fil_tpms); + } + } else { + // TODO: Error, indicate somehow. + } + } } void ReceiverView::focus() { @@ -524,13 +625,58 @@ void ReceiverView::on_vga_changed(int32_t v_db) { } void ReceiverView::on_modulation_changed(int32_t modulation) { - if( modulation == 4 ) { - /* TODO: This is TERRIBLE!!! */ - receiver_model.set_sampling_rate(2457600); - } else { - receiver_model.set_sampling_rate(3072000); + /* TODO: This is TERRIBLE!!! */ + switch(modulation) { + case 3: + case 5: + receiver_model.set_baseband_configuration({ + .mode = modulation, + .sampling_rate = 2457600, + .decimation_factor = 4, + }); + receiver_model.set_baseband_bandwidth(1750000); + break; + + case 4: + receiver_model.set_baseband_configuration({ + .mode = modulation, + .sampling_rate = 20000000, + .decimation_factor = 1, + }); + receiver_model.set_baseband_bandwidth(12000000); + break; + + default: + receiver_model.set_baseband_configuration({ + .mode = modulation, + .sampling_rate = 3072000, + .decimation_factor = 4, + }); + receiver_model.set_baseband_bandwidth(1750000); + break; + } + + remove_child(widget_content.get()); + widget_content.reset(); + + switch(modulation) { + case 3: + case 5: + widget_content = std::make_unique(); + add_child(widget_content.get()); + break; + + default: + widget_content = std::make_unique(); + add_child(widget_content.get()); + break; + } + + if( widget_content ) { + const ui::Dim header_height = 3 * 16; + const ui::Rect rect { 0, header_height, parent_rect.width(), static_cast(parent_rect.height() - header_height) }; + widget_content->set_parent_rect(rect); } - receiver_model.set_modulation(modulation); } void ReceiverView::on_show_options_frequency() { diff --git a/firmware/application/ui_receiver.hpp b/firmware/application/ui_receiver.hpp index 639ad6b74..50353b9d6 100644 --- a/firmware/application/ui_receiver.hpp +++ b/firmware/application/ui_receiver.hpp @@ -27,7 +27,6 @@ #include "ui_navigation.hpp" #include "ui_painter.hpp" #include "ui_widget.hpp" -#include "ui_spectrum.hpp" #include "utility.hpp" @@ -363,10 +362,11 @@ public: ReceiverView(NavigationView& nav, ReceiverModel& receiver_model); ~ReceiverView(); - void set_parent_rect(const Rect new_parent_rect) override; - void focus() override; + void on_show() override; + void on_hide() override; + private: ReceiverModel& receiver_model; @@ -383,12 +383,12 @@ private: }; Button button_done { - { 0 * 8, 1 * 16, 3 * 8, 16 }, + { 0 * 8, 0 * 16, 3 * 8, 16 }, " < ", }; FrequencyField field_frequency { - { 3 * 8, 1 * 16 }, + { 0 * 8, 1 * 16 }, }; LNAGainField field_lna { @@ -415,7 +415,9 @@ private: { " AM ", 0 }, { "NFM ", 1 }, { "WFM ", 2 }, - { "FSK ", 3 }, + { "AIS ", 3 }, + { "TPMS", 5 }, + { "SPEC", 4 }, } }; /* @@ -455,7 +457,7 @@ private: &style_options_group }; - spectrum::WaterfallWidget waterfall; + std::unique_ptr widget_content; void on_tuning_frequency_changed(rf::Frequency f); void on_baseband_bandwidth_changed(uint32_t bandwidth_hz); @@ -470,6 +472,10 @@ private: void on_headphone_volume_changed(int32_t v); // void on_baseband_oversampling_changed(int32_t v); void on_edit_frequency(); + + void on_packet_ais(const AISPacketMessage& message); + void on_packet_tpms(const TPMSPacketMessage& message); + void on_sd_card_mounted(const bool is_mounted); }; } /* namespace ui */ diff --git a/firmware/application/ui_rssi.cpp b/firmware/application/ui_rssi.cpp index f44c75df3..7cbba2a14 100644 --- a/firmware/application/ui_rssi.cpp +++ b/firmware/application/ui_rssi.cpp @@ -26,13 +26,15 @@ namespace ui { void RSSI::on_show() { - context().message_map[Message::ID::RSSIStatistics] = [this](const Message* const p) { - this->on_statistics_update(static_cast(p)->statistics); - }; + context().message_map().register_handler(Message::ID::RSSIStatistics, + [this](const Message* const p) { + this->on_statistics_update(static_cast(p)->statistics); + } + ); } void RSSI::on_hide() { - context().message_map[Message::ID::RSSIStatistics] = nullptr; + context().message_map().unregister_handler(Message::ID::RSSIStatistics); } void RSSI::paint(Painter& painter) { diff --git a/firmware/application/ui_setup.cpp b/firmware/application/ui_setup.cpp index 003697bb9..bddb04f81 100644 --- a/firmware/application/ui_setup.cpp +++ b/firmware/application/ui_setup.cpp @@ -127,7 +127,7 @@ SetFrequencyCorrectionView::SetFrequencyCorrectionView( } }); SetFrequencyCorrectionModel model { - portapack::persistent_memory::correction_ppb() / 1000 + static_cast(portapack::persistent_memory::correction_ppb() / 1000) }; form_init(model); diff --git a/firmware/application/ui_setup.hpp b/firmware/application/ui_setup.hpp index 21bee9a17..4c4828247 100644 --- a/firmware/application/ui_setup.hpp +++ b/firmware/application/ui_setup.hpp @@ -25,7 +25,6 @@ #include "ui_widget.hpp" #include "ui_menu.hpp" #include "ui_navigation.hpp" -#include "portapack_persistent_memory.hpp" #include @@ -191,7 +190,7 @@ private: Text text_firmware { { 0, 128, 240, 16 }, - "Firmware Version HAVOC 0.10", + "Git Commit Hash " GIT_REVISION, }; Text text_cpld_hackrf { diff --git a/firmware/application/ui_spectrum.hpp b/firmware/application/ui_spectrum.hpp index 029c0c5ca..6a10088f4 100644 --- a/firmware/application/ui_spectrum.hpp +++ b/firmware/application/ui_spectrum.hpp @@ -40,6 +40,10 @@ namespace spectrum { class FrequencyScale : public Widget { public: + void on_show() override { + clear(); + } + void set_spectrum_sampling_rate(const uint32_t new_sampling_rate, const size_t new_spectrum_bins) { if( (spectrum_sampling_rate != new_sampling_rate) || (spectrum_bins != new_spectrum_bins) ) { @@ -83,6 +87,12 @@ private: uint32_t channel_filter_pass_frequency { 0 }; uint32_t channel_filter_stop_frequency { 0 }; + void clear() { + spectrum_sampling_rate = 0; + spectrum_bins = 0; + set_dirty(); + } + void clear_background(Painter& painter, const Rect r) { painter.fill_rectangle(r, Color::black()); } @@ -181,6 +191,8 @@ private: class WaterfallView : public Widget { public: void on_show() override { + clear(); + const auto screen_r = screen_rect(); display.scroll_set_area(screen_r.top(), screen_r.bottom()); } @@ -201,16 +213,15 @@ public: const ChannelSpectrum& spectrum ) { /* TODO: static_assert that message.spectrum.db.size() >= pixel_row.size() */ - const auto& db = *spectrum.db; std::array pixel_row; for(size_t i=0; i<120; i++) { - const auto pixel_color = spectrum_rgb3_lut[db[256 - 120 + i]]; + const auto pixel_color = spectrum_rgb3_lut[spectrum.db[256 - 120 + i]]; pixel_row[i] = pixel_color; } for(size_t i=120; i<240; i++) { - const auto pixel_color = spectrum_rgb3_lut[db[i - 120]]; + const auto pixel_color = spectrum_rgb3_lut[spectrum.db[i - 120]]; pixel_row[i] = pixel_color; } @@ -221,6 +232,14 @@ public: pixel_row ); } + +private: + void clear() { + display.fill_rectangle( + screen_rect(), + Color::black() + ); + } }; class WaterfallWidget : public View { @@ -233,13 +252,15 @@ public: } void on_show() override { - context().message_map[Message::ID::ChannelSpectrum] = [this](const Message* const p) { - this->on_channel_spectrum(reinterpret_cast(p)->spectrum); - }; + context().message_map().register_handler(Message::ID::ChannelSpectrum, + [this](const Message* const p) { + this->on_channel_spectrum(reinterpret_cast(p)->spectrum); + } + ); } void on_hide() override { - context().message_map[Message::ID::ChannelSpectrum] = nullptr; + context().message_map().unregister_handler(Message::ID::ChannelSpectrum); } void set_parent_rect(const Rect new_parent_rect) override { diff --git a/firmware/application/ui_whistle.cpp b/firmware/application/ui_whistle.cpp index 9cc180bc6..b9c6d7658 100644 --- a/firmware/application/ui_whistle.cpp +++ b/firmware/application/ui_whistle.cpp @@ -73,7 +73,7 @@ WhistleView::WhistleView( chMBInit(&mbox, mbox_buffer, 3); transmitter_model.set_modulation(17); - transmitter_model.set_tuning_frequency(persistent_memory::tuned_frequency()); + transmitter_model.set_tuning_frequency(portapack::persistent_memory::tuned_frequency()); add_children({ { &button_transmit, diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index f28181307..ffb20d12a 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -125,13 +125,23 @@ CSRC = $(PORTSRC) \ CPPSRC = main.cpp \ message_queue.cpp \ event_m4.cpp \ + irq_ipc_m4.cpp \ gpdma.cpp \ baseband_dma.cpp \ portapack_shared_memory.cpp \ + baseband_processor.cpp \ + channel_decimator.cpp \ dsp_decimate.cpp \ dsp_demodulate.cpp \ + matched_filter.cpp \ + proc_am_audio.cpp \ + proc_nfm_audio.cpp \ + proc_wfm_audio.cpp \ + proc_ais.cpp \ + proc_wideband_spectrum.cpp \ + proc_tpms.cpp \ + dsp_squelch.cpp \ clock_recovery.cpp \ - access_code_correlator.cpp \ packet_builder.cpp \ dsp_fft.cpp \ dsp_fir_taps.cpp \ @@ -142,6 +152,7 @@ CPPSRC = main.cpp \ audio_dma.cpp \ touch_dma.cpp \ ../common/utility.cpp \ + ../common/chibios_cpp.cpp \ ../common/debug.cpp \ ../common/gcc.cpp @@ -222,7 +233,8 @@ CPPWARN = -Wall -Wextra # TODO: Switch -DCRT0_INIT_DATA depending on load from RAM or SPIFI? # NOTE: _RANDOM_TCC to kill a GCC 4.9.3 error with std::max argument types DDEFS = -DLPC43XX -DLPC43XX_M4 -D__NEWLIB__ -DHACKRF_ONE \ - -DTOOLCHAIN_GCC -DTOOLCHAIN_GCC_ARM -D_RANDOM_TCC=0 + -DTOOLCHAIN_GCC -DTOOLCHAIN_GCC_ARM -D_RANDOM_TCC=0 \ + -DGIT_REVISION=\"$(GIT_REVISION)\" # List all default ASM defines here, like -D_DEBUG=1 DADEFS = diff --git a/firmware/baseband/baseband_processor.cpp b/firmware/baseband/baseband_processor.cpp new file mode 100644 index 000000000..83e6d857e --- /dev/null +++ b/firmware/baseband/baseband_processor.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "baseband_processor.hpp" + +#include "portapack_shared_memory.hpp" + +#include "dsp_fft.hpp" + +#include "audio_dma.hpp" + +#include "message.hpp" +#include "event_m4.hpp" +#include "utility.hpp" + +#include +#include + +void BasebandProcessor::update_spectrum() { + // Called from idle thread (after EVT_MASK_SPECTRUM is flagged) + if( channel_spectrum_request_update ) { + /* Decimated buffer is full. Compute spectrum. */ + channel_spectrum_request_update = false; + fft_c_preswapped(channel_spectrum); + + ChannelSpectrumMessage spectrum_message; + for(size_t i=0; i .magnitude, or something more (less!) accurate. */ + spectrum_message.spectrum.db_count = spectrum_message.spectrum.db.size(); + spectrum_message.spectrum.sampling_rate = channel_spectrum_sampling_rate; + spectrum_message.spectrum.channel_filter_pass_frequency = channel_filter_pass_frequency; + spectrum_message.spectrum.channel_filter_stop_frequency = channel_filter_stop_frequency; + shared_memory.application_queue.push(spectrum_message); + } +} + +void BasebandProcessor::feed_channel_stats(const buffer_c16_t channel) { + channel_stats.feed( + channel, + [this](const ChannelStatistics statistics) { + this->post_channel_stats_message(statistics); + } + ); +} + +void BasebandProcessor::feed_channel_spectrum( + const buffer_c16_t channel, + const uint32_t filter_pass_frequency, + const uint32_t filter_stop_frequency +) { + channel_filter_pass_frequency = filter_pass_frequency; + channel_filter_stop_frequency = filter_stop_frequency; + channel_spectrum_decimator.feed( + channel, + [this](const buffer_c16_t data) { + this->post_channel_spectrum_message(data); + } + ); +} + +void BasebandProcessor::fill_audio_buffer(const buffer_s16_t audio) { + auto audio_buffer = audio::dma::tx_empty_buffer();; + for(size_t i=0; ipost_audio_stats_message(statistics); + } + ); +} + +void BasebandProcessor::post_audio_stats_message(const AudioStatistics statistics) { + audio_stats_message.statistics = statistics; + shared_memory.application_queue.push(audio_stats_message); +} diff --git a/firmware/baseband/baseband_processor.hpp b/firmware/baseband/baseband_processor.hpp new file mode 100644 index 000000000..a1a228897 --- /dev/null +++ b/firmware/baseband/baseband_processor.hpp @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __BASEBAND_PROCESSOR_H__ +#define __BASEBAND_PROCESSOR_H__ + +#include "dsp_types.hpp" +#include "complex.hpp" + +#include "block_decimator.hpp" +#include "channel_stats_collector.hpp" +#include "audio_stats_collector.hpp" + +#include +#include +#include + +class BasebandProcessor { +public: + virtual ~BasebandProcessor() = default; + + virtual void execute(buffer_c8_t buffer) = 0; + + void update_spectrum(); + +protected: + void feed_channel_stats(const buffer_c16_t channel); + + void feed_channel_spectrum( + const buffer_c16_t channel, + const uint32_t filter_pass_frequency, + const uint32_t filter_stop_frequency + ); + + void fill_audio_buffer(const buffer_s16_t audio); + + volatile bool channel_spectrum_request_update { false }; + std::array, 256> channel_spectrum; + uint32_t channel_spectrum_sampling_rate { 0 }; + uint32_t channel_filter_pass_frequency { 0 }; + uint32_t channel_filter_stop_frequency { 0 }; + +private: + BlockDecimator<256> channel_spectrum_decimator { 4 }; + + ChannelStatsCollector channel_stats; + ChannelStatisticsMessage channel_stats_message; + + AudioStatsCollector audio_stats; + AudioStatisticsMessage audio_stats_message; + + void post_channel_stats_message(const ChannelStatistics statistics); + void post_channel_spectrum_message(const buffer_c16_t data); + void feed_audio_stats(const buffer_s16_t audio); + void post_audio_stats_message(const AudioStatistics statistics); +}; + +#endif/*__BASEBAND_PROCESSOR_H__*/ diff --git a/firmware/baseband/baseband_stats_collector.hpp b/firmware/baseband/baseband_stats_collector.hpp index 6fc5439be..a44c2936d 100644 --- a/firmware/baseband/baseband_stats_collector.hpp +++ b/firmware/baseband/baseband_stats_collector.hpp @@ -26,13 +26,25 @@ #include "dsp_types.hpp" #include "message.hpp" -#include "utility.hpp" +#include "utility_m4.hpp" #include #include class BasebandStatsCollector { public: + BasebandStatsCollector( + const Thread* const thread_idle, + const Thread* const thread_main, + const Thread* const thread_rssi, + const Thread* const thread_baseband + ) : thread_idle { thread_idle }, + thread_main { thread_main }, + thread_rssi { thread_rssi }, + thread_baseband { thread_baseband } + { + } + template void process(buffer_c8_t buffer, Callback callback) { samples += buffer.count; @@ -40,11 +52,21 @@ public: const size_t report_samples = buffer.sampling_rate * report_interval; const auto report_delta = samples - samples_last_report; if( report_delta >= report_samples ) { - const auto idle_ticks = chSysGetIdleThread()->total_ticks; + BasebandStatistics statistics; + + const auto idle_ticks = thread_idle->total_ticks; statistics.idle_ticks = (idle_ticks - last_idle_ticks); last_idle_ticks = idle_ticks; - const auto baseband_ticks = chThdSelf()->total_ticks; + const auto main_ticks = thread_main->total_ticks; + statistics.main_ticks = (main_ticks - last_main_ticks); + last_main_ticks = main_ticks; + + const auto rssi_ticks = thread_rssi->total_ticks; + statistics.rssi_ticks = (rssi_ticks - last_rssi_ticks); + last_rssi_ticks = rssi_ticks; + + const auto baseband_ticks = thread_baseband->total_ticks; statistics.baseband_ticks = (baseband_ticks - last_baseband_ticks); last_baseband_ticks = baseband_ticks; @@ -59,10 +81,15 @@ public: private: static constexpr float report_interval { 1.0f }; - BasebandStatistics statistics; size_t samples { 0 }; size_t samples_last_report { 0 }; + const Thread* const thread_idle; uint32_t last_idle_ticks { 0 }; + const Thread* const thread_main; + uint32_t last_main_ticks { 0 }; + const Thread* const thread_rssi; + uint32_t last_rssi_ticks { 0 }; + const Thread* const thread_baseband; uint32_t last_baseband_ticks { 0 }; }; diff --git a/firmware/baseband/block_decimator.hpp b/firmware/baseband/block_decimator.hpp index c3d323b67..dbca0ebd9 100644 --- a/firmware/baseband/block_decimator.hpp +++ b/firmware/baseband/block_decimator.hpp @@ -24,7 +24,9 @@ #include #include +#include +#include "dsp_types.hpp" #include "complex.hpp" template diff --git a/firmware/baseband/channel_decimator.cpp b/firmware/baseband/channel_decimator.cpp new file mode 100644 index 000000000..a7e7edf73 --- /dev/null +++ b/firmware/baseband/channel_decimator.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "channel_decimator.hpp" + +buffer_c16_t ChannelDecimator::execute_decimation(buffer_c8_t buffer) { + const buffer_c16_t work_baseband_buffer { + work_baseband.data(), + work_baseband.size() + }; + + const buffer_s16_t work_audio_buffer { + (int16_t*)work_baseband.data(), + sizeof(work_baseband) / sizeof(int16_t) + }; + + /* 3.072MHz complex[2048], [-128, 127] + * -> Shift by -fs/4 + * -> 3rd order CIC: -0.1dB @ 0.028fs, -1dB @ 0.088fs, -60dB @ 0.468fs + * -0.1dB @ 86kHz, -1dB @ 270kHz, -60dB @ 1.44MHz + * -> gain of 256 + * -> decimation by 2 + * -> 1.544MHz complex[1024], [-32768, 32512] */ + const auto stage_0_out = translate.execute(buffer, work_baseband_buffer); + + //if( fs_over_4_downconvert ) { + // // TODO: + //} else { + // Won't work until cic_0 will accept input type of buffer_c8_t. + // stage_0_out = cic_0.execute(buffer, work_baseband_buffer); + //} + + /* 1.536MHz complex[1024], [-32768, 32512] + * -> 3rd order CIC: -0.1dB @ 0.028fs, -1dB @ 0.088fs, -60dB @ 0.468fs + * -0.1dB @ 43kHz, -1dB @ 136kHz, -60dB @ 723kHz + * -> gain of 8 + * -> decimation by 2 + * -> 768kHz complex[512], [-8192, 8128] */ + auto cic_1_out = cic_1.execute(stage_0_out, work_baseband_buffer); + if( decimation_factor == DecimationFactor::By4 ) { + return cic_1_out; + } + + /* 768kHz complex[512], [-32768, 32512] + * -> 3rd order CIC decimation by 2, gain of 1 + * -> 384kHz complex[256], [-32768, 32512] */ + auto cic_2_out = cic_2.execute(cic_1_out, work_baseband_buffer); + if( decimation_factor == DecimationFactor::By8 ) { + return cic_2_out; + } + + /* 384kHz complex[256], [-32768, 32512] + * -> 3rd order CIC decimation by 2, gain of 1 + * -> 192kHz complex[128], [-32768, 32512] */ + auto cic_3_out = cic_3.execute(cic_2_out, work_baseband_buffer); + if( decimation_factor == DecimationFactor::By16 ) { + return cic_3_out; + } + + /* 192kHz complex[128], [-32768, 32512] + * -> 3rd order CIC decimation by 2, gain of 1 + * -> 96kHz complex[64], [-32768, 32512] */ + auto cic_4_out = cic_4.execute(cic_3_out, work_baseband_buffer); + + return cic_4_out; +} diff --git a/firmware/baseband/channel_decimator.hpp b/firmware/baseband/channel_decimator.hpp new file mode 100644 index 000000000..3e20c0df9 --- /dev/null +++ b/firmware/baseband/channel_decimator.hpp @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __CHANNEL_DECIMATOR_H__ +#define __CHANNEL_DECIMATOR_H__ + +#include "buffer.hpp" +#include "complex.hpp" + +#include "dsp_decimate.hpp" + +#include + +class ChannelDecimator { +public: + enum class DecimationFactor { + By4, + By8, + By16, + By32, + }; + + constexpr ChannelDecimator( + ) : decimation_factor { DecimationFactor::By32 } + { + } + + constexpr ChannelDecimator( + const DecimationFactor decimation_factor + ) : decimation_factor { decimation_factor } + { + } + + void set_decimation_factor(const DecimationFactor f) { + decimation_factor = f; + } + + buffer_c16_t execute(buffer_c8_t buffer) { + auto decimated = execute_decimation(buffer); + + return decimated; + } + +private: + std::array work_baseband; + + //const bool fs_over_4_downconvert = true; + + dsp::decimate::TranslateByFSOver4AndDecimateBy2CIC3 translate; + //dsp::decimate::DecimateBy2CIC3 cic_0; + dsp::decimate::DecimateBy2CIC3 cic_1; + dsp::decimate::DecimateBy2CIC3 cic_2; + dsp::decimate::DecimateBy2CIC3 cic_3; + dsp::decimate::DecimateBy2CIC3 cic_4; + + DecimationFactor decimation_factor; + + buffer_c16_t execute_decimation(buffer_c8_t buffer); +}; + +#endif/*__CHANNEL_DECIMATOR_H__*/ diff --git a/firmware/baseband/channel_stats_collector.hpp b/firmware/baseband/channel_stats_collector.hpp index 4eecb5c97..8c91ac5b4 100644 --- a/firmware/baseband/channel_stats_collector.hpp +++ b/firmware/baseband/channel_stats_collector.hpp @@ -29,6 +29,8 @@ #include #include +#include + class ChannelStatsCollector { public: template @@ -47,13 +49,8 @@ public: if( count >= samples_per_update ) { const float max_squared_f = max_squared; - const float max_db_f = complex16_mag_squared_to_dbv_norm(max_squared_f); - const int32_t max_db = max_db_f; - const ChannelStatistics statistics { - .max_db = max_db, - .count = count, - }; - callback(statistics); + const int32_t max_db = complex16_mag_squared_to_dbv_norm(max_squared_f); + callback({ max_db, count }); max_squared = 0; count = 0; diff --git a/firmware/baseband/clock_recovery.cpp b/firmware/baseband/clock_recovery.cpp index 7fb69deac..17cb5c70f 100644 --- a/firmware/baseband/clock_recovery.cpp +++ b/firmware/baseband/clock_recovery.cpp @@ -20,12 +20,3 @@ */ #include "clock_recovery.hpp" - -void ClockRecovery::configure( - const uint32_t symbol_rate, - const uint32_t sampling_rate -) { - phase_increment = phase_increment_u32( - fractional_symbol_rate(symbol_rate, sampling_rate) - ); -} diff --git a/firmware/baseband/clock_recovery.hpp b/firmware/baseband/clock_recovery.hpp index 8b7059afd..bd17255d7 100644 --- a/firmware/baseband/clock_recovery.hpp +++ b/firmware/baseband/clock_recovery.hpp @@ -22,65 +22,157 @@ #ifndef __CLOCK_RECOVERY_H__ #define __CLOCK_RECOVERY_H__ -#include +#include +#include +#include -class ClockRecovery { +#include "linear_resampler.hpp" + +namespace clock_recovery { + +class GardnerTimingErrorDetector { public: - void configure( - const uint32_t symbol_rate, - const uint32_t sampling_rate - ); + static constexpr size_t samples_per_symbol { 2 }; + /* + Expects retimed samples at a rate of twice the expected symbol rate. + Calculates timing error, sends symbol and error to handler. + */ template - void execute( + void operator()( const float in, SymbolHandler symbol_handler ) { - const bool phase_0 = (phase_last >> 31) & (!(phase >> 31)); - const bool phase_180 = (!(phase_last >> 31)) & (phase >> 31); - phase_last = phase; - phase += phase_increment + phase_adjustment; + /* NOTE: Algorithm is sensitive to input magnitude. Timing error value + * will scale proportionally. Best practice is to use error sign only. + */ + t[2] = t[1]; + t[1] = t[0]; + t[0] = in; - if( phase_0 || phase_180 ) { - t2 = t1; - t1 = t0; - t0 = in; + if( symbol_phase == 0 ) { + const auto symbol = t[0]; + const float lateness = (t[0] - t[2]) * t[1]; + symbol_handler(symbol, lateness); } - if( phase_0 ) { - symbol_handler(t0); - - const float error = (t0 - t2) * t1; - // + error == late == decrease/slow phase - // - error == early == increase/fast phase - - error_filtered = 0.75f * error_filtered + 0.25f * error; - - // Correct phase (don't change frequency!) - phase_adjustment = -phase_increment * error_filtered / 200.0f; - } + symbol_phase = (symbol_phase + 1) % samples_per_symbol; } private: - uint32_t phase { 0 }; - uint32_t phase_last { 0 }; - uint32_t phase_adjustment { 0 }; - uint32_t phase_increment { 0 }; - float t0 { 0 }; - float t1 { 0 }; - float t2 { 0 }; - float error_filtered { 0 }; + std::array t { { 0.0f, 0.0f, 0.0f } }; + size_t symbol_phase { 0 }; +}; - static constexpr float fractional_symbol_rate( - const uint32_t symbol_rate, - const uint32_t sampling_rate - ) { - return float(symbol_rate) / float(sampling_rate); +class LinearErrorFilter { +public: + LinearErrorFilter( + const float filter_alpha = 0.95f, + const float error_weight = -1.0f + ) : filter_alpha { filter_alpha }, + error_weight { error_weight } + { } - static constexpr uint32_t phase_increment_u32(const float fractional_symbol_rate) { - return 4294967296.0f * fractional_symbol_rate; + float operator()( + const float error + ) { + error_filtered = filter_alpha * error_filtered + (1.0f - filter_alpha) * error; + return error_filtered * error_weight; + } + +private: + const float filter_alpha; + const float error_weight; + float error_filtered { 0.0f }; +}; + +class FixedErrorFilter { +public: + FixedErrorFilter( + ) { + } + + FixedErrorFilter( + const float weight + ) : weight_ { weight } + { + } + + float operator()( + const float lateness + ) const { + return (lateness < 0.0f) ? weight() : -weight(); + } + + float weight() const { + return weight_; + } + +private: + float weight_ { 1.0f / 16.0f }; +}; + +template +class ClockRecovery { +public: + ClockRecovery( + const float sampling_rate, + const float symbol_rate, + ErrorFilter error_filter, + std::function symbol_handler + ) : symbol_handler { symbol_handler } + { + configure(sampling_rate, symbol_rate, error_filter); + } + + ClockRecovery( + std::function symbol_handler + ) : symbol_handler { symbol_handler } + { + } + + void configure( + const float sampling_rate, + const float symbol_rate, + ErrorFilter error_filter + ) { + resampler.configure(sampling_rate, symbol_rate * timing_error_detector.samples_per_symbol); + error_filter = error_filter; + } + + void operator()( + const float baseband_sample + ) { + resampler(baseband_sample, + [this](const float interpolated_sample) { + this->resampler_callback(interpolated_sample); + } + ); + } + +private: + dsp::interpolation::LinearResampler resampler; + GardnerTimingErrorDetector timing_error_detector; + ErrorFilter error_filter; + std::function symbol_handler; + + void resampler_callback(const float interpolated_sample) { + timing_error_detector(interpolated_sample, + [this](const float symbol, const float lateness) { + this->symbol_callback(symbol, lateness); + } + ); + } + + void symbol_callback(const float symbol, const float lateness) { + symbol_handler(symbol); + + const float adjustment = error_filter(lateness); + resampler.advance(adjustment); } }; +} /* namespace clock_recovery */ + #endif/*__CLOCK_RECOVERY_H__*/ diff --git a/firmware/baseband/dsp_decimate.cpp b/firmware/baseband/dsp_decimate.cpp index 863af34fe..e8fd1824d 100644 --- a/firmware/baseband/dsp_decimate.cpp +++ b/firmware/baseband/dsp_decimate.cpp @@ -196,120 +196,38 @@ buffer_s16_t FIR64AndDecimateBy2Real::execute( return { dst.p, src.count / 2, src.sampling_rate / 2 }; } -#if 0 -size_t fir_and_decimate_by_2_complex( - const complex16_t* const src_start, - const size_t src_count, - complex16_t* const dst_start, - complex16_t* const z, - const complex16_t* const taps, - const size_t taps_count + +buffer_c16_t FIRAndDecimateComplex::execute( + buffer_c16_t src, + buffer_c16_t dst ) { - /* int16_t input (sample count "n" must be multiple of 4) - * -> int16_t output, decimated by 2. + /* int16_t input (sample count "n" must be multiple of decimation_factor) + * -> int16_t output, decimated by decimation_factor. * taps are normalized to 1 << 16 == 1.0. */ - auto src_p = src_start; - const auto src_end = &src_start[src_count]; - auto dst_p = dst_start; + const auto output_sampling_rate = src.sampling_rate / decimation_factor_; + const size_t output_samples = src.count / decimation_factor_; + + sample_t* dst_p = dst.p; + const buffer_c16_t result { dst.p, output_samples, output_sampling_rate }; - auto z_p = &z[0]; + const sample_t* src_p = src.p; + size_t outer_count = output_samples; + while(outer_count > 0) { + /* Put new samples into delay buffer */ + auto z_new_p = &samples_[taps_count_ - decimation_factor_]; + for(size_t i=0; i int16_t output, decimated by 2. - * taps are normalized to 1 << 16 == 1.0. - */ - auto src_p = src_start; - auto dst_p = dst_start; - auto z_new_p = &z[0]; - auto t_p = &taps[taps_count * 2]; - - while(src_p < &src_start[src_count]) { - /* Put two new samples into delay buffer */ - *__SIMD32(z_new_p)++ = *__SIMD32(src_p)++; - *__SIMD32(z_new_p)++ = *__SIMD32(src_p)++; - - t_p -= (taps_count + 2); - if( z_new_p == &z[taps_count] ) { - z_new_p = &z[0]; - t_p = &taps[taps_count]; - } - - int64_t t_real = 0; - int64_t t_imag = 0; - - auto z_p = &z[0]; - while(z_p < &z[taps_count]) { + while(loop_count > 0) { const auto tap0 = *__SIMD32(t_p)++; const auto sample0 = *__SIMD32(z_p)++; const auto tap1 = *__SIMD32(t_p)++; @@ -345,6 +263,8 @@ size_t fir_and_decimate_by_2_complex_fast( t_imag = __SMLALDX(sample6, tap6, t_imag); t_real = __SMLSLD(sample7, tap7, t_real); t_imag = __SMLALDX(sample7, tap7, t_imag); + + loop_count--; } /* TODO: Re-evaluate whether saturation is performed, normalization, @@ -359,9 +279,32 @@ size_t fir_and_decimate_by_2_complex_fast( i_sat, 16 ); + + /* Shift sample buffer left/down by decimation factor. */ + const size_t unroll_factor = 4; + size_t shift_count = (taps_count_ - decimation_factor_) / unroll_factor; + + sample_t* t = &samples_[0]; + const sample_t* s = &samples_[decimation_factor_]; + + while(shift_count > 0) { + *__SIMD32(t)++ = *__SIMD32(s)++; + *__SIMD32(t)++ = *__SIMD32(s)++; + *__SIMD32(t)++ = *__SIMD32(s)++; + *__SIMD32(t)++ = *__SIMD32(s)++; + shift_count--; + } + + shift_count = (taps_count_ - decimation_factor_) % unroll_factor; + while(shift_count > 0) { + *(t++) = *(s++); + shift_count--; + } + + outer_count--; } - return src_count / 2; + return result; } buffer_s16_t DecimateBy2CIC4Real::execute( diff --git a/firmware/baseband/dsp_decimate.hpp b/firmware/baseband/dsp_decimate.hpp index 0e3a19f0e..9cc90b88c 100644 --- a/firmware/baseband/dsp_decimate.hpp +++ b/firmware/baseband/dsp_decimate.hpp @@ -24,6 +24,10 @@ #include #include +#include +#include + +#include "utility.hpp" #include "dsp_types.hpp" @@ -74,50 +78,46 @@ private: const std::array& taps; }; -size_t fir_and_decimate_by_2_complex( - const complex16_t* const src_start, - const size_t src_count, - complex16_t* const dst_start, - complex16_t* const z, - const complex16_t* const taps, - const size_t taps_count -); - -size_t fir_and_decimate_by_2_complex_fast( - const complex16_t* const src_start, - const size_t src_count, - complex16_t* const dst_start, - complex16_t* const z, - const complex16_t* const taps, - const size_t taps_count -); - -template -class FIRAndDecimateBy2Complex { +class FIRAndDecimateComplex { public: + using sample_t = complex16_t; + using tap_t = complex16_t; + + using taps_t = tap_t[]; + /* NOTE! Current code makes an assumption that block of samples to be * processed will be a multiple of the taps_count. */ - FIRAndDecimateBy2Complex( - const std::array& real_taps + FIRAndDecimateComplex( + ) : taps_count_ { 0 }, + decimation_factor_ { 1 } + { + } + + template + void configure( + const T& taps, + const size_t decimation_factor ) { - for(size_t i=0; i(taps.size()); + taps_reversed_ = std::make_unique(taps.size()); + taps_count_ = taps.size(); + decimation_factor_ = decimation_factor; + std::reverse_copy(taps.cbegin(), taps.cend(), &taps_reversed_[0]); } buffer_c16_t execute( buffer_c16_t src, buffer_c16_t dst - ) { - const auto dst_count = fir_and_decimate_by_2_complex_fast(src.p, src.count, dst.p, z.data(), taps.data(), taps_count); - return { dst.p, dst_count, src.sampling_rate / 2 }; - } - + ); + private: - std::array taps; - std::array z; + using samples_t = sample_t[]; + + std::unique_ptr samples_; + std::unique_ptr taps_reversed_; + size_t taps_count_; + size_t decimation_factor_; }; class DecimateBy2CIC4Real { diff --git a/firmware/baseband/dsp_demodulate.cpp b/firmware/baseband/dsp_demodulate.cpp index 9a9023d68..4ee6ed688 100644 --- a/firmware/baseband/dsp_demodulate.cpp +++ b/firmware/baseband/dsp_demodulate.cpp @@ -23,6 +23,7 @@ #include "complex.hpp" #include "fxpt_atan2.hpp" +#include "utility_m4.hpp" #include diff --git a/firmware/baseband/dsp_demodulate.hpp b/firmware/baseband/dsp_demodulate.hpp index 09149285a..c5f871e14 100644 --- a/firmware/baseband/dsp_demodulate.hpp +++ b/firmware/baseband/dsp_demodulate.hpp @@ -55,9 +55,13 @@ public: buffer_s16_t dst ); + void configure(const float sampling_rate, const float deviation_hz) { + k = static_cast(32767.0f / (2.0 * pi * deviation_hz / sampling_rate)); + } + private: complex16_t::rep_type z_; - const float k; + float k; }; } /* namespace demodulate */ diff --git a/firmware/baseband/dsp_iir_config.hpp b/firmware/baseband/dsp_iir_config.hpp new file mode 100644 index 000000000..e20a51fce --- /dev/null +++ b/firmware/baseband/dsp_iir_config.hpp @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __DSP_IIR_CONFIG_H__ +#define __DSP_IIR_CONFIG_H__ + +#include "dsp_iir.hpp" + +constexpr iir_biquad_config_t audio_hpf_config { + { 0.93346032f, -1.86687724f, 0.93346032f }, + { 1.0f , -1.97730264f, 0.97773668f } +}; + +constexpr iir_biquad_config_t non_audio_hpf_config { + { 0.51891061f, -0.95714180f, 0.51891061f }, + { 1.0f , -0.79878302f, 0.43960231f } +}; + +#endif/*__DSP_IIR_CONFIG_H__*/ diff --git a/firmware/baseband/dsp_squelch.cpp b/firmware/baseband/dsp_squelch.cpp new file mode 100644 index 000000000..4cfe651ae --- /dev/null +++ b/firmware/baseband/dsp_squelch.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "dsp_squelch.hpp" + +#include +#include + +bool FMSquelch::execute(buffer_s16_t audio) { + // TODO: No hard-coded array size. + std::array squelch_energy_buffer; + const buffer_s16_t squelch_energy { + squelch_energy_buffer.data(), + squelch_energy_buffer.size() + }; + non_audio_hpf.execute(audio, squelch_energy); + + uint64_t max_squared = 0; + for(const auto sample : squelch_energy_buffer) { + const uint64_t sample_squared = sample * sample; + if( sample_squared > max_squared ) { + max_squared = sample_squared; + } + } + + return (max_squared < (threshold * threshold)); +} diff --git a/firmware/baseband/dsp_squelch.hpp b/firmware/baseband/dsp_squelch.hpp new file mode 100644 index 000000000..06cb2cdd7 --- /dev/null +++ b/firmware/baseband/dsp_squelch.hpp @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __DSP_SQUELCH_H__ +#define __DSP_SQUELCH_H__ + +#include "buffer.hpp" +#include "dsp_iir.hpp" +#include "dsp_iir_config.hpp" + +#include +#include + +class FMSquelch { +public: + bool execute(buffer_s16_t audio); + +private: + static constexpr size_t N = 32; + static constexpr int16_t threshold = 3072; + + // nyquist = 48000 / 2.0 + // scipy.signal.iirdesign(wp=8000 / nyquist, ws= 4000 / nyquist, gpass=1, gstop=18, ftype='ellip') + IIRBiquadFilter non_audio_hpf { non_audio_hpf_config }; +}; + +#endif/*__DSP_SQUELCH_H__*/ diff --git a/firmware/baseband/irq_ipc_m4.cpp b/firmware/baseband/irq_ipc_m4.cpp new file mode 100644 index 000000000..07a753352 --- /dev/null +++ b/firmware/baseband/irq_ipc_m4.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "irq_ipc_m4.hpp" + +#include "ch.h" +#include "hal.h" + +#include "event_m4.hpp" + +#include "lpc43xx_cpp.hpp" +using namespace lpc43xx; + +void m0apptxevent_interrupt_enable() { + nvicEnableVector(M0CORE_IRQn, CORTEX_PRIORITY_MASK(LPC43XX_M0APPTXEVENT_IRQ_PRIORITY)); +} + +void m0apptxevent_interrupt_disable() { + nvicDisableVector(M0CORE_IRQn); +} + +extern "C" { + +CH_IRQ_HANDLER(MAPP_IRQHandler) { + CH_IRQ_PROLOGUE(); + + chSysLockFromIsr(); + events_flag_isr(EVT_MASK_BASEBAND); + chSysUnlockFromIsr(); + + creg::m0apptxevent::clear(); + + CH_IRQ_EPILOGUE(); +} + +} diff --git a/firmware/baseband/irq_ipc_m4.hpp b/firmware/baseband/irq_ipc_m4.hpp new file mode 100644 index 000000000..61328685d --- /dev/null +++ b/firmware/baseband/irq_ipc_m4.hpp @@ -0,0 +1,28 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __IRQ_IPC_M4_H__ +#define __IRQ_IPC_M4_H__ + +void m0apptxevent_interrupt_enable(); +void m0apptxevent_interrupt_disable(); + +#endif/*__IRQ_IPC_M4_H__*/ diff --git a/firmware/baseband/linear_resampler.hpp b/firmware/baseband/linear_resampler.hpp new file mode 100644 index 000000000..d889a2c25 --- /dev/null +++ b/firmware/baseband/linear_resampler.hpp @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __LINEAR_RESAMPLER_H__ +#define __LINEAR_RESAMPLER_H__ + +namespace dsp { +namespace interpolation { + +class LinearResampler { +public: + void configure( + const float input_rate, + const float output_rate + ) { + phase_increment = calculate_increment(input_rate, output_rate); + } + + template + void operator()( + const float sample, + InterpolatedSampleHandler interpolated_sample_handler + ) { + const float sample_delta = sample - last_sample; + while( phase < 1.0f ) { + const float interpolated_value = last_sample + phase * sample_delta; + interpolated_sample_handler(interpolated_value); + phase += phase_increment; + } + last_sample = sample; + phase -= 1.0f; + } + + void advance(const float fraction) { + phase += (fraction * phase_increment); + } + +private: + float last_sample { 0.0f }; + float phase { 0.0f }; + float phase_increment { 0.0f }; + + static constexpr float calculate_increment(const float input_rate, const float output_rate) { + return input_rate / output_rate; + } +}; + +} /* namespace interpolation */ +} /* namespace dsp */ + +#endif/*__LINEAR_RESAMPLER_H__*/ diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 7f11a5bda..65a3d6828 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -26,6 +26,7 @@ #include "portapack_shared_memory.hpp" #include "portapack_dma.hpp" + #include "gpdma.hpp" #include "baseband.hpp" @@ -33,6 +34,8 @@ #include "event_m4.hpp" +#include "irq_ipc_m4.hpp" + #include "rssi.hpp" #include "rssi_dma.hpp" @@ -43,15 +46,22 @@ #include "dsp_fft.hpp" #include "dsp_fir_taps.hpp" #include "dsp_iir.hpp" +#include "dsp_iir_config.hpp" +#include "dsp_squelch.hpp" #include "baseband_stats_collector.hpp" #include "rssi_stats_collector.hpp" -#include "channel_stats_collector.hpp" -#include "audio_stats_collector.hpp" -#include "block_decimator.hpp" +#include "channel_decimator.hpp" +#include "baseband_processor.hpp" +#include "proc_am_audio.hpp" +#include "proc_nfm_audio.hpp" +#include "proc_wfm_audio.hpp" +#include "proc_ais.hpp" +#include "proc_wideband_spectrum.hpp" +#include "proc_tpms.hpp" + #include "clock_recovery.hpp" -#include "access_code_correlator.hpp" #include "packet_builder.hpp" #include "message_queue.hpp" @@ -72,526 +82,141 @@ #include #include -constexpr auto baseband_thread_priority = NORMALPRIO + 20; -constexpr auto rssi_thread_priority = NORMALPRIO + 10; +static baseband::Direction direction = baseband::Direction::Receive; -class ChannelDecimator { +class ThreadBase { public: - enum class DecimationFactor { - By4, - By8, - By16, - By32, - }; - - ChannelDecimator( - DecimationFactor f - ) : decimation_factor { f } + constexpr ThreadBase( + const char* const name + ) : name { name } { } - void set_decimation_factor(const DecimationFactor f) { - decimation_factor = f; + static msg_t fn(void* arg) { + auto obj = static_cast(arg); + chRegSetThreadName(obj->name); + obj->run(); + + return 0; } - buffer_c16_t execute(buffer_c8_t buffer) { - auto decimated = execute_decimation(buffer); - - return decimated; - } + virtual void run() = 0; private: - std::array work_baseband; - - const buffer_c16_t work_baseband_buffer { - work_baseband.data(), - work_baseband.size() - }; - const buffer_s16_t work_audio_buffer { - (int16_t*)work_baseband.data(), - sizeof(work_baseband) / sizeof(int16_t) - }; - - //const bool fs_over_4_downconvert = true; - - dsp::decimate::TranslateByFSOver4AndDecimateBy2CIC3 translate; - //dsp::decimate::DecimateBy2CIC3 cic_0; - dsp::decimate::DecimateBy2CIC3 cic_1; - dsp::decimate::DecimateBy2CIC3 cic_2; - dsp::decimate::DecimateBy2CIC3 cic_3; - dsp::decimate::DecimateBy2CIC3 cic_4; - - DecimationFactor decimation_factor { DecimationFactor::By32 }; - - buffer_c16_t execute_decimation(buffer_c8_t buffer) { - /* 3.072MHz complex[2048], [-128, 127] - * -> Shift by -fs/4 - * -> 3rd order CIC: -0.1dB @ 0.028fs, -1dB @ 0.088fs, -60dB @ 0.468fs - * -0.1dB @ 86kHz, -1dB @ 270kHz, -60dB @ 1.44MHz - * -> gain of 256 - * -> decimation by 2 - * -> 1.544MHz complex[1024], [-32768, 32512] */ - const auto stage_0_out = translate.execute(buffer, work_baseband_buffer); - - //if( fs_over_4_downconvert ) { - // // TODO: - //} else { - // Won't work until cic_0 will accept input type of buffer_c8_t. - // stage_0_out = cic_0.execute(buffer, work_baseband_buffer); - //} - - /* 1.536MHz complex[1024], [-32768, 32512] - * -> 3rd order CIC: -0.1dB @ 0.028fs, -1dB @ 0.088fs, -60dB @ 0.468fs - * -0.1dB @ 43kHz, -1dB @ 136kHz, -60dB @ 723kHz - * -> gain of 8 - * -> decimation by 2 - * -> 768kHz complex[512], [-8192, 8128] */ - auto cic_1_out = cic_1.execute(stage_0_out, work_baseband_buffer); - if( decimation_factor == DecimationFactor::By4 ) { - return cic_1_out; - } - - /* 768kHz complex[512], [-32768, 32512] - * -> 3rd order CIC decimation by 2, gain of 1 - * -> 384kHz complex[256], [-32768, 32512] */ - auto cic_2_out = cic_2.execute(cic_1_out, work_baseband_buffer); - if( decimation_factor == DecimationFactor::By8 ) { - return cic_2_out; - } - - /* 384kHz complex[256], [-32768, 32512] - * -> 3rd order CIC decimation by 2, gain of 1 - * -> 192kHz complex[128], [-32768, 32512] */ - auto cic_3_out = cic_3.execute(cic_2_out, work_baseband_buffer); - if( decimation_factor == DecimationFactor::By16 ) { - return cic_3_out; - } - - /* 192kHz complex[128], [-32768, 32512] - * -> 3rd order CIC decimation by 2, gain of 1 - * -> 96kHz complex[64], [-32768, 32512] */ - auto cic_4_out = cic_4.execute(cic_3_out, work_baseband_buffer); - - return cic_4_out; - } + const char* const name; }; -static constexpr iir_biquad_config_t audio_hpf_config { - { 0.93346032f, -1.86687724f, 0.93346032f }, - { 1.0f , -1.97730264f, 0.97773668f } -}; - -static constexpr iir_biquad_config_t non_audio_hpf_config { - { 0.51891061f, -0.95714180f, 0.51891061f }, - { 1.0f , -0.79878302f, 0.43960231f } -}; - -class FMSquelch { +class BasebandThread : public ThreadBase { public: - bool execute(buffer_s16_t audio) { - // TODO: No hard-coded array size. - std::array squelch_energy_buffer; - const buffer_s16_t squelch_energy { - squelch_energy_buffer.data(), - squelch_energy_buffer.size() - }; - non_audio_hpf.execute(audio, squelch_energy); - - uint64_t max_squared = 0; - for(const auto sample : squelch_energy_buffer) { - const uint64_t sample_squared = sample * sample; - if( sample_squared > max_squared ) { - max_squared = sample_squared; - } - } - - return (max_squared < (threshold * threshold)); - } - -private: - static constexpr size_t N = 32; - static constexpr int16_t threshold = 3072; - - // nyquist = 48000 / 2.0 - // scipy.signal.iirdesign(wp=8000 / nyquist, ws= 4000 / nyquist, gpass=1, gstop=18, ftype='ellip') - IIRBiquadFilter non_audio_hpf { non_audio_hpf_config }; -}; - -static volatile bool channel_spectrum_request_update { false }; -static std::array channel_spectrum; -static uint32_t channel_spectrum_sampling_rate { 0 }; -static uint32_t channel_filter_pass_frequency { 0 }; -static uint32_t channel_filter_stop_frequency { 0 }; - -class BasebandProcessor { -public: - virtual ~BasebandProcessor() = default; - - virtual void execute(buffer_c8_t buffer) = 0; - -protected: - void feed_channel_stats(const buffer_c16_t channel) { - channel_stats.feed( - channel, - [this](const ChannelStatistics statistics) { - this->post_channel_stats_message(statistics); - } - ); - } - - void feed_channel_spectrum( - const buffer_c16_t channel, - const uint32_t filter_pass_frequency, - const uint32_t filter_stop_frequency - ) { - channel_filter_pass_frequency = filter_pass_frequency; - channel_filter_stop_frequency = filter_stop_frequency; - channel_spectrum_decimator.feed( - channel, - [this](const buffer_c16_t data) { - this->post_channel_spectrum_message(data); - } - ); - } - - void fill_audio_buffer(const buffer_s16_t audio) { - auto audio_buffer = audio::dma::tx_empty_buffer(); - for(size_t i=0; i channel_spectrum_decimator { 4 }; - - ChannelStatsCollector channel_stats; - ChannelStatisticsMessage channel_stats_message; - - AudioStatsCollector audio_stats; - AudioStatisticsMessage audio_stats_message; - - void post_channel_stats_message(const ChannelStatistics statistics) { - if( channel_stats_message.is_free() ) { - channel_stats_message.statistics = statistics; - shared_memory.application_queue.push(&channel_stats_message); - } - } - - void post_channel_spectrum_message(const buffer_c16_t data) { - if( !channel_spectrum_request_update ) { - channel_spectrum_request_update = true; - std::copy(&data.p[0], &data.p[data.count], channel_spectrum.begin()); - channel_spectrum_sampling_rate = data.sampling_rate; - events_flag(EVT_MASK_SPECTRUM); - } - } - - void feed_audio_stats(const buffer_s16_t audio) { - audio_stats.feed( - audio, - [this](const AudioStatistics statistics) { - this->post_audio_stats_message(statistics); - } - ); - } - - void post_audio_stats_message(const AudioStatistics statistics) { - if( audio_stats_message.is_free() ) { - audio_stats_message.statistics = statistics; - shared_memory.application_queue.push(&audio_stats_message); - } - } -}; - -class NarrowbandAMAudio : public BasebandProcessor { -public: - void execute(buffer_c8_t buffer) override { - auto decimator_out = decimator.execute(buffer); - - const buffer_c16_t work_baseband_buffer { - (complex16_t*)decimator_out.p, - sizeof(*decimator_out.p) * decimator_out.count - }; - - /* 96kHz complex[64] - * -> FIR filter, 48kHz int16_t[32] */ - auto channel = channel_filter.execute(decimator_out, work_baseband_buffer); - - // TODO: Feed channel_stats post-decimation data? - feed_channel_stats(channel); - feed_channel_spectrum( - channel, - decimator_out.sampling_rate * channel_filter_taps.pass_frequency_normalized, - decimator_out.sampling_rate * channel_filter_taps.stop_frequency_normalized - ); - - const buffer_s16_t work_audio_buffer { - (int16_t*)decimator_out.p, - sizeof(*decimator_out.p) * decimator_out.count - }; - - /* 48kHz complex[32] - * -> AM demodulation - * -> 48kHz int16_t[32] */ - auto audio = demod.execute(channel, work_audio_buffer); - - audio_hpf.execute_in_place(audio); - fill_audio_buffer(audio); - } - -private: - ChannelDecimator decimator { ChannelDecimator::DecimationFactor::By32 }; - const fir_taps_real<64>& channel_filter_taps = taps_64_lp_031_070_tfilter; - dsp::decimate::FIRAndDecimateBy2Complex<64> channel_filter { channel_filter_taps.taps }; - dsp::demodulate::AM demod; - IIRBiquadFilter audio_hpf { audio_hpf_config }; -}; - -class NarrowbandFMAudio : public BasebandProcessor { -public: - void execute(buffer_c8_t buffer) override { - /* Called every 2048/3072000 second -- 1500Hz. */ - - auto decimator_out = decimator.execute(buffer); - - const buffer_c16_t work_baseband_buffer { - (complex16_t*)decimator_out.p, - sizeof(*decimator_out.p) * decimator_out.count - }; - - /* 96kHz complex[64] - * -> FIR filter, <6kHz (0.063fs) pass, gain 1.0 - * -> 48kHz int16_t[32] */ - auto channel = channel_filter.execute(decimator_out, work_baseband_buffer); - - // TODO: Feed channel_stats post-decimation data? - feed_channel_stats(channel); - feed_channel_spectrum( - channel, - decimator_out.sampling_rate * channel_filter_taps.pass_frequency_normalized, - decimator_out.sampling_rate * channel_filter_taps.stop_frequency_normalized - ); - - const buffer_s16_t work_audio_buffer { - (int16_t*)decimator_out.p, - sizeof(*decimator_out.p) * decimator_out.count - }; - - /* 48kHz complex[32] - * -> FM demodulation - * -> 48kHz int16_t[32] */ - auto audio = demod.execute(channel, work_audio_buffer); - - static uint64_t audio_present_history = 0; - const auto audio_present_now = squelch.execute(audio); - audio_present_history = (audio_present_history << 1) | (audio_present_now ? 1 : 0); - const bool audio_present = (audio_present_history != 0); - - if( !audio_present ) { - // Zero audio buffer. - for(size_t i=0; i& channel_filter_taps = taps_64_lp_042_078_tfilter; - dsp::decimate::FIRAndDecimateBy2Complex<64> channel_filter { channel_filter_taps.taps }; - dsp::demodulate::FM demod { 48000, 7500 }; - - IIRBiquadFilter audio_hpf { audio_hpf_config }; - FMSquelch squelch; -}; - -class WidebandFMAudio : public BasebandProcessor { -public: - void execute(buffer_c8_t buffer) override { - auto decimator_out = decimator.execute(buffer); - - const buffer_s16_t work_audio_buffer { - (int16_t*)decimator_out.p, - sizeof(*decimator_out.p) * decimator_out.count - }; - - auto channel = decimator_out; - - // TODO: Feed channel_stats post-decimation data? - feed_channel_stats(channel); - //feed_channel_spectrum(channel); - - /* 768kHz complex[512] - * -> FM demodulation - * -> 768kHz int16_t[512] */ - /* TODO: To improve adjacent channel rejection, implement complex channel filter: - * pass < +/- 100kHz, stop > +/- 200kHz - */ - - auto audio_oversampled = demod.execute(decimator_out, work_audio_buffer); - - /* 768kHz int16_t[512] - * -> 4th order CIC decimation by 2, gain of 1 - * -> 384kHz int16_t[256] */ - auto audio_8fs = audio_dec_1.execute(audio_oversampled, work_audio_buffer); - - /* 384kHz int16_t[256] - * -> 4th order CIC decimation by 2, gain of 1 - * -> 192kHz int16_t[128] */ - auto audio_4fs = audio_dec_2.execute(audio_8fs, work_audio_buffer); - - /* 192kHz int16_t[128] - * -> 4th order CIC decimation by 2, gain of 1 - * -> 96kHz int16_t[64] */ - auto audio_2fs = audio_dec_3.execute(audio_4fs, work_audio_buffer); - - /* 96kHz int16_t[64] - * -> FIR filter, <15kHz (0.156fs) pass, >19kHz (0.198fs) stop, gain of 1 - * -> 48kHz int16_t[32] */ - auto audio = audio_filter.execute(audio_2fs, work_audio_buffer); - - /* -> 48kHz int16_t[32] */ - audio_hpf.execute_in_place(audio); - fill_audio_buffer(audio); - } - -private: - ChannelDecimator decimator { ChannelDecimator::DecimationFactor::By4 }; - - //dsp::decimate::FIRAndDecimateBy2Complex<64> channel_filter { taps_64_lp_031_070_tfilter }; - dsp::demodulate::FM demod { 768000, 75000 }; - dsp::decimate::DecimateBy2CIC4Real audio_dec_1; - dsp::decimate::DecimateBy2CIC4Real audio_dec_2; - dsp::decimate::DecimateBy2CIC4Real audio_dec_3; - const fir_taps_real<64>& audio_filter_taps = taps_64_lp_156_198; - dsp::decimate::FIR64AndDecimateBy2Real audio_filter { audio_filter_taps.taps }; - - IIRBiquadFilter audio_hpf { audio_hpf_config }; -}; - -class FSKProcessor : public BasebandProcessor { -public: - FSKProcessor( - MessageHandlerMap& message_handlers - ) : message_handlers(message_handlers) + BasebandThread( + ) : ThreadBase { "baseband" } { - message_handlers[Message::ID::FSKConfiguration] = [this](const Message* const p) { - auto m = reinterpret_cast(p); - this->configure(m->configuration); - }; } - ~FSKProcessor() { - message_handlers[Message::ID::FSKConfiguration] = nullptr; - } - - void configure(const FSKConfiguration new_configuration) { - clock_recovery.configure(new_configuration.symbol_rate, 76800); - access_code_correlator.configure( - new_configuration.access_code, - new_configuration.access_code_length, - new_configuration.access_code_tolerance + Thread* start(const tprio_t priority) { + return chThdCreateStatic(wa, sizeof(wa), + priority, ThreadBase::fn, + this ); - packet_builder.configure(new_configuration.packet_length); } - void execute(buffer_c8_t buffer) override { - /* 2.4576MHz, 2048 samples */ - - auto decimator_out = decimator.execute(buffer); - - /* 153.6kHz, 128 samples */ - - const buffer_c16_t work_baseband_buffer { - (complex16_t*)decimator_out.p, - decimator_out.count - }; - - /* 153.6kHz complex[128] - * -> FIR filter, 76.8kHz int16_t[64] */ - auto channel = channel_filter.execute(decimator_out, work_baseband_buffer); - - /* 76.8kHz, 64 samples */ - feed_channel_stats(channel); - feed_channel_spectrum( - channel, - decimator_out.sampling_rate * channel_filter_taps.pass_frequency_normalized, - decimator_out.sampling_rate * channel_filter_taps.stop_frequency_normalized - ); - - const auto symbol_handler_fn = [this](const float value) { - const uint_fast8_t symbol = (value >= 0.0f) ? 1 : 0; - const bool access_code_found = this->access_code_correlator.execute(symbol); - this->consume_symbol(symbol, access_code_found); - }; - - // 76.8k - - const buffer_s16_t work_demod_buffer { - (int16_t*)decimator_out.p, - decimator_out.count * sizeof(*decimator_out.p) / sizeof(int16_t) - }; - - auto demodulated = demod.execute(channel, work_demod_buffer); - - i2s::i2s0::tx_mute(); - - for(size_t i=0; i& channel_filter_taps = taps_64_lp_031_070_tfilter; - dsp::decimate::FIRAndDecimateBy2Complex<64> channel_filter { channel_filter_taps.taps }; - dsp::demodulate::FM demod { 76800, 9600 * 2 }; + WORKING_AREA(wa, 2048); - ClockRecovery clock_recovery; - AccessCodeCorrelator access_code_correlator; - PacketBuilder packet_builder; - - FSKPacketMessage message; - MessageHandlerMap& message_handlers; - - void consume_symbol( - const uint_fast8_t symbol, - const bool access_code_found - ) { - const auto payload_handler_fn = [this]( - const std::bitset<256>& payload, - const size_t bits_received - ) { - this->payload_handler(payload, bits_received); + void run() override { + BasebandStatsCollector stats { + chSysGetIdleThread(), + thread_main, + thread_rssi, + chThdSelf() }; - packet_builder.execute( - symbol, - access_code_found, - payload_handler_fn - ); - } + while(true) { + if (direction == baseband::Direction::Transmit) { + const auto buffer_tmp = baseband::dma::wait_for_tx_buffer(); + + const buffer_c8_t buffer { + buffer_tmp.p, buffer_tmp.count, baseband_configuration.sampling_rate + }; - void payload_handler( - const std::bitset<256>& payload, - const size_t bits_received - ) { - if( message.is_free() ) { - message.packet.payload = payload; - message.packet.bits_received = bits_received; - shared_memory.application_queue.push(&message); + if( baseband_processor ) { + baseband_processor->execute(buffer); + } + + stats.process(buffer, + [](const BasebandStatistics statistics) { + const BasebandStatisticsMessage message { statistics }; + shared_memory.application_queue.push(message); + } + ); + } else { + const auto buffer_tmp = baseband::dma::wait_for_rx_buffer(); + + const buffer_c8_t buffer { + buffer_tmp.p, buffer_tmp.count, baseband_configuration.sampling_rate + }; + + if( baseband_processor ) { + baseband_processor->execute(buffer); + } + + stats.process(buffer, + [](const BasebandStatistics statistics) { + const BasebandStatisticsMessage message { statistics }; + shared_memory.application_queue.push(message); + } + ); + } } } }; +class RSSIThread : public ThreadBase { +public: + RSSIThread( + ) : ThreadBase { "rssi" } + { + } + + Thread* start(const tprio_t priority) { + return chThdCreateStatic(wa, sizeof(wa), + priority, ThreadBase::fn, + this + ); + } + + uint32_t sampling_rate { 400000 }; + +private: + WORKING_AREA(wa, 128); + + void run() override { + RSSIStatisticsCollector stats; + + while(true) { + // TODO: Place correct sampling rate into buffer returned here: + const auto buffer_tmp = rf::rssi::dma::wait_for_buffer(); + const rf::rssi::buffer_t buffer { + buffer_tmp.p, buffer_tmp.count, sampling_rate + }; + + stats.process( + buffer, + [](const RSSIStatistics statistics) { + const RSSIStatisticsMessage message { statistics }; + shared_memory.application_queue.push(message); + } + ); + } + } +}; + + static const int8_t sintab[1024] = { 0, 1, 2, 2, 3, 4, 5, 5, 6, 7, 8, 9, 9, 10, 11, 12, 12, 13, 14, 15, 16, 16, 17, 18, 19, 19, 20, 21, 22, 22, 23, 24, 25, 26, 26, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 38, 38, 39, 40, 41, 41, 42, 43, 44, 44, 45, 46, 46, 47, 48, 49, 49, 50, 51, 51, 52, 53, 54, 54, 55, 56, 56, 57, 58, 58, 59, 60, 61, 61, 62, 63, 63, 64, 65, 65, 66, 67, 67, 68, 69, 69, 70, 71, 71, 72, 72, 73, 74, 74, 75, 76, 76, 77, 78, 78, 79, 79, 80, 81, 81, 82, 82, 83, 84, 84, 85, 85, 86, 86, 87, 88, 88, 89, 89, 90, 90, 91, 91, 92, 93, 93, 94, 94, 95, 95, 96, 96, 97, 97, 98, 98, 99, 99, 100, 100, 101, 101, 102, 102, 102, 103, 103, 104, 104, 105, 105, 106, 106, 106, 107, 107, 108, 108, 109, 109, 109, 110, 110, 111, 111, 111, 112, 112, 112, 113, 113, 113, 114, 114, 114, 115, 115, 115, 116, 116, 116, 117, 117, 117, 118, 118, 118, 118, 119, 119, 119, 120, 120, 120, 120, 121, 121, 121, 121, 122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 125, 125, 125, 125, 125, 125, 125, 124, 124, 124, 124, 124, 124, 123, 123, 123, 123, 123, 122, 122, 122, 122, 122, 121, 121, 121, 121, 120, 120, 120, 120, 119, 119, 119, 118, 118, 118, 118, 117, 117, 117, 116, 116, 116, 115, 115, 115, 114, 114, 114, 113, 113, 113, 112, 112, 112, 111, 111, 111, 110, 110, 109, 109, 109, 108, 108, 107, 107, 106, 106, 106, 105, 105, 104, 104, 103, 103, 102, 102, 102, 101, 101, 100, 100, 99, 99, 98, 98, 97, 97, 96, 96, 95, 95, 94, 94, 93, 93, 92, 91, 91, 90, 90, 89, 89, 88, 88, 87, 86, 86, 85, 85, 84, 84, 83, 82, 82, 81, 81, 80, 79, 79, 78, 78, 77, 76, 76, 75, 74, 74, 73, 72, 72, 71, 71, 70, 69, 69, 68, 67, 67, 66, 65, 65, 64, 63, 63, 62, 61, 61, 60, 59, 58, 58, 57, 56, 56, 55, 54, 54, 53, 52, 51, 51, 50, 49, 49, 48, 47, 46, 46, 45, 44, 44, 43, 42, 41, 41, 40, 39, 38, 38, 37, 36, 35, 35, 34, 33, 32, 32, 31, 30, 29, 29, 28, 27, 26, 26, 25, 24, 23, 22, 22, 21, 20, 19, 19, 18, 17, 16, 16, 15, 14, 13, 12, 12, 11, 10, 9, 9, 8, 7, 6, 5, 5, 4, 3, 2, 2, 1, 0, -1, -2, -2, -3, -4, -5, -5, -6, -7, -8, -9, -9, -10, -11, -12, -12, -13, -14, -15, -16, -16, -17, -18, -19, -19, -20, -21, -22, -22, -23, -24, -25, -26, -26, -27, -28, -29, -29, -30, -31, @@ -780,16 +405,12 @@ public: bit_pos = 0; byte_pos = 0; cur_byte = shared_memory.lcrdata[0]; - if( message.is_free() ) { - message.n = shared_memory.afsk_repeat; - shared_memory.application_queue.push(&message); - } + message.n = shared_memory.afsk_repeat; + shared_memory.application_queue.push(message); } else { - if( message.is_free() ) { - message.n = 0; - shared_memory.afsk_transmit_done = true; - shared_memory.application_queue.push(&message); - } + message.n = 0; + shared_memory.afsk_transmit_done = true; + shared_memory.application_queue.push(message); cur_byte = 0; } } @@ -889,6 +510,7 @@ private: int32_t sample, sig, frq; };*/ + #define POLY_MASK_32 0xB4BCD35C class JammerProcessor : public BasebandProcessor { @@ -929,10 +551,8 @@ public: } jammer_bw = shared_memory.jammer_ranges[ir].width; - if( message.is_free() ) { - message.freq = shared_memory.jammer_ranges[ir].center; - shared_memory.application_queue.push(&message); - } + message.freq = shared_memory.jammer_ranges[ir].center; + shared_memory.application_queue.push(message); } else { s++; } @@ -988,93 +608,18 @@ private: RetuneMessage message; }; -static BasebandProcessor* baseband_processor { nullptr }; -static BasebandConfiguration baseband_configuration; - -static baseband::Direction direction = baseband::Direction::Transmit; - -static WORKING_AREA(baseband_thread_wa, 8192); - -static __attribute__((noreturn)) msg_t baseband_fn(void *arg) { - (void)arg; - chRegSetThreadName("baseband"); - - BasebandStatsCollector stats; - BasebandStatisticsMessage message; - - while(true) { - if (direction == baseband::Direction::Transmit) { - const auto buffer_tmp = baseband::dma::wait_for_tx_buffer(); - - const buffer_c8_t buffer { - buffer_tmp.p, buffer_tmp.count, baseband_configuration.sampling_rate - }; - - if( baseband_processor ) { - baseband_processor->execute(buffer); - } - - stats.process(buffer, - [&message](const BasebandStatistics statistics) { - if( message.is_free() ) { - message.statistics = statistics; - shared_memory.application_queue.push(&message); - } - } - ); - } else { - const auto buffer_tmp = baseband::dma::wait_for_rx_buffer(); - - const buffer_c8_t buffer { - buffer_tmp.p, buffer_tmp.count, baseband_configuration.sampling_rate - }; - - if( baseband_processor ) { - baseband_processor->execute(buffer); - } - - stats.process(buffer, - [&message](const BasebandStatistics statistics) { - if( message.is_free() ) { - message.statistics = statistics; - shared_memory.application_queue.push(&message); - } - } - ); - } - } -} - -static WORKING_AREA(rssi_thread_wa, 128); -static __attribute__((noreturn)) msg_t rssi_fn(void *arg) { - (void)arg; - chRegSetThreadName("rssi"); - - RSSIStatisticsCollector stats; - RSSIStatisticsMessage message; - - while(true) { - // TODO: Place correct sampling rate into buffer returned here: - const auto buffer_tmp = rf::rssi::dma::wait_for_buffer(); - const rf::rssi::buffer_t buffer { - buffer_tmp.p, buffer_tmp.count, 400000 - }; - - stats.process( - buffer, - [&message](const RSSIStatistics statistics) { - if( message.is_free() ) { - message.statistics = statistics; - shared_memory.application_queue.push(&message); - } - } - ); - } -} - extern "C" { void __late_init(void) { + /* + * System initializations. + * - HAL initialization, this also initializes the configured device drivers + * and performs the board-specific initializations. + * - Kernel initialization, the main() function becomes a thread and the + * RTOS is active. + */ + halInit(); + /* After this call, scheduler, systick, heap, etc. are available. */ /* By doing chSysInit() here, it runs before C++ constructors, which may * require the heap. @@ -1084,6 +629,9 @@ void __late_init(void) { } +static BasebandThread baseband_thread; +static RSSIThread rssi_thread; + static void init() { i2s::i2s0::configure( audio::i2s0_config_tx, @@ -1107,15 +655,33 @@ static void init() { rf::rssi::init(); touch::dma::init(); - chThdCreateStatic(baseband_thread_wa, sizeof(baseband_thread_wa), - baseband_thread_priority, baseband_fn, - nullptr - ); + const auto thread_main = chThdSelf(); - chThdCreateStatic(rssi_thread_wa, sizeof(rssi_thread_wa), - rssi_thread_priority, rssi_fn, - nullptr - ); + const auto thread_rssi = rssi_thread.start(NORMALPRIO + 10); + + baseband_thread.thread_main = thread_main; + baseband_thread.thread_rssi = thread_rssi; + + baseband_thread.start(NORMALPRIO + 20); +} + +static void shutdown() { + // TODO: Is this complete? + + nvicDisableVector(DMA_IRQn); + + m0apptxevent_interrupt_disable(); + + chSysDisable(); + + systick_stop(); +} + +static void halt() { + port_disable(); + while(true) { + port_wait_for_interrupt(); + } } class EventDispatcher { @@ -1124,6 +690,22 @@ public: return message_map; } + void run() { + while(is_running) { + const auto events = wait(); + dispatch(events); + } + } + + void request_stop() { + is_running = false; + } + +private: + MessageHandlerMap message_map; + + bool is_running = true; + eventmask_t wait() { return chEvtWaitAny(ALL_EVENTS); } @@ -1138,75 +720,23 @@ public: } } -private: - MessageHandlerMap message_map; - - ChannelSpectrumMessage spectrum_message; - std::array spectrum_db; - void handle_baseband_queue() { - while( !shared_memory.baseband_queue.is_empty() ) { - auto message = shared_memory.baseband_queue.pop(); - - auto& fn = message_map[message->id]; - if( fn ) { - fn(message); - } - - message->state = Message::State::Free; + std::array message_buffer; + while(Message* const message = shared_memory.baseband_queue.pop(message_buffer)) { + message_map.send(message); } } void handle_spectrum() { - if( channel_spectrum_request_update ) { - /* Decimated buffer is full. Compute spectrum. */ - std::array, 256> samples_swapped; - fft_swap(channel_spectrum, samples_swapped); - channel_spectrum_request_update = false; - fft_c_preswapped(samples_swapped); - if( spectrum_message.is_free() ) { - for(size_t i=0; i .magnitude, or something more (less!) accurate. */ - spectrum_message.spectrum.db = &spectrum_db; - spectrum_message.spectrum.db_count = spectrum_db.size(); - spectrum_message.spectrum.sampling_rate = channel_spectrum_sampling_rate; - spectrum_message.spectrum.channel_filter_pass_frequency = channel_filter_pass_frequency; - spectrum_message.spectrum.channel_filter_stop_frequency = channel_filter_stop_frequency; - shared_memory.application_queue.push(&spectrum_message); - } + if( baseband_thread.baseband_processor ) { + baseband_thread.baseband_processor->update_spectrum(); } } }; -static void m0apptxevent_interrupt_enable() { - nvicEnableVector(M0CORE_IRQn, CORTEX_PRIORITY_MASK(LPC43XX_M0APPTXEVENT_IRQ_PRIORITY)); -} - -extern "C" { - -CH_IRQ_HANDLER(MAPP_IRQHandler) { - CH_IRQ_PROLOGUE(); - - chSysLockFromIsr(); - events_flag_isr(EVT_MASK_BASEBAND); - chSysUnlockFromIsr(); - - creg::m0apptxevent::clear(); - - CH_IRQ_EPILOGUE(); -} - -} - -std::array baseband_buffer; - +const auto baseband_buffer = + new std::array(); + int main(void) { init(); @@ -1215,81 +745,100 @@ int main(void) { EventDispatcher event_dispatcher; auto& message_handlers = event_dispatcher.message_handlers(); - - //const auto baseband_buffer = new std::array(); - message_handlers[Message::ID::BasebandConfiguration] = [&message_handlers](const Message* const p) { - auto message = reinterpret_cast(p); - if( message->configuration.mode != baseband_configuration.mode ) { + message_handlers.register_handler(Message::ID::BasebandConfiguration, + [&message_handlers](const Message* const p) { + auto message = reinterpret_cast(p); + if( message->configuration.mode != baseband_thread.baseband_configuration.mode ) { - // TODO: Timing problem around disabling DMA and nulling and deleting old processor - auto old_p = baseband_processor; - baseband_processor = nullptr; - delete old_p; - - switch(message->configuration.mode) { - case 1: - direction = baseband::Direction::Receive; - baseband_processor = new NarrowbandAMAudio(); - break; - - case 2: - direction = baseband::Direction::Receive; - baseband_processor = new NarrowbandFMAudio(); - break; - - case 3: - direction = baseband::Direction::Receive; - baseband_processor = new WidebandFMAudio(); - break; - - case 4: - direction = baseband::Direction::Receive; - baseband_processor = new FSKProcessor(message_handlers); - break; - - /*case 15: - direction = baseband::Direction::Transmit; - baseband_processor = new RDSProcessor(); - break;*/ - - case 16: - direction = baseband::Direction::Transmit; - baseband_processor = new LCRFSKProcessor(); - break; - - /*case 17: - direction = baseband::Direction::Transmit; - baseband_processor = new ToneProcessor(); - break;*/ - - case 18: - direction = baseband::Direction::Transmit; - baseband_processor = new JammerProcessor(); - break; - - default: - break; - } - - if( baseband_processor ) { - if( direction == baseband::Direction::Receive ) { - rf::rssi::start(); + if( baseband_thread.baseband_processor ) { + i2s::i2s0::tx_mute(); + baseband::dma::disable(); + rf::rssi::stop(); } - baseband::dma::enable(direction); - } else { - baseband::dma::disable(); - rf::rssi::stop(); - } - } - - baseband::dma::configure( - baseband_buffer.data(), - direction - ); - baseband_configuration = message->configuration; - }; + // TODO: Timing problem around disabling DMA and nulling and deleting old processor + auto old_p = baseband_thread.baseband_processor; + baseband_thread.baseband_processor = nullptr; + delete old_p; + + switch(message->configuration.mode) { + case 0: + direction = baseband::Direction::Receive; + baseband_thread.baseband_processor = new NarrowbandAMAudio(); + break; + + case 1: + direction = baseband::Direction::Receive; + baseband_thread.baseband_processor = new NarrowbandFMAudio(); + break; + + case 2: + baseband_thread.baseband_processor = new WidebandFMAudio(); + break; + + case 3: + direction = baseband::Direction::Receive; + baseband_thread.baseband_processor = new AISProcessor(); + break; + + case 4: + direction = baseband::Direction::Receive; + baseband_thread.baseband_processor = new WidebandSpectrum(); + break; + + case 5: + direction = baseband::Direction::Receive; + baseband_thread.baseband_processor = new TPMSProcessor(); + break; + + /*case 15: + direction = baseband::Direction::Transmit; + baseband_thread.baseband_processor = new RDSProcessor(); + break;*/ + + case 16: + direction = baseband::Direction::Transmit; + baseband_thread.baseband_processor = new LCRFSKProcessor(); + break; + + /*case 17: + direction = baseband::Direction::Transmit; + baseband_thread.baseband_processor = new ToneProcessor(); + break;*/ + + case 18: + direction = baseband::Direction::Transmit; + baseband_thread.baseband_processor = new JammerProcessor(); + break; + + default: + break; + } + + if( baseband_thread.baseband_processor ) { + if( direction == baseband::Direction::Receive ) { + rf::rssi::start(); + } + baseband::dma::enable(direction); + rf::rssi::stop(); + } + } + + baseband::dma::configure( + baseband_buffer->data(), + direction + ); + + baseband_thread.baseband_configuration = message->configuration; + } + ); + + message_handlers.register_handler(Message::ID::Shutdown, + [&event_dispatcher](const Message* const) { + event_dispatcher.request_stop(); + } + ); /* TODO: Ensure DMAs are configured to point at first LLI in chain. */ @@ -1297,17 +846,22 @@ int main(void) { touch::dma::allocate(); touch::dma::enable(); - + baseband::dma::configure( - baseband_buffer.data(), + baseband_buffer->data(), direction ); - //baseband::dma::allocate(4, 2048);d - while(true) { - const auto events = event_dispatcher.wait(); - event_dispatcher.dispatch(events); - } - + //baseband::dma::allocate(4, 2048); + + event_dispatcher.run(); + + shutdown(); + + ShutdownMessage shutdown_message; + shared_memory.application_queue.push(shutdown_message); + + halt(); + return 0; } diff --git a/firmware/baseband/matched_filter.cpp b/firmware/baseband/matched_filter.cpp new file mode 100644 index 000000000..5040349a6 --- /dev/null +++ b/firmware/baseband/matched_filter.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "matched_filter.hpp" + +namespace dsp { +namespace matched_filter { + +bool MatchedFilter::execute_once( + const sample_t input +) { + samples_[taps_count_ - decimation_factor_ + decimation_phase] = input; + + advance_decimation_phase(); + if( is_new_decimation_cycle() ) { + float sr_tr = 0.0f; + float si_tr = 0.0f; + float si_ti = 0.0f; + float sr_ti = 0.0f; + for(size_t n=0; n 0) { + *t++ = *s++; + *t++ = *s++; + *t++ = *s++; + *t++ = *s++; + shift_count--; + } + + shift_count = (taps_count_ - decimation_factor_) % unroll_factor; + while(shift_count > 0) { + *t++ = *s++; + shift_count--; + } +} + +} /* namespace matched_filter */ +} /* namespace dsp */ diff --git a/firmware/baseband/matched_filter.hpp b/firmware/baseband/matched_filter.hpp new file mode 100644 index 000000000..741f50180 --- /dev/null +++ b/firmware/baseband/matched_filter.hpp @@ -0,0 +1,101 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __MATCHED_FILTER_H__ +#define __MATCHED_FILTER_H__ + +#include "utility.hpp" + +#include + +#include +#include +#include + +#include +#include + +namespace dsp { +namespace matched_filter { + +// This filter contains "magic" (optimizations) that expect the taps to +// combine a low-pass filter with a complex sinusoid that performs shifting of +// the input signal to 0Hz/DC. This also means that the taps length must be +// a multiple of the complex sinusoid period. + +class MatchedFilter { +public: + using sample_t = std::complex; + using tap_t = std::complex; + + using taps_t = tap_t[]; + + template + MatchedFilter( + const T& taps, + size_t decimation_factor = 1 + ) { + configure(taps, decimation_factor); + } + + template + void configure( + const T& taps, + size_t decimation_factor + ) { + samples_ = std::make_unique(taps.size()); + taps_reversed_ = std::make_unique(taps.size()); + taps_count_ = taps.size(); + decimation_factor_ = decimation_factor; + std::reverse_copy(taps.cbegin(), taps.cend(), &taps_reversed_[0]); + } + + bool execute_once(const sample_t input); + + float get_output() const { + return output; + } + +private: + using samples_t = sample_t[]; + + std::unique_ptr samples_; + std::unique_ptr taps_reversed_; + size_t taps_count_ { 0 }; + size_t decimation_factor_ { 1 }; + size_t decimation_phase { 0 }; + float output; + + void shift_by_decimation_factor(); + + void advance_decimation_phase() { + decimation_phase = (decimation_phase + 1) % decimation_factor_; + } + + bool is_new_decimation_cycle() const { + return (decimation_phase == 0); + } +}; + +} /* namespace matched_filter */ +} /* namespace dsp */ + +#endif/*__MATCHED_FILTER_H__*/ diff --git a/firmware/baseband/mcuconf.h b/firmware/baseband/mcuconf.h index 76f845765..eae375458 100755 --- a/firmware/baseband/mcuconf.h +++ b/firmware/baseband/mcuconf.h @@ -41,3 +41,7 @@ //#define LPC_ADC1_IRQ_PRIORITY 4 #define LPC43XX_M0APPTXEVENT_IRQ_PRIORITY 4 + +/* M4 is initialized by M0, which has already started PLL1 */ +#define LPC43XX_M4_CLK 200000000 +#define LPC43XX_M4_CLK_SRC 0x09 \ No newline at end of file diff --git a/firmware/baseband/packet_builder.cpp b/firmware/baseband/packet_builder.cpp index 587d557ab..0fa5ec201 100644 --- a/firmware/baseband/packet_builder.cpp +++ b/firmware/baseband/packet_builder.cpp @@ -20,15 +20,3 @@ */ #include "packet_builder.hpp" - -void PacketBuilder::configure(size_t new_payload_length) { - if( new_payload_length <= payload.size() ) { - payload_length = new_payload_length; - reset_state(); - } -} - -void PacketBuilder::reset_state() { - bits_received = 0; - state = State::AccessCodeSearch; -} diff --git a/firmware/baseband/packet_builder.hpp b/firmware/baseband/packet_builder.hpp index d14768465..edf503579 100644 --- a/firmware/baseband/packet_builder.hpp +++ b/firmware/baseband/packet_builder.hpp @@ -25,30 +25,62 @@ #include #include #include +#include +#include "bit_pattern.hpp" + +template class PacketBuilder { public: - void configure(size_t new_payload_length); + using PayloadType = std::bitset<1024>; + using PayloadHandlerFunc = std::function; - template - void execute( - const uint_fast8_t symbol, - const bool access_code_found, - PayloadHandler payload_handler + PacketBuilder( + const PreambleMatcher preamble_matcher, + const UnstuffMatcher unstuff_matcher, + const EndMatcher end_matcher, + const PayloadHandlerFunc payload_handler + ) : payload_handler { payload_handler }, + preamble(preamble_matcher), + unstuff(unstuff_matcher), + end(end_matcher) + { + } + + void configure( + const PreambleMatcher preamble_matcher, + const UnstuffMatcher unstuff_matcher ) { + preamble = preamble_matcher; + unstuff = unstuff_matcher; + + reset_state(); + } + + void execute( + const uint_fast8_t symbol + ) { + bit_history.add(symbol); + switch(state) { - case State::AccessCodeSearch: - if( access_code_found ) { + case State::Preamble: + if( preamble(bit_history, bits_received) ) { state = State::Payload; } break; case State::Payload: - if( bits_received < payload_length ) { + if( !unstuff(bit_history, bits_received) ) { payload[bits_received++] = symbol; - } else { + } + + if( end(bit_history, bits_received) ) { payload_handler(payload, bits_received); reset_state(); + } else { + if( packet_truncated() ) { + reset_state(); + } } break; @@ -60,16 +92,29 @@ public: private: enum State { - AccessCodeSearch, + Preamble, Payload, }; - size_t payload_length { 0 }; - size_t bits_received { 0 }; - State state { State::AccessCodeSearch }; - std::bitset<256> payload; + bool packet_truncated() const { + return bits_received >= payload.size(); + } - void reset_state(); + const PayloadHandlerFunc payload_handler; + + BitHistory bit_history; + PreambleMatcher preamble; + UnstuffMatcher unstuff; + EndMatcher end; + + size_t bits_received { 0 }; + State state { State::Preamble }; + PayloadType payload; + + void reset_state() { + bits_received = 0; + state = State::Preamble; + } }; #endif/*__PACKET_BUILDER_H__*/ diff --git a/firmware/baseband/proc_ais.cpp b/firmware/baseband/proc_ais.cpp new file mode 100644 index 000000000..e3005b93f --- /dev/null +++ b/firmware/baseband/proc_ais.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "proc_ais.hpp" + +#include "portapack_shared_memory.hpp" + +#include "i2s.hpp" +using namespace lpc43xx; + +void AISProcessor::execute(buffer_c8_t buffer) { + /* 2.4576MHz, 2048 samples */ + + auto decimator_out = decimator.execute(buffer); + + /* 76.8kHz, 64 samples */ + feed_channel_stats(decimator_out); + /* No spectrum display while AIS decoding. + feed_channel_spectrum( + channel, + decimator_out.sampling_rate * channel_filter_taps.pass_frequency_normalized, + decimator_out.sampling_rate * channel_filter_taps.stop_frequency_normalized + ); + */ + + for(size_t i=0; ifloat is not allowed. + const std::complex sample { + static_cast(decimator_out.p[i].real()), + static_cast(decimator_out.p[i].imag()) + }; + if( mf.execute_once(sample) ) { + clock_recovery(mf.get_output()); + } + } + + i2s::i2s0::tx_mute(); +} + +void AISProcessor::consume_symbol( + const float raw_symbol +) { + const uint_fast8_t sliced_symbol = (raw_symbol >= 0.0f) ? 1 : 0; + const auto decoded_symbol = nrzi_decode(sliced_symbol); + + packet_builder.execute(decoded_symbol); +} + +void AISProcessor::payload_handler( + const std::bitset<1024>& payload, + const size_t bits_received +) { + AISPacketMessage message; + message.packet.payload = payload; + message.packet.bits_received = bits_received; + shared_memory.application_queue.push(message); +} diff --git a/firmware/baseband/proc_ais.hpp b/firmware/baseband/proc_ais.hpp new file mode 100644 index 000000000..e52983f6a --- /dev/null +++ b/firmware/baseband/proc_ais.hpp @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __PROC_AIS_H__ +#define __PROC_AIS_H__ + +#include "baseband_processor.hpp" + +#include "channel_decimator.hpp" +#include "matched_filter.hpp" + +#include "clock_recovery.hpp" +#include "symbol_coding.hpp" +#include "packet_builder.hpp" + +#include "message.hpp" + +#include +#include +#include + +#include "ais_baseband.hpp" + +class AISProcessor : public BasebandProcessor { +public: + using payload_t = std::bitset<1024>; + + void execute(buffer_c8_t buffer) override; + +private: + ChannelDecimator decimator { ChannelDecimator::DecimationFactor::By32 }; + dsp::matched_filter::MatchedFilter mf { baseband::ais::rrc_taps_76k8_4t_p, 4 }; + + clock_recovery::ClockRecovery clock_recovery { + 19200, 9600, { 0.0555f }, + [this](const float symbol) { this->consume_symbol(symbol); } + }; + symbol_coding::NRZIDecoder nrzi_decode; + PacketBuilder packet_builder { + { 0b0101010101111110, 16, 1 }, + { 0b111110, 6 }, + { 0b01111110, 8 }, + [this](const payload_t& payload, const size_t bits_received) { + this->payload_handler(payload, bits_received); + } + }; + + void consume_symbol(const float symbol); + void payload_handler(const payload_t& payload, const size_t bits_received); +}; + +#endif/*__PROC_AIS_H__*/ diff --git a/firmware/baseband/proc_am_audio.cpp b/firmware/baseband/proc_am_audio.cpp new file mode 100644 index 000000000..7a688a088 --- /dev/null +++ b/firmware/baseband/proc_am_audio.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "proc_am_audio.hpp" + +#include + +void NarrowbandAMAudio::execute(buffer_c8_t buffer) { + auto decimator_out = decimator.execute(buffer); + + const buffer_c16_t work_baseband_buffer { + (complex16_t*)decimator_out.p, + sizeof(*decimator_out.p) * decimator_out.count + }; + + /* 96kHz complex[64] + * -> FIR filter, 48kHz int16_t[32] */ + auto channel = channel_filter.execute(decimator_out, work_baseband_buffer); + + // TODO: Feed channel_stats post-decimation data? + feed_channel_stats(channel); + feed_channel_spectrum( + channel, + decimator_out.sampling_rate * channel_filter_taps.pass_frequency_normalized, + decimator_out.sampling_rate * channel_filter_taps.stop_frequency_normalized + ); + + const buffer_s16_t work_audio_buffer { + (int16_t*)decimator_out.p, + sizeof(*decimator_out.p) * decimator_out.count + }; + + /* 48kHz complex[32] + * -> AM demodulation + * -> 48kHz int16_t[32] */ + auto audio = demod.execute(channel, work_audio_buffer); + + audio_hpf.execute_in_place(audio); + fill_audio_buffer(audio); +} diff --git a/firmware/baseband/proc_am_audio.hpp b/firmware/baseband/proc_am_audio.hpp new file mode 100644 index 000000000..6c0d91e59 --- /dev/null +++ b/firmware/baseband/proc_am_audio.hpp @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __PROC_AM_AUDIO_H__ +#define __PROC_AM_AUDIO_H__ + +#include "baseband_processor.hpp" + +#include "channel_decimator.hpp" +#include "dsp_decimate.hpp" +#include "dsp_demodulate.hpp" +#include "dsp_fir_taps.hpp" +#include "dsp_iir.hpp" +#include "dsp_iir_config.hpp" + +class NarrowbandAMAudio : public BasebandProcessor { +public: + NarrowbandAMAudio() { + decimator.set_decimation_factor(ChannelDecimator::DecimationFactor::By32); + channel_filter.configure(channel_filter_taps.taps, 2); + } + + void execute(buffer_c8_t buffer) override; + +private: + ChannelDecimator decimator; + const fir_taps_real<64>& channel_filter_taps = taps_64_lp_031_070_tfilter; + dsp::decimate::FIRAndDecimateComplex channel_filter; + dsp::demodulate::AM demod; + IIRBiquadFilter audio_hpf { audio_hpf_config }; +}; + +#endif/*__PROC_AM_AUDIO_H__*/ diff --git a/firmware/baseband/proc_nfm_audio.cpp b/firmware/baseband/proc_nfm_audio.cpp new file mode 100644 index 000000000..e9b70cf9b --- /dev/null +++ b/firmware/baseband/proc_nfm_audio.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "proc_nfm_audio.hpp" + +#include +#include + +void NarrowbandFMAudio::execute(buffer_c8_t buffer) { + /* Called every 2048/3072000 second -- 1500Hz. */ + + auto decimator_out = decimator.execute(buffer); + + const buffer_c16_t work_baseband_buffer { + (complex16_t*)decimator_out.p, + sizeof(*decimator_out.p) * decimator_out.count + }; + + /* 96kHz complex[64] + * -> FIR filter, <6kHz (0.063fs) pass, gain 1.0 + * -> 48kHz int16_t[32] */ + auto channel = channel_filter.execute(decimator_out, work_baseband_buffer); + + // TODO: Feed channel_stats post-decimation data? + feed_channel_stats(channel); + feed_channel_spectrum( + channel, + decimator_out.sampling_rate * channel_filter_taps.pass_frequency_normalized, + decimator_out.sampling_rate * channel_filter_taps.stop_frequency_normalized + ); + + const buffer_s16_t work_audio_buffer { + (int16_t*)decimator_out.p, + sizeof(*decimator_out.p) * decimator_out.count + }; + + /* 48kHz complex[32] + * -> FM demodulation + * -> 48kHz int16_t[32] */ + auto audio = demod.execute(channel, work_audio_buffer); + + static uint64_t audio_present_history = 0; + const auto audio_present_now = squelch.execute(audio); + audio_present_history = (audio_present_history << 1) | (audio_present_now ? 1 : 0); + const bool audio_present = (audio_present_history != 0); + + if( !audio_present ) { + // Zero audio buffer. + for(size_t i=0; i& channel_filter_taps = taps_64_lp_042_078_tfilter; + dsp::decimate::FIRAndDecimateComplex channel_filter; + dsp::demodulate::FM demod { 48000, 7500 }; + + IIRBiquadFilter audio_hpf { audio_hpf_config }; + FMSquelch squelch; +}; + +#endif/*__PROC_NFM_AUDIO_H__*/ diff --git a/firmware/baseband/proc_tpms.cpp b/firmware/baseband/proc_tpms.cpp new file mode 100644 index 000000000..edabf4681 --- /dev/null +++ b/firmware/baseband/proc_tpms.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "proc_tpms.hpp" + +#include "portapack_shared_memory.hpp" + +#include "i2s.hpp" +using namespace lpc43xx; + +void TPMSProcessor::execute(buffer_c8_t buffer) { + /* 2.4576MHz, 2048 samples */ + + auto decimator_out = decimator.execute(buffer); + + /* 76.8kHz, 64 samples */ + feed_channel_stats(decimator_out); + /* No spectrum display while FSK decoding. + feed_channel_spectrum( + channel, + decimator_out.sampling_rate * channel_filter_taps.pass_frequency_normalized, + decimator_out.sampling_rate * channel_filter_taps.stop_frequency_normalized + ); + */ + + for(size_t i=0; ifloat is not allowed. + const std::complex sample { + static_cast(decimator_out.p[i].real()), + static_cast(decimator_out.p[i].imag()) + }; + if( mf.execute_once(sample) ) { + clock_recovery(mf.get_output()); + } + } + + i2s::i2s0::tx_mute(); +} + +void TPMSProcessor::consume_symbol( + const float raw_symbol +) { + const uint_fast8_t sliced_symbol = (raw_symbol >= 0.0f) ? 1 : 0; + packet_builder.execute(sliced_symbol); +} + +void TPMSProcessor::payload_handler( + const std::bitset<1024>& payload, + const size_t bits_received +) { + TPMSPacketMessage message; + message.packet.payload = payload; + message.packet.bits_received = bits_received; + shared_memory.application_queue.push(message); +} diff --git a/firmware/baseband/proc_tpms.hpp b/firmware/baseband/proc_tpms.hpp new file mode 100644 index 000000000..0bde7d687 --- /dev/null +++ b/firmware/baseband/proc_tpms.hpp @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __PROC_TPMS_H__ +#define __PROC_TPMS_H__ + +#include "baseband_processor.hpp" + +#include "channel_decimator.hpp" +#include "matched_filter.hpp" + +#include "clock_recovery.hpp" +#include "symbol_coding.hpp" +#include "packet_builder.hpp" + +#include "message.hpp" + +#include +#include +#include + +struct NeverMatch { + bool operator()(const BitHistory&, const size_t) const { + return false; + } +}; + +struct FixedLength { + bool operator()(const BitHistory&, const size_t symbols_received) const { + return symbols_received >= length; + } + + const size_t length; +}; + +// Translate+rectangular filter +// sample=153.6k, deviation=38400, symbol=19200 +// Length: 8 taps, 1 symbols, 2 cycles of sinusoid +constexpr std::array, 8> rect_taps_153k6_1t_p { { + { 1.2500000000e-01f, 0.0000000000e+00f }, { 7.6540424947e-18f, 1.2500000000e-01f }, + { -1.2500000000e-01f, 1.5308084989e-17f }, { -2.2962127484e-17f, -1.2500000000e-01f }, + { 1.2500000000e-01f, -3.0616169979e-17f }, { 3.8270212473e-17f, 1.2500000000e-01f }, + { -1.2500000000e-01f, 4.5924254968e-17f }, { -5.3578297463e-17f, -1.2500000000e-01f }, +} }; + +class TPMSProcessor : public BasebandProcessor { +public: + using payload_t = std::bitset<1024>; + + void execute(buffer_c8_t buffer) override; + +private: + ChannelDecimator decimator { ChannelDecimator::DecimationFactor::By16 }; + dsp::matched_filter::MatchedFilter mf { rect_taps_153k6_1t_p, 4 }; + + clock_recovery::ClockRecovery clock_recovery { + 38400, 19200, { 0.0555f }, + [this](const float symbol) { this->consume_symbol(symbol); } + }; + PacketBuilder packet_builder { + { 0b010101010101010101010101010110, 30, 1 }, + { }, + { 256 }, + [this](const payload_t& payload, const size_t bits_received) { + this->payload_handler(payload, bits_received); + } + }; + + void consume_symbol(const float symbol); + void payload_handler(const payload_t& payload, const size_t bits_received); +}; + +#endif/*__PROC_TPMS_H__*/ diff --git a/firmware/baseband/proc_wfm_audio.cpp b/firmware/baseband/proc_wfm_audio.cpp new file mode 100644 index 000000000..5f4a09ccd --- /dev/null +++ b/firmware/baseband/proc_wfm_audio.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "proc_wfm_audio.hpp" + +#include + +void WidebandFMAudio::execute(buffer_c8_t buffer) { + auto decimator_out = decimator.execute(buffer); + + const buffer_s16_t work_audio_buffer { + (int16_t*)decimator_out.p, + sizeof(*decimator_out.p) * decimator_out.count + }; + + auto channel = decimator_out; + + // TODO: Feed channel_stats post-decimation data? + feed_channel_stats(channel); + //feed_channel_spectrum(channel); + + /* 768kHz complex[512] + * -> FM demodulation + * -> 768kHz int16_t[512] */ + /* TODO: To improve adjacent channel rejection, implement complex channel filter: + * pass < +/- 100kHz, stop > +/- 200kHz + */ + + auto audio_oversampled = demod.execute(decimator_out, work_audio_buffer); + + /* 768kHz int16_t[512] + * -> 4th order CIC decimation by 2, gain of 1 + * -> 384kHz int16_t[256] */ + auto audio_8fs = audio_dec_1.execute(audio_oversampled, work_audio_buffer); + + /* 384kHz int16_t[256] + * -> 4th order CIC decimation by 2, gain of 1 + * -> 192kHz int16_t[128] */ + auto audio_4fs = audio_dec_2.execute(audio_8fs, work_audio_buffer); + + /* 192kHz int16_t[128] + * -> 4th order CIC decimation by 2, gain of 1 + * -> 96kHz int16_t[64] */ + auto audio_2fs = audio_dec_3.execute(audio_4fs, work_audio_buffer); + + /* 96kHz int16_t[64] + * -> FIR filter, <15kHz (0.156fs) pass, >19kHz (0.198fs) stop, gain of 1 + * -> 48kHz int16_t[32] */ + auto audio = audio_filter.execute(audio_2fs, work_audio_buffer); + + /* -> 48kHz int16_t[32] */ + audio_hpf.execute_in_place(audio); + fill_audio_buffer(audio); +} diff --git a/firmware/baseband/proc_wfm_audio.hpp b/firmware/baseband/proc_wfm_audio.hpp new file mode 100644 index 000000000..3a0eb65c0 --- /dev/null +++ b/firmware/baseband/proc_wfm_audio.hpp @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __PROC_WFM_AUDIO_H__ +#define __PROC_WFM_AUDIO_H__ + +#include "baseband_processor.hpp" + +#include "channel_decimator.hpp" +#include "dsp_decimate.hpp" +#include "dsp_demodulate.hpp" +#include "dsp_fir_taps.hpp" +#include "dsp_iir.hpp" +#include "dsp_iir_config.hpp" + +class WidebandFMAudio : public BasebandProcessor { +public: + WidebandFMAudio() { + decimator.set_decimation_factor(ChannelDecimator::DecimationFactor::By4); + } + + void execute(buffer_c8_t buffer) override; + +private: + ChannelDecimator decimator; + + dsp::demodulate::FM demod { 768000, 75000 }; + dsp::decimate::DecimateBy2CIC4Real audio_dec_1; + dsp::decimate::DecimateBy2CIC4Real audio_dec_2; + dsp::decimate::DecimateBy2CIC4Real audio_dec_3; + const fir_taps_real<64>& audio_filter_taps = taps_64_lp_156_198; + dsp::decimate::FIR64AndDecimateBy2Real audio_filter { audio_filter_taps.taps }; + + IIRBiquadFilter audio_hpf { audio_hpf_config }; +}; + +#endif/*__PROC_WFM_AUDIO_H__*/ diff --git a/firmware/baseband/proc_wideband_spectrum.cpp b/firmware/baseband/proc_wideband_spectrum.cpp new file mode 100644 index 000000000..17f475517 --- /dev/null +++ b/firmware/baseband/proc_wideband_spectrum.cpp @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "proc_wideband_spectrum.hpp" + +#include "event_m4.hpp" + +#include "i2s.hpp" +using namespace lpc43xx; + +#include "dsp_fft.hpp" + +#include +#include + +#include + +void WidebandSpectrum::execute(buffer_c8_t buffer) { + // 2048 complex8_t samples per buffer. + // 102.4us per buffer. 20480 instruction cycles per buffer. + + static int phase = 0; + + if( phase == 0 ) { + std::fill(spectrum.begin(), spectrum.end(), 0); + } + + if( (phase & 7) == 0 ) { + // TODO: Removed window-presum windowing, due to lack of available code RAM. + // TODO: Apply window to improve spectrum bin sidelobes. + for(size_t i=0; i { buffer.p[i].real(), buffer.p[i].imag() }; + } + } + + if( phase == 23 ) { + if( channel_spectrum_request_update == false ) { + fft_swap(spectrum, channel_spectrum); + channel_spectrum_sampling_rate = buffer.sampling_rate; + channel_filter_pass_frequency = 0; + channel_filter_stop_frequency = 0; + channel_spectrum_request_update = true; + events_flag(EVT_MASK_SPECTRUM); + phase = 0; + } + } else { + phase++; + } + + i2s::i2s0::tx_mute(); +} diff --git a/firmware/baseband/proc_wideband_spectrum.hpp b/firmware/baseband/proc_wideband_spectrum.hpp new file mode 100644 index 000000000..bbbe04eab --- /dev/null +++ b/firmware/baseband/proc_wideband_spectrum.hpp @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __PROC_WIDEBAND_SPECTRUM_H__ +#define __PROC_WIDEBAND_SPECTRUM_H__ + +#include "baseband_processor.hpp" + +#include +#include +#include + +class WidebandSpectrum : public BasebandProcessor { +public: + void execute(buffer_c8_t buffer) override; + +private: + size_t sample_count = 0; + + std::array, 256> spectrum; +}; + +#endif/*__PROC_WIDEBAND_SPECTRUM_H__*/ diff --git a/firmware/baseband/rssi_stats_collector.hpp b/firmware/baseband/rssi_stats_collector.hpp index c89f3e172..6ab945bf1 100644 --- a/firmware/baseband/rssi_stats_collector.hpp +++ b/firmware/baseband/rssi_stats_collector.hpp @@ -37,6 +37,12 @@ public: return; } + if( statistics.count == 0 ) { + const auto value_0 = *p; + statistics.min = value_0; + statistics.max = value_0; + } + const auto end = &p[buffer.count]; while(p < end) { const uint32_t value = *(p++); @@ -58,9 +64,6 @@ public: callback(statistics); statistics.accumulator = 0; statistics.count = 0; - const auto value_0 = *p; - statistics.min = value_0; - statistics.max = value_0; } } diff --git a/firmware/baseband/symbol_coding.hpp b/firmware/baseband/symbol_coding.hpp new file mode 100644 index 000000000..03a424556 --- /dev/null +++ b/firmware/baseband/symbol_coding.hpp @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __SYMBOL_CODING_H__ +#define __SYMBOL_CODING_H__ + +#include +#include + +namespace symbol_coding { + +class NRZIDecoder { +public: + uint_fast8_t operator()(const uint_fast8_t symbol) { + const auto out = (~(symbol ^ last)) & 1; + last = symbol; + return out; + } + +private: + uint_fast8_t last { 0 }; +}; + +} /* namespace symbol_coding */ + +#endif/*__SYMBOL_CODING_H__*/ diff --git a/firmware/bootstrap/Makefile b/firmware/bootstrap/Makefile index fc6e55547..85d3c738f 100644 --- a/firmware/bootstrap/Makefile +++ b/firmware/bootstrap/Makefile @@ -39,6 +39,7 @@ COPT=-std=gnu99 \ -Wall -Wextra -Wstrict-prototypes \ $(CPUFLAGS) \ -DLPC43XX -DLPC43XX_M4 \ + -DGIT_REVISION=\"$(GIT_REVISION)\" \ -Os \ -ffunction-sections \ -fdata-sections \ diff --git a/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.c b/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.c index 3d3bc11f7..dfb28c1e0 100755 --- a/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.c +++ b/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.c @@ -89,6 +89,10 @@ void systick_adjust_period(const uint32_t counts_per_tick) { ritimer_start(); } +void systick_stop() { + ritimer_stop(); +} + /** * @brief Low level HAL driver initialization. * diff --git a/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.h b/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.h index d2ced74b3..5a3ee2a05 100755 --- a/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.h +++ b/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.h @@ -145,6 +145,7 @@ typedef uint32_t halrtcnt_t; extern "C" { #endif void hal_lld_init(void); + void systick_stop(void); void systick_adjust_period(const uint32_t counts_per_tick); halclock_t halLPCGetSystemClock(void); void halLPCSetSystemClock(const halclock_t new_frequency); diff --git a/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.c b/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.c index 4ef29412a..97c6f8baa 100755 --- a/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.c +++ b/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.c @@ -41,7 +41,7 @@ /* TODO: Somehow share this value between the M4 and M0 cores. The M0 always * runs at the same speed as the M4 core. */ -static halclock_t hal_clock_f = LPC43XX_M4_CLK_IRC; +static halclock_t hal_clock_f = LPC43XX_M4_CLK; /*===========================================================================*/ /* Driver local functions. */ @@ -63,6 +63,10 @@ void halLPCSetSystemClock(const halclock_t new_frequency) { hal_clock_f = new_frequency; } +void systick_stop() { + SysTick->CTRL &= ~(SysTick_CTRL_ENABLE_Msk | SysTick_CTRL_TICKINT_Msk); +} + void systick_adjust_period(const uint32_t counts_per_tick) { SysTick->LOAD = counts_per_tick; } @@ -74,7 +78,7 @@ void systick_adjust_period(const uint32_t counts_per_tick) { */ void hal_lld_init(void) { LPC_CGU->BASE_M4_CLK.AUTOBLOCK = 1; - LPC_CGU->BASE_M4_CLK.CLK_SEL = 1; + LPC_CGU->BASE_M4_CLK.CLK_SEL = LPC43XX_M4_CLK_SRC; /* SysTick initialization using the system clock.*/ systick_adjust_period(halLPCGetSystemClock() / CH_FREQUENCY - 1); diff --git a/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.h b/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.h index 643324d51..d1e48abdb 100755 --- a/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.h +++ b/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.h @@ -164,6 +164,7 @@ typedef uint32_t halrtcnt_t; extern "C" { #endif void hal_lld_init(void); + void systick_stop(void); void systick_adjust_period(const uint32_t counts_per_tick); halclock_t halLPCGetSystemClock(void); void halLPCSetSystemClock(const halclock_t new_frequency); diff --git a/firmware/chibios-portapack/os/ports/GCC/ARMCMx/LPC43xx_M0/ld/LPC43xx_M0.ld b/firmware/chibios-portapack/os/ports/GCC/ARMCMx/LPC43xx_M0/ld/LPC43xx_M0.ld index faf76e356..6331b9bd1 100755 --- a/firmware/chibios-portapack/os/ports/GCC/ARMCMx/LPC43xx_M0/ld/LPC43xx_M0.ld +++ b/firmware/chibios-portapack/os/ports/GCC/ARMCMx/LPC43xx_M0/ld/LPC43xx_M0.ld @@ -25,7 +25,6 @@ MEMORY { flash : org = 0x00000000, len = 128k /* SPIFI flash @ 0x140????? */ ram : org = 0x20000000, len = 64k /* AHB SRAM @ 0x20000000 */ - nvram : org = 0x10088000, len = 8k /* Local SRAM, VBAT domain */ } __ram_start__ = ORIGIN(ram); diff --git a/firmware/common/ais_baseband.cpp b/firmware/common/ais_baseband.cpp new file mode 100644 index 000000000..841bec0b3 --- /dev/null +++ b/firmware/common/ais_baseband.cpp @@ -0,0 +1,376 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "ais_baseband.hpp" + +#include +#include +#include +#include + +#include "crc.hpp" + +// TODO: Move string formatting elsewhere!!! +#include "ui_widget.hpp" + +namespace baseband { + +template +class FieldReader { +public: + constexpr FieldReader( + const T& data + ) : data { data } + { + } + + uint32_t read(const size_t start_bit, const size_t length) const { + uint32_t value = 0; + for(size_t i=start_bit; i<(start_bit + length); i++) { + value = (value << 1) | data[bit_remap(i)]; + } + return value; + } + +private: + const T& data; + const BitRemap bit_remap { }; +}; + +namespace ais { + +struct BitRemap { + size_t operator()(const size_t bit_index) const { + return bit_index ^ 7; + } +}; + +struct CRCBitRemap { + size_t operator()(const size_t bit_index) const { + return bit_index; + } +}; + +using FieldReader = baseband::FieldReader, BitRemap>; +using CRCFieldReader = baseband::FieldReader, CRCBitRemap>; + +struct PacketLengthRange { + constexpr PacketLengthRange( + ) : min_bytes { 0 }, + max_bytes { 0 } + { + } + + constexpr PacketLengthRange( + const uint16_t min_bits, + const uint16_t max_bits + ) : min_bytes { static_cast(min_bits / 8U) }, + max_bytes { static_cast(max_bits / 8U) } + { + // static_assert((min_bits & 7) == 0, "minimum bits not a multiple of 8"); + // static_assert((max_bits & 7) == 0, "minimum bits not a multiple of 8"); + } + + bool contains(const size_t bit_count) const { + return !is_above(bit_count) && !is_below(bit_count); + } + + bool is_above(const size_t bit_count) const { + return (min() > bit_count); + } + + bool is_below(const size_t bit_count) const { + return (max() < bit_count); + } + + size_t min() const { + return min_bytes * 8; + } + + size_t max() const { + return max_bytes * 8; + } + +private: + const uint8_t min_bytes; + const uint8_t max_bytes; +}; + +static constexpr std::array packet_length_range { { + { 0, 0 }, // 0 + { 168, 168 }, // 1 + { 168, 168 }, // 2 + { 168, 168 }, // 3 + { 168, 168 }, // 4 + { 424, 424 }, // 5 + { 0, 0 }, // 6 + { 0, 0 }, // 7 + { 0, 1008 }, // 8 + { 0, 0 }, // 9 + { 0, 0 }, // 10 + { 0, 0 }, // 11 + { 0, 0 }, // 12 + { 0, 0 }, // 13 + { 0, 0 }, // 14 + { 0, 0 }, // 15 + { 0, 0 }, // 16 + { 0, 0 }, // 17 + { 168, 168 }, // 18 + { 0, 0 }, // 19 + { 72, 160 }, // 20 + { 272, 360 }, // 21 + { 168, 168 }, // 22 + { 160, 160 }, // 23 + { 160, 168 }, // 24 + { 0, 168 }, // 25 + { 0, 0 }, // 26 + { 0, 0 }, // 27 + { 0, 0 }, // 28 + { 0, 0 }, // 29 + { 0, 0 }, // 30 + { 0, 0 }, // 31 +} }; + +struct PacketLengthValidator { + bool operator()(const uint_fast8_t message_id, const size_t length) { + return packet_length_range[message_id].contains(length); + } +}; + +struct PacketTooLong { + bool operator()(const uint_fast8_t message_id, const size_t length) { + return packet_length_range[message_id].is_below(length); + } +}; + +struct CRCCheck { + bool operator()(const std::bitset<1024>& payload, const size_t data_length) { + CRCFieldReader field_crc { payload }; + CRC ais_fcs { 0x1021 }; + + uint16_t crc_calculated = 0xffff; + + for(size_t i=0; i(field.read(start_bit, 27) << 5) / 32; +} + +static int32_t ais_longitude_normalized( + const FieldReader& field, + const size_t start_bit +) { + // Shifting and dividing is to sign-extend the source field. + // TODO: There's probably a more elegant way to do it. + return static_cast(field.read(start_bit, 28) << 4) / 16; +} + +static std::string ais_format_latlon_normalized(const int32_t normalized) { + const int32_t t = (normalized * 5) / 3; + const int32_t degrees = t / (100 * 10000); + const int32_t fraction = std::abs(t) % (100 * 10000); + return ui::to_string_dec_int(degrees) + "." + ui::to_string_dec_int(fraction, 6, '0'); +} + +static std::string ais_format_latitude( + const FieldReader& field, + const size_t start_bit +) { + const auto value = static_cast(field.read(start_bit, 27) << 5) / 32; + return ais_format_latlon_normalized(value); +} + +static std::string ais_format_longitude( + const FieldReader& field, + const size_t start_bit +) { + const auto value = static_cast(field.read(start_bit, 28) << 4) / 16; + return ais_format_latlon_normalized(value); +} + +struct ais_datetime { + uint16_t year; + uint8_t month; + uint8_t day; + uint8_t hour; + uint8_t minute; + uint8_t second; +}; + +static ais_datetime ais_get_datetime( + const FieldReader& field, + const size_t start_bit +) { + return { + static_cast(field.read(start_bit + 0, 14)), + static_cast(field.read(start_bit + 14, 4)), + static_cast(field.read(start_bit + 18, 5)), + static_cast(field.read(start_bit + 23, 5)), + static_cast(field.read(start_bit + 28, 6)), + static_cast(field.read(start_bit + 34, 6)), + }; +} + +static std::string ais_format_datetime( + const FieldReader& field, + const size_t start_bit +) { + const auto datetime = ais_get_datetime(field, start_bit); + return ui::to_string_dec_uint(datetime.year, 4) + "/" + + ui::to_string_dec_uint(datetime.month, 2, '0') + "/" + + ui::to_string_dec_uint(datetime.day, 2, '0') + " " + + ui::to_string_dec_uint(datetime.hour, 2, '0') + ":" + + ui::to_string_dec_uint(datetime.minute, 2, '0') + ":" + + ui::to_string_dec_uint(datetime.second, 2, '0'); +} + +static char ais_char_to_ascii(const uint8_t c) { + return (c ^ 32) + 32; +} + +static std::string ais_read_text( + const FieldReader& field, + const size_t start_bit, + const size_t character_count +) { + std::string result; + const size_t character_length = 6; + const size_t end_bit = start_bit + character_count * character_length; + for(size_t i=start_bit; i& payload, const size_t payload_length) { + // TODO: Unstuff here, not in baseband! + + // Subtract end flag (8 bits) - one unstuffing bit (occurs during end flag). + const size_t data_and_fcs_length = payload_length - 7; + + if( data_and_fcs_length < 38 ) { + return { "short " + ui::to_string_dec_uint(data_and_fcs_length, 3), "" }; + } + + const size_t extra_bits = data_and_fcs_length & 7; + if( extra_bits != 0 ) { + return { "extra bits " + ui::to_string_dec_uint(data_and_fcs_length, 3), "" }; + } + + FieldReader field { payload }; + + const auto message_id = field.read(0, 6); + + const size_t data_length = data_and_fcs_length - 16; + PacketLengthValidator packet_length_valid; + if( !packet_length_valid(message_id, data_length) ) { + return { "bad length " + ui::to_string_dec_uint(data_length, 3), "" }; + } + + CRCCheck crc_ok; + if( !crc_ok(payload, data_length) ) { + return { "crc", "" }; + } + + const auto source_id = field.read(8, 30); + std::string result { ui::to_string_dec_uint(message_id, 2) + " " + ui::to_string_dec_uint(source_id, 10) }; + + switch(message_id) { + case 1: + case 2: + case 3: + { + const auto navigational_status = field.read(38, 4); + result += " " + ais_format_navigational_status(navigational_status); + result += " " + ais_format_latlon_normalized(ais_latitude_normalized(field, 89)); + result += " " + ais_format_latlon_normalized(ais_longitude_normalized(field, 61)); + } + break; + + case 4: + { + result += " " + ais_format_datetime(field, 38); + result += " " + ais_format_latlon_normalized(ais_latitude_normalized(field, 107)); + result += " " + ais_format_latlon_normalized(ais_longitude_normalized(field, 79)); + } + break; + + case 5: + { + const auto call_sign = ais_read_text(field, 70, 7); + const auto name = ais_read_text(field, 112, 20); + const auto destination = ais_read_text(field, 302, 20); + result += " \"" + call_sign + "\" \"" + name + "\" \"" + destination + "\""; + } + break; + + case 21: + { + const auto name = ais_read_text(field, 43, 20); + result += " \"" + name + "\" " + ais_format_latitude(field, 192) + " " + ais_format_longitude(field, 164); + } + break; + + default: + break; + } + + return { "OK", result }; +} + +} /* namespace ais */ +} /* namespace baseband */ diff --git a/firmware/common/ais_baseband.hpp b/firmware/common/ais_baseband.hpp new file mode 100644 index 000000000..2be4753b0 --- /dev/null +++ b/firmware/common/ais_baseband.hpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __AIS_BASEBAND_H__ +#define __AIS_BASEBAND_H__ + +#include +#include +#include +#include +#include +#include + +namespace baseband { +namespace ais { + +// RRC length should be about 4 x the symbol length (4T) to do a good job of +// cleaning up ISI. + +// Translate+RRC filter +// sample=76.8k, deviation=2400, b=0.5, symbol=9600 +// Length: 32 taps, 4 symbols, 1 cycle of sinusoid +constexpr std::array, 32> rrc_taps_76k8_4t_p { { + { 5.3368736990e-03f, 0.0000000000e+00f }, { 4.6850211151e-03f, 9.3190864122e-04f }, + { 1.7970187432e-03f, 7.4434953528e-04f }, { -2.5478608559e-03f, -1.7024261963e-03f }, + { -6.6710920858e-03f, -6.6710920858e-03f }, { -8.6960320791e-03f, -1.3014531722e-02f }, + { -7.5474785839e-03f, -1.8221225159e-02f }, { -3.8115552023e-03f, -1.9161981995e-02f }, + { -8.1697309033e-19f, -1.3342183083e-02f }, { 3.6940784220e-05f, -1.8571386338e-04f }, + { -7.5474785839e-03f, 1.8221225159e-02f }, { -2.4954265902e-02f, 3.7346698152e-02f }, + { -5.1450054092e-02f, 5.1450054092e-02f }, { -8.3018814119e-02f, 5.5471398140e-02f }, + { -1.1321218147e-01f, 4.6894020990e-02f }, { -1.3498960022e-01f, 2.6851100952e-02f }, + { -1.4292666316e-01f, 1.7503468055e-17f }, { -1.3498960022e-01f, -2.6851100952e-02f }, + { -1.1321218147e-01f, -4.6894020990e-02f }, { -8.3018814119e-02f, -5.5471398140e-02f }, + { -5.1450054092e-02f, -5.1450054092e-02f }, { -2.4954265902e-02f, -3.7346698152e-02f }, + { -7.5474785839e-03f, -1.8221225159e-02f }, { 3.6940784220e-05f, 1.8571386338e-04f }, + { 2.4509192710e-18f, 1.3342183083e-02f }, { -3.8115552023e-03f, 1.9161981995e-02f }, + { -7.5474785839e-03f, 1.8221225159e-02f }, { -8.6960320791e-03f, 1.3014531722e-02f }, + { -6.6710920858e-03f, 6.6710920858e-03f }, { -2.5478608559e-03f, 1.7024261963e-03f }, + { 1.7970187432e-03f, -7.4434953528e-04f }, { 4.6850211151e-03f, -9.3190864122e-04f }, +} }; + +using decoded_packet = std::pair; + +decoded_packet packet_decode(const std::bitset<1024>& data, const size_t data_length); + +} /* namespace ais */ +} /* namespace baseband */ + +#endif/*__AIS_BASEBAND_H__*/ diff --git a/firmware/common/bit_pattern.hpp b/firmware/common/bit_pattern.hpp new file mode 100644 index 000000000..33a3616a5 --- /dev/null +++ b/firmware/common/bit_pattern.hpp @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __BIT_PATTERN_H__ +#define __BIT_PATTERN_H__ + +#include +#include + +class BitHistory { +public: + void add(const uint_fast8_t bit) { + history = (history << 1) | (bit & 1); + } + + uint32_t value() const { + return history; + } + +private: + uint32_t history { 0 }; +}; + +class BitPattern { +public: + constexpr BitPattern( + ) : code_ { 0 }, + mask_ { 0 }, + maximum_hanning_distance_ { 0 } + { + } + + constexpr BitPattern( + const uint32_t code, + const size_t code_length, + const size_t maximum_hanning_distance = 0 + ) : code_ { code }, + mask_ { (1U << code_length) - 1U }, + maximum_hanning_distance_ { maximum_hanning_distance } + { + } + + bool operator()(const BitHistory& history, const size_t) const { + const auto delta_bits = (history.value() ^ code_) & mask_; + const size_t count = __builtin_popcountl(delta_bits); + return (count <= maximum_hanning_distance_); + } + +private: + uint32_t code_; + uint32_t mask_; + size_t maximum_hanning_distance_; +}; + +#endif/*__BIT_PATTERN_H__*/ diff --git a/firmware/common/chibios_cpp.cpp b/firmware/common/chibios_cpp.cpp new file mode 100644 index 000000000..74f4c5d61 --- /dev/null +++ b/firmware/common/chibios_cpp.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#include "chibios_cpp.hpp" + +#include + +void* operator new(size_t size) { + return chHeapAlloc(0x0, size); +} + +void* operator new[](size_t size) { + return chHeapAlloc(0x0, size); +} + +void operator delete(void* p) noexcept { + chHeapFree(p); +} + +void operator delete[](void* p) noexcept { + chHeapFree(p); +} diff --git a/firmware/baseband/access_code_correlator.hpp b/firmware/common/chibios_cpp.hpp similarity index 60% rename from firmware/baseband/access_code_correlator.hpp rename to firmware/common/chibios_cpp.hpp index 0570dcf43..dd423777c 100644 --- a/firmware/baseband/access_code_correlator.hpp +++ b/firmware/common/chibios_cpp.hpp @@ -19,31 +19,16 @@ * Boston, MA 02110-1301, USA. */ -#ifndef __ACCESS_CODE_CORRELATOR_H__ -#define __ACCESS_CODE_CORRELATOR_H__ +#ifndef __CHIBIOS_CPP_H__ +#define __CHIBIOS_CPP_H__ -#include #include -class AccessCodeCorrelator { -public: - void configure( - const uint32_t new_code, - const size_t new_code_length, - const size_t new_maximum_hamming_distance - ); +/* Override new/delete to use Chibi/OS heap functions */ +/* NOTE: Do not inline these, it doesn't work. ;-) */ +void* operator new(size_t size); +void* operator new[](size_t size); +void operator delete(void* p); +void operator delete[](void* p); - bool execute(const uint_fast8_t in); - -private: - uint32_t code { 0 }; - uint32_t mask { 0 }; - uint32_t history { 0 }; - size_t maximum_hamming_distance { 0 }; - - static constexpr uint32_t mask_value(const size_t n) { - return static_cast((1ULL << n) - 1ULL); - } -}; - -#endif/*__ACCESS_CODE_CORRELATOR_H__*/ +#endif/*__CHIBIOS_CPP_H__*/ diff --git a/firmware/common/complex.hpp b/firmware/common/complex.hpp index e6f3e5059..d9ceb1395 100644 --- a/firmware/common/complex.hpp +++ b/firmware/common/complex.hpp @@ -26,8 +26,6 @@ #include #include -#include - constexpr float pi { 3.141592653589793238462643383279502884f }; namespace std { @@ -124,20 +122,4 @@ static_assert(sizeof(complex8_t) == 2, "complex8_t size wrong"); static_assert(sizeof(complex16_t) == 4, "complex16_t size wrong"); static_assert(sizeof(complex32_t) == 8, "complex32_t size wrong"); -#if defined(LPC43XX_M4) -static inline complex32_t multiply_conjugate_s16_s32(const complex16_t::rep_type a, const complex16_t::rep_type b) { - // conjugate: conj(a + bj) = a - bj - // multiply: (a + bj) * (c + dj) = (ac - bd) + (bc + ad)j - // conjugate-multiply: (ac + bd) + (bc - ad)j - //return { a.real() * b.real() + a.imag() * b.imag(), a.imag() * b.real() - a.real() * b.imag() }; - const int32_t rr = __SMULBB(a, b); - const int32_t ii = __SMULTT(a, b); - const int32_t r = __QADD(rr, ii); - const int32_t ir = __SMULTB(a, b); - const int32_t ri = __SMULBT(a, b); - const int32_t i = __QSUB(ir, ri); - return { r, i }; -} -#endif - #endif/*__COMPLEX_H__*/ diff --git a/firmware/common/crc.hpp b/firmware/common/crc.hpp new file mode 100644 index 000000000..0b825dc22 --- /dev/null +++ b/firmware/common/crc.hpp @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __CRC_H__ +#define __CRC_H__ + +#include +#include + +template +class CRC { +public: + constexpr CRC( + const T polynomial/*, + const T initial*/ + ) : polynomial { polynomial }/*, + initial { initial }*/ + { + // CRC LSB must always be 1 + } +/* + template + T calculate(const U& bits, const size_t length) { + if( length > bits.size() ) { + // Exception. + return 0; + } + + T crc = 0; + + for(size_t i=0; i0; --bit) { + if( remainder & top_bit() ) { + remainder = (remainder << 1) ^ polynomial; + } else { + remainder = (remainder << 1); + } + } + return remainder; + } +/* + T calculate(const uint8_t* const data, const size_t length) { + T remainder = initial; + for(size_t byte=0; byte #include +#include "dsp_types.hpp" #include "complex.hpp" +#include "sine_table.hpp" #include "hal.h" namespace std { @@ -54,6 +56,20 @@ constexpr size_t log_2(const size_t n, const size_t p = 0) { return (n <= 1) ? p : log_2(n / 2, p + 1); } +template +void fft_swap(const buffer_c16_t src, std::array& dst) { + static_assert(power_of_two(N), "only defined for N == power of two"); + + for(size_t i=0; i> (32 - log_2(N)); + const auto s = src.p[i]; + dst[i_rev] = { + static_cast(s.real()), + static_cast(s.imag()) + }; + } +} + template void fft_swap(const std::array& src, std::array& dst) { static_assert(power_of_two(N), "only defined for N == power of two"); @@ -69,10 +85,20 @@ void fft_swap(const std::array& src, std::array& dst) { } template -void fft_swap_in_place(std::array& data) { +void fft_swap(const std::array& src, std::array& dst) { static_assert(power_of_two(N), "only defined for N == power of two"); for(size_t i=0; i> (32 - log_2(N)); + dst[i_rev] = src[i]; + } +} + +template +void fft_swap_in_place(std::array& data) { + static_assert(power_of_two(N), "only defined for N == power of two"); + + for(size_t i=0; i> (32 - log_2(N)); std::swap(data[i], data[i_rev]); } @@ -88,10 +114,10 @@ void fft_c_preswapped(std::array& data) { /* Provide data to this function, pre-swapped. */ for(size_t mmax = 1; N > mmax; mmax <<= 1) { const float theta = -pi / mmax; - const float wtemp = std::sin(0.5f * theta); + const float wtemp = sin_f32(0.5f * theta); const T wp { -2.0f * wtemp * wtemp, - std::sin(theta) + sin_f32(theta) }; T w { 1.0f, 0.0f }; for(size_t m = 0; m < mmax; ++m) { diff --git a/firmware/common/fifo.hpp b/firmware/common/fifo.hpp index f266304e9..f7a490c7f 100644 --- a/firmware/common/fifo.hpp +++ b/firmware/common/fifo.hpp @@ -25,6 +25,8 @@ #include #include +#include + /* FIFO implementation inspired by Linux kfifo. */ template @@ -139,7 +141,7 @@ private: } void smp_wmb() { - /*__DMB();*/ + __DMB(); } size_t peek_n() { diff --git a/firmware/common/hackrf_hal.hpp b/firmware/common/hackrf_hal.hpp index 4c25c3ea5..8b41f0a3c 100644 --- a/firmware/common/hackrf_hal.hpp +++ b/firmware/common/hackrf_hal.hpp @@ -49,8 +49,8 @@ constexpr ClockFrequency ssp1_pclk_f = base_m4_clk_f; constexpr ClockFrequency max5864_spi_f = 20000000U; constexpr ClockFrequency max2837_spi_f = 20000000U; -constexpr ClockFrequency rffc5072_reference_f = 50000000U; -constexpr ClockFrequency max2837_reference_f = 50000000U; +constexpr ClockFrequency rffc5072_reference_f = 40000000U; +constexpr ClockFrequency max2837_reference_f = 40000000U; constexpr ClockFrequency mcu_clkin_f = 40000000U; constexpr uint8_t si5351_i2c_address = 0x60; diff --git a/firmware/common/memory_map.hpp b/firmware/common/memory_map.hpp new file mode 100644 index 000000000..6f4eae1e5 --- /dev/null +++ b/firmware/common/memory_map.hpp @@ -0,0 +1,86 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __MEMORY_MAP_H__ +#define __MEMORY_MAP_H__ + +#include +#include + +#include "lpc43xx_cpp.hpp" +using namespace lpc43xx; + +#include "utility.hpp" + +namespace portapack { +namespace memory { + +struct region_t { +public: + constexpr region_t( + const uint32_t base, + const size_t size + ) : base_ { base }, + size_ { size } { + + } + + constexpr uint32_t base() { + return base_; + } + + constexpr uint32_t end() { + return base_ + size_; + } + + constexpr size_t size() { + return size_; + } + +private: + const uint32_t base_; + const size_t size_; +}; + +namespace map { + +constexpr region_t local_sram_0 { 0x10000000, 96_KiB }; +constexpr region_t local_sram_1 { 0x10080000, 40_KiB }; + +constexpr region_t ahb_ram_0 { 0x20000000, 32_KiB }; +constexpr region_t ahb_ram_1 { 0x20008000, 16_KiB }; +constexpr region_t ahb_ram_2 { 0x2000c000, 16_KiB }; + +constexpr region_t spifi_uncached { LPC_SPIFI_DATA_BASE, 1_MiB }; +constexpr region_t spifi_cached { LPC_SPIFI_DATA_CACHED_BASE, spifi_uncached.size() }; + +///////////////////////////////// + +constexpr region_t m4_code { local_sram_1.base(), 32_KiB }; +constexpr region_t shared_memory { m4_code.end(), 8_KiB }; + +constexpr region_t m4_code_hackrf = local_sram_0; + +} /* namespace map */ +} /* namespace memory */ +} /* namespace portapack */ + +#endif/*__MEMORY_MAP_H__*/ diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index bbf54c15c..20449e308 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -29,8 +29,12 @@ #include "utility.hpp" +#include "ch.h" + class Message { public: + static constexpr size_t MAX_SIZE = 276; + enum class ID : uint16_t { /* Assign consecutive IDs. IDs are used to index array. */ RSSIStatistics = 0, @@ -39,32 +43,22 @@ public: ChannelSpectrum = 3, AudioStatistics = 4, BasebandConfiguration = 5, - FSKConfiguration = 6, - FSKPacket = 7, - TestResults = 8, + TPMSPacket = 6, + Shutdown = 8, + AISPacket = 7, TXDone = 9, - Retune = 10, + SDCardStatus = 10, + Retune = 11, MAX }; constexpr Message( ID id - ) : id { id }, - state { State::Free } + ) : id { id } { } - enum class State : uint16_t { - Free, - InUse, - }; - - bool is_free() const { - return state == State::Free; - } - const ID id; - volatile State state; }; struct RSSIStatistics { @@ -77,8 +71,9 @@ struct RSSIStatistics { class RSSIStatisticsMessage : public Message { public: constexpr RSSIStatisticsMessage( + const RSSIStatistics& statistics ) : Message { ID::RSSIStatistics }, - statistics { } + statistics { statistics } { } @@ -87,6 +82,8 @@ public: struct BasebandStatistics { uint32_t idle_ticks { 0 }; + uint32_t main_ticks { 0 }; + uint32_t rssi_ticks { 0 }; uint32_t baseband_ticks { 0 }; bool saturation { false }; }; @@ -94,8 +91,9 @@ struct BasebandStatistics { class BasebandStatisticsMessage : public Message { public: constexpr BasebandStatisticsMessage( + const BasebandStatistics& statistics ) : Message { ID::BasebandStatistics }, - statistics { } + statistics { statistics } { } @@ -107,14 +105,8 @@ struct ChannelStatistics { size_t count; constexpr ChannelStatistics( - ) : max_db { -120 }, - count { 0 } - { - } - - constexpr ChannelStatistics( - int32_t max_db, - size_t count + int32_t max_db = -120, + size_t count = 0 ) : max_db { max_db }, count { count } { @@ -124,8 +116,7 @@ struct ChannelStatistics { class ChannelStatisticsMessage : public Message { public: constexpr ChannelStatisticsMessage( - ) : Message { ID::ChannelStatistics }, - statistics { } + ) : Message { ID::ChannelStatistics } { } @@ -166,19 +157,20 @@ public: AudioStatistics statistics; }; -/*enum bbmode { - RxNBAM = 1, - RxNBFM = 2, - RxWBFM = 3, - RxFSK = 4, - TxRDS = 15, - BBOff = 255 -};*/ - struct BasebandConfiguration { int32_t mode; uint32_t sampling_rate; size_t decimation_factor; + + constexpr BasebandConfiguration( + int32_t mode = -1, + uint32_t sampling_rate = 0, + size_t decimation_factor = 1 + ) : mode { mode }, + sampling_rate { sampling_rate }, + decimation_factor { decimation_factor } + { + } }; class BasebandConfigurationMessage : public Message { @@ -194,7 +186,7 @@ public: }; struct ChannelSpectrum { - std::array* db { nullptr }; + std::array db { { 0 } }; size_t db_count { 256 }; uint32_t sampling_rate { 0 }; uint32_t channel_filter_pass_frequency { 0 }; @@ -211,46 +203,56 @@ public: ChannelSpectrum spectrum; }; -struct FSKConfiguration { - uint32_t symbol_rate; - uint32_t access_code; - size_t access_code_length; - size_t access_code_tolerance; - size_t packet_length; -}; - -class FSKConfigurationMessage : public Message { -public: - constexpr FSKConfigurationMessage( - FSKConfiguration configuration - ) : Message { ID::FSKConfiguration }, - configuration(configuration) - { - } - - FSKConfiguration configuration; -}; - #include -struct FSKPacket { - std::bitset<256> payload; - size_t bits_received; +struct AISPacket { + std::bitset<1024> payload; + size_t bits_received { 0 }; +}; - FSKPacket( - ) : bits_received { 0 } +class AISPacketMessage : public Message { +public: + constexpr AISPacketMessage( + ) : Message { ID::AISPacket } + { + } + + AISPacket packet; +}; + +struct TPMSPacket { + std::bitset<1024> payload; + size_t bits_received { 0 }; +}; + +class TPMSPacketMessage : public Message { +public: + constexpr TPMSPacketMessage( + ) : Message { ID::TPMSPacket } + { + } + + TPMSPacket packet; +}; + +class ShutdownMessage : public Message { +public: + constexpr ShutdownMessage( + ) : Message { ID::Shutdown } { } }; -class FSKPacketMessage : public Message { +class SDCardStatusMessage : public Message { public: - FSKPacketMessage( - ) : Message { ID::FSKPacket } + constexpr SDCardStatusMessage( + bool is_mounted + ) : Message { ID::SDCardStatus }, + is_mounted { is_mounted } { } - FSKPacket packet; + const bool is_mounted; }; class TXDoneMessage : public Message { @@ -275,14 +277,26 @@ public: class MessageHandlerMap { public: - using MessageHandler = std::function; + using MessageHandler = std::function; - MessageHandler& operator[](Message::ID n) { - return map_[toUType(n)]; + void register_handler(const Message::ID id, MessageHandler&& handler) { + if( map_[toUType(id)] != nullptr ) { + chDbgPanic("MsgDblReg"); + } + map_[toUType(id)] = std::move(handler); } - const MessageHandler& operator[](Message::ID n) const { - return map_[toUType(n)]; + void unregister_handler(const Message::ID id) { + map_[toUType(id)] = nullptr; + } + + void send(Message* const message) { + if( message->id < Message::ID::MAX ) { + auto& fn = map_[toUType(message->id)]; + if( fn ) { + fn(message); + } + } } private: diff --git a/firmware/common/message_queue.cpp b/firmware/common/message_queue.cpp index f443d25f6..54e9a2332 100644 --- a/firmware/common/message_queue.cpp +++ b/firmware/common/message_queue.cpp @@ -20,63 +20,3 @@ */ #include "message_queue.hpp" - -#include "ch.h" -#include "lpc43xx_cpp.hpp" - -using namespace lpc43xx; - -bool MessageQueue::push(Message* const message) { - /* Returns true if success: - * - Message not in use. - * - FIFO wasn't full. - */ - if( message->state == Message::State::Free ) { - message->state = Message::State::InUse; - - if( enqueue(message) ) { - signal(); - return true; - } else { - // Roll back message state. - message->state = Message::State::Free; - } - } - - return false; -} - -Message* MessageQueue::pop() { - /* TODO: Because of architecture characteristics, the two LSBs of the - * message pointer will always be 0. Other (non-pointer) message types - * could be encoded by setting these two bits to non-zero values. - * One of the bits could also be used as an "ack" flag... In fact, a - * pointer message could be turned into an "ack" message, or something - * like that... - * Might be better though to use formal operating structures in the - * message to do synchronization between processors. - */ - Message* message { nullptr }; - const auto success = fifo.out(&message, 1); - return success ? message : nullptr; -} - -#if defined(LPC43XX_M0) -bool MessageQueue::enqueue(Message* const message) { - return fifo.in(&message, 1); -} - -void MessageQueue::signal() { - creg::m0apptxevent::assert(); -} -#endif - -#if defined(LPC43XX_M4) -bool MessageQueue::enqueue(Message* const message) { - return fifo.in(&message, 1); -} - -void MessageQueue::signal() { - creg::m4txevent::assert(); -} -#endif diff --git a/firmware/common/message_queue.hpp b/firmware/common/message_queue.hpp index 704ddc19d..94745f3ee 100644 --- a/firmware/common/message_queue.hpp +++ b/firmware/common/message_queue.hpp @@ -27,11 +27,30 @@ #include "message.hpp" #include "fifo.hpp" +#include "lpc43xx_cpp.hpp" +using namespace lpc43xx; + +#include + +template class MessageQueue { public: - bool push(Message* const message); + MessageQueue() { + chMtxInit(&mutex_write); + } - Message* pop(); + template + bool push(const T& message) { + static_assert(sizeof(T) <= Message::MAX_SIZE, "Message::MAX_SIZE too small for message type"); + static_assert(std::is_base_of::value, "type is not based on Message"); + + return push(&message, sizeof(message)); + } + + Message* pop(std::array& buf) { + Message* const p = reinterpret_cast(buf.data()); + return fifo.out_r(buf.data(), buf.size()) ? p : nullptr; + } size_t len() const { return fifo.len(); @@ -42,10 +61,33 @@ public: } private: - FIFO fifo; + FIFO fifo; + Mutex mutex_write; - bool enqueue(Message* const message); - void signal(); + bool push(const void* const buf, const size_t len) { + chMtxLock(&mutex_write); + const auto result = fifo.in_r(buf, len); + chMtxUnlock(); + + const bool success = (result == len); + if( success ) { + signal(); + } + return success; + } + + +#if defined(LPC43XX_M0) + void signal() { + creg::m0apptxevent::assert(); + } +#endif + +#if defined(LPC43XX_M4) + void signal() { + creg::m4txevent::assert(); + } +#endif }; #endif/*__MESSAGE_QUEUE_H__*/ diff --git a/firmware/common/pins.hpp b/firmware/common/pins.hpp index 696cbc462..527e44851 100644 --- a/firmware/common/pins.hpp +++ b/firmware/common/pins.hpp @@ -69,7 +69,7 @@ constexpr Pin pins[] = { [P2_2] = { 2, 2, PinConfig::sgpio_inout_fast(0) }, /* SGPIO6/BANK2F3M16: CPLD.61/HOST_DATA6(IO) */ [P2_3] = { 2, 3, { .mode=4, .pd=0, .pu=0, .fast=0, .input=1, .ifilt=1 } }, /* I2C1_SDA: PortaPack P2_3/LCD_TE */ [P2_4] = { 2, 4, { .mode=4, .pd=0, .pu=0, .fast=0, .input=1, .ifilt=1 } }, /* I2C1_SCL: PortaPack P2_4/ */ - [P2_5] = { 2, 5, { .mode=4, .pd=1, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* RX/P43: U7.VCTL1(I), U10.VCTL1(I), U2.VCTL1(I) */ + [P2_5] = { 2, 5, { .mode=4, .pd=0, .pu=1, .fast=0, .input=0, .ifilt=1 } }, /* RX/P43: U7.VCTL1(I), U10.VCTL1(I), U2.VCTL1(I) */ [P2_6] = { 2, 6, { .mode=4, .pd=0, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* MIXER_SCLK/P31: 33pF, RFFC5072.SCLK(I) */ [P2_7] = { 2, 7, { .mode=0, .pd=0, .pu=0, .fast=0, .input=1, .ifilt=1 } }, /* ISP: 10K PU, Unused */ [P2_8] = { 2, 8, { .mode=4, .pd=0, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* P2_8: 10K PD, BOOT2, DFU switch, PortaPack P2_8/LCD_RD */ @@ -87,7 +87,7 @@ constexpr Pin pins[] = { //[P3_6] = { 3, 6, { .mode=3, .pd=0, .pu=1, .fast=1, .input=1, .ifilt=0 } }, /* SPIFI_MISO: W25Q80BV.DO(IO) */ //[P3_7] = { 3, 7, { .mode=3, .pd=0, .pu=1, .fast=1, .input=1, .ifilt=0 } }, /* SPIFI_MOSI: W25Q80BV.DI(IO) */ //[P3_8] = { 3, 8, { .mode=3, .pd=0, .pu=1, .fast=1, .input=0, .ifilt=1 } }, /* SPIFI_CS/P68: W25Q80BV.CS(I) */ - [P4_0] = { 4, 0, { .mode=0, .pd=0, .pu=1, .fast=0, .input=0, .ifilt=1 } }, /* HP/P44: U6.VCTL1(I), U5.VCTL2(I) */ + [P4_0] = { 4, 0, { .mode=0, .pd=1, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* HP/P44: U6.VCTL1(I), U5.VCTL2(I) */ [P4_1] = { 4, 1, PinConfig::gpio_led(0) }, /* LED1: LED1.A(I) */ [P4_2] = { 4, 2, PinConfig::gpio_led(0) }, /* LED2: LED2.A(I) */ [P4_3] = { 4, 3, PinConfig::sgpio_in_fast(7) }, /* SGPIO9/P77/BANK2F3M1: CPLD.91/HOST_CAPTURE(O) */ @@ -100,8 +100,8 @@ constexpr Pin pins[] = { [P4_10] = { 4, 10, PinConfig::gpio_out_with_pullup(4) }, /* SGPIO15/BANK2F3M6: CPLD.78/HOST_DECIM_SEL2(I) */ [P5_0] = { 5, 0, { .mode=0, .pd=0, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* !VAA_ENABLE: 10K PU, Q3.G(I), power to VAA */ [P5_1] = { 5, 1, { .mode=0, .pd=1, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* LP/P45: U6.VCTL2(I), U5.VCTL1(I) */ - [P5_2] = { 5, 2, { .mode=0, .pd=0, .pu=1, .fast=0, .input=0, .ifilt=1 } }, /* TX_MIX_BP/P46: U9.V1(I) */ - [P5_3] = { 5, 3, { .mode=0, .pd=1, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* RX_MIX_BP/P47: U9.V3(I) */ + [P5_2] = { 5, 2, { .mode=0, .pd=1, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* TX_MIX_BP/P46: U9.V1(I) */ + [P5_3] = { 5, 3, { .mode=0, .pd=0, .pu=1, .fast=0, .input=0, .ifilt=1 } }, /* RX_MIX_BP/P47: U9.V3(I) */ [P5_4] = { 5, 4, { .mode=0, .pd=0, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* MIXER_ENX/P32: 10K PU, 33pF, RFFC5072.ENX(I) */ [P5_5] = { 5, 5, { .mode=0, .pd=0, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* MIXER_RESETX/P33: 10K PU, 33pF, RFFC5072.RESETX(I) */ [P5_6] = { 5, 6, { .mode=0, .pd=1, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* TX_AMP/P48: U12.V3(I), U14.V1(I) */ @@ -113,7 +113,7 @@ constexpr Pin pins[] = { [P6_4] = { 6, 4, { .mode=0, .pd=0, .pu=0, .fast=0, .input=1, .ifilt=1 } }, /* MIXER_SDATA/P27: 33pF, RFFC5072.SDATA(IO) */ [P6_5] = { 6, 5, { .mode=0, .pd=0, .pu=1, .fast=0, .input=0, .ifilt=1 } }, /* CPLD_TMS: CPLD.TMS(I) */ [P6_6] = { 6, 6, PinConfig::sgpio_inout_fast(2) }, /* SGPIO5/BANK2F3M15: CPLD.64/HOST_DATA5(IO) */ - [P6_7] = { 6, 7, { .mode=4, .pd=0, .pu=1, .fast=0, .input=0, .ifilt=1 } }, /* TX/P42: U7.VCTL2(I), U10.VCTL2(I), U2.VCTL2(I) */ + [P6_7] = { 6, 7, { .mode=4, .pd=1, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* TX/P42: U7.VCTL2(I), U10.VCTL2(I), U2.VCTL2(I) */ [P6_8] = { 6, 8, { .mode=4, .pd=0, .pu=1, .fast=0, .input=0, .ifilt=1 } }, /* MIX_BYPASS/P34: U1.VCTL2(I), U11.VCTL1(I) */ [P6_9] = { 6, 9, { .mode=0, .pd=0, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* !TX_AMP_PWR/P51: 10K PU, Q2.G(I), power to U25 (TX amp) */ [P6_10] = { 6, 10, { .mode=0, .pd=0, .pu=0, .fast=0, .input=0, .ifilt=1 } }, /* EN1V8/P70: 10K PD, TPS62410.EN2(I), 1V8LED.A(I) */ diff --git a/firmware/common/portapack_cpld_data.cpp b/firmware/common/portapack_cpld_data.cpp index 458e77a63..08697da00 100644 --- a/firmware/common/portapack_cpld_data.cpp +++ b/firmware/common/portapack_cpld_data.cpp @@ -27,7 +27,7 @@ namespace portapack { namespace cpld { -/* 2015 Apr 23 19:34 PT */ +/* 2015 Aug 21 12:12 PT */ const std::array block_0 { { 0x7fff, 0xffff, 0xbffc, 0xf9e7, 0x79ff, 0xfffe, 0xaf9e, 0x7cff, @@ -35,39 +35,39 @@ const std::array block_0 { { 0x7fff, 0xffff, 0xbff7, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x67ff, 0xffff, 0xbfff, 0xfefd, 0x7fff, 0xff7f, 0xbfff, 0xe7f9, - 0x623f, 0xfff9, 0xb77f, 0xcccf, 0x7fff, 0xb99f, 0xbccc, 0xcffe, + 0x723f, 0xfff9, 0xb77f, 0xcccf, 0x7fff, 0xb99f, 0xbccc, 0xcffe, 0x6fff, 0xffff, 0xbfff, 0xffeb, 0x77f3, 0xffff, 0xbfe6, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fbf, 0xffff, 0xbfff, 0xfbfe, + 0x7bff, 0xffff, 0xbfff, 0xffff, 0x7fbf, 0xffff, 0xbfff, 0xfbfe, 0x7fff, 0xffff, 0xbfff, 0xfffe, 0x6fff, 0xffff, 0xbfef, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffe, 0x6fff, 0xffff, 0xbfff, 0xffdb, 0x7fff, 0xffff, 0xbff7, 0xffff, - 0x7eff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7dff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7ff5, 0xffff, 0xbffd, 0xffff, - 0x6fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x6fff, 0xffff, 0xbfff, 0xfdbb, 0x77ef, 0xbfff, 0xbfff, 0xffff, - 0x7eef, 0xefff, 0xbfff, 0xffff, 0x7dff, 0xffff, 0xbfff, 0xfffe, - 0x7bff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbffd, 0xdfff, - 0x7dff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffe, - 0x7fff, 0xffff, 0xbfff, 0xff7f, 0x77ff, 0xffff, 0xbfff, 0xefff, + 0x7eff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x6fff, 0xffff, 0xbfff, 0xfdbb, 0x77ef, 0xbfff, 0xbfff, 0xf7ff, + 0x7eef, 0xefff, 0xbfff, 0xffff, 0x7dff, 0xffff, 0xbfff, 0xffff, + 0x7bff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbffd, 0xffff, + 0x7dff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xff7f, 0x77ff, 0xffff, 0xbfff, 0xf7ff, 0x7dff, 0xefff, 0xbfff, 0xffff, 0x7dff, 0xffff, 0xbfff, 0xfffe, 0x7fff, 0xffff, 0xbfff, 0xfef7, 0x7ff7, 0xbfff, 0xbffd, 0xffff, 0x7ef7, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffe, 0x6fff, 0xffff, 0xbffe, 0xffdf, 0x7fff, 0xffbf, 0xbfff, 0xffff, - 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7eff, 0xffff, 0xbfff, 0xffef, + 0x7fff, 0xffff, 0xb7ff, 0xffff, 0x7eff, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xfebf, 0xbfff, 0xfeff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfeff, 0x7fff, 0xffff, 0xb5fd, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbdff, 0xffbf, 0x7ffe, 0xffff, 0xbfef, 0xff5f, + 0x7fff, 0xefff, 0xadff, 0xffbf, 0x7ffe, 0xffff, 0xbfef, 0xff5f, 0x7fff, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffdf, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7dff, 0xfd7f, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfdf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7dff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7ff7, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xf6ef, 0xbfcb, 0xffff, - 0x77ff, 0xffff, 0xbfdf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7ff7, 0xfdff, 0xbbff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xf6ff, 0xbbcb, 0xffff, + 0x77ff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7ff7, 0xffdf, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xfbff, 0xbfd5, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xfaff, 0xbfd5, 0xffff, 0x77ff, 0xffff, 0xa55f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fdf, 0xdeef, 0xbfff, 0xfdff, 0x7fff, 0xffff, 0xafff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, @@ -82,23 +82,23 @@ const std::array block_0 { { 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7ff7, 0xdfff, 0xbffd, 0x35ff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fd2, 0xffff, 0xbfbc, 0xc7ff, - 0x7fff, 0xffff, 0xb70f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xb7af, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xddee, 0xb9ff, 0xbdff, 0x7bff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7ffd, 0xea9f, 0xbefb, 0x7bff, - 0x7fff, 0xffff, 0xbeff, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, + 0x7fff, 0xffff, 0xbeaf, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0x7fff, 0x7ffd, 0x0ddf, 0xb598, 0x5e74, - 0x7fff, 0xffff, 0xb6ff, 0xffff, 0x7fbf, 0xffff, 0xbfff, 0xffdf, + 0x7fff, 0xffff, 0xb65f, 0xffff, 0x7fbf, 0xffff, 0xbfff, 0xffdf, 0x7fff, 0xffff, 0xbffe, 0xffff, 0x7ffc, 0x0ddd, 0xbd99, 0x1e6a, - 0x7fff, 0xffff, 0xbfaf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7f08, 0x388f, 0xb89e, 0x887f, - 0x7bff, 0xffff, 0xb7f7, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7bff, 0xffff, 0xb6f7, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7f0c, 0x388f, 0xb89f, 0x983b, 0x67ff, 0xffff, 0xbfff, 0x3333, 0x63e6, 0x6667, 0xb333, 0x31f3, 0x6666, 0x7ccc, 0xb98f, 0x9999, 0x73e8, 0xc445, 0xb938, 0x88ff, 0x7fff, 0xffff, 0xb7ff, 0x7777, 0x6957, 0x7777, 0xb777, 0x74ab, 0x7777, 0x7ddd, 0xbba5, 0x5ddd, 0x7bcd, 0xdcca, 0xb19d, 0xddfb, - 0x7bff, 0xffff, 0xbff7, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, + 0x7bff, 0xffff, 0xbdf7, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0x7fff, 0x7fff, 0xe66f, 0xb37f, 0xffde, 0x7fff, 0xffff, 0xbffe, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffd, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7feb, 0xeedf, 0xbfdf, 0xfcff, @@ -108,83 +108,83 @@ const std::array block_0 { { 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7ffa, 0xefdf, 0xbfff, 0xdfff, 0x7fff, 0xffff, 0xbbfe, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fef, 0xfeff, 0xbfdd, 0xfd7a, - 0x77ff, 0xffff, 0xbebe, 0xfff7, 0x7fff, 0xfb7f, 0xbf9f, 0xffff, + 0x77ff, 0xffff, 0xbebe, 0xfff7, 0x7fff, 0xfb7f, 0xbf9f, 0xefff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfef, 0xfffb, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbaff, 0xfffd, - 0x7fff, 0xedff, 0xbfff, 0xffde, 0x7ffb, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xb7fd, 0xfff7, 0x7fff, 0xfdfb, 0xb7ff, 0xffff, - 0x7fff, 0xfdff, 0xbfff, 0xffff, 0x7ffe, 0xffff, 0xbff3, 0xbbf7, + 0x7fff, 0xfdff, 0xbfff, 0xdfde, 0x7ffb, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xb7fd, 0xfff7, 0x7fff, 0xfdfb, 0xb7ff, 0xdfff, + 0x7fff, 0xedff, 0xbfff, 0xffff, 0x7ffe, 0xffff, 0xbff3, 0xbbf7, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xff7f, 0xbeaf, 0xfffe, - 0x7fff, 0xffff, 0xbfff, 0xffbe, 0x7ffb, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfee, 0xf7f7, 0x7fff, 0xfbef, 0xbfff, 0xffff, - 0x7fff, 0xfbfe, 0xbdff, 0xfadf, 0x7dff, 0xffff, 0xbfff, 0xffdf, - 0x7fff, 0xffff, 0xb7ff, 0x6fff, 0x77ff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xfff7, 0xafff, 0xbfef, 0x7fff, 0xffff, 0xbfff, 0xfffb, + 0x7fff, 0xffff, 0xbfff, 0xbfbe, 0x7ffb, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbdee, 0xb7f7, 0x7fff, 0xfbef, 0xbfff, 0xffff, + 0x7fff, 0xfbfe, 0xbfff, 0xfedf, 0x6dff, 0xffff, 0xbfff, 0xffdf, + 0x7fff, 0xffff, 0xb7ff, 0xefdf, 0x7fef, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xfff7, 0xadbf, 0xffef, 0x7fff, 0xffff, 0xbfff, 0xfffb, 0x7fff, 0xffff, 0xbffd, 0xdfff, 0x7ff7, 0xfdff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffd7, 0x7eff, 0xffff, 0xbfff, 0xffdf, - 0x7fff, 0xffff, 0xbbdf, 0xbbf7, 0x7fff, 0xffef, 0xbfff, 0xffff, - 0x7fff, 0xfbf9, 0xb5ff, 0xfcff, 0x7fff, 0xffff, 0xbfff, 0xfffb, - 0x7fff, 0xffff, 0xbeff, 0xff77, 0x7fff, 0xf7fd, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffd7, 0x6eff, 0xffff, 0xbfff, 0xffdf, + 0x7fff, 0xffff, 0xbadf, 0x7bd7, 0x7fff, 0xffef, 0xbfff, 0xffff, + 0x7fff, 0xfbf9, 0xb3ff, 0xfeff, 0x7fff, 0xffff, 0xbfff, 0xfffb, + 0x7fff, 0xffff, 0xbe5f, 0xff77, 0x7fff, 0xfefd, 0xbfff, 0xffff, 0x7fff, 0xfeee, 0xbfbf, 0xfb3b, 0x77ff, 0xffff, 0xbfff, 0xffea, - 0x7fff, 0xffff, 0xbbaf, 0xffff, 0x6fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xf77f, 0xbfff, 0xd7f7, 0x6eff, 0xffff, 0xbfff, 0xffff, - 0x7bff, 0xffff, 0xbb5f, 0xffff, 0x7ff7, 0x7fff, 0xbfff, 0xffff, - 0x7fff, 0xfff7, 0xaaff, 0xf77f, 0x7fff, 0xffff, 0xbfff, 0xfff4, + 0x7fff, 0xffff, 0xbbff, 0xffff, 0x6fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xd7ff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7bff, 0xffff, 0xbbaf, 0xffff, 0x7ff7, 0x7fff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbbff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfff4, 0x7fff, 0xffff, 0xbdaf, 0x7bff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xf7be, 0xbbff, 0xffff, 0x6dff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xf7ba, 0xb37f, 0xeeff, 0x6fff, 0xffff, 0xbfff, 0xffff, 0x7bff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xfeff, 0xbfbf, 0xfff3, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7f7f, 0xff7f, 0xbfff, 0xffff, - 0x7fff, 0xffef, 0xbfff, 0xffbf, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xfeff, 0xbfbf, 0xfff3, 0x7eff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7f7f, 0xf7ff, 0xbfff, 0xffff, + 0x7fff, 0xf76f, 0xbfff, 0xffb7, 0x6eff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xff7f, 0x7fff, 0xfffd, 0xbfff, 0xffff, - 0x7fff, 0xfcde, 0xbdbf, 0xdf8d, 0x7bff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xb5af, 0xbfff, 0x6ff7, 0x76ff, 0xbfff, 0xffff, + 0x7fff, 0xfcde, 0xbdbf, 0xdf8d, 0x7aff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xb5af, 0xbfff, 0x6ff7, 0x6f7f, 0xbfff, 0xffff, 0x7fff, 0xfbad, 0xbfdf, 0xf77b, 0x7fff, 0xffff, 0xbfff, 0xffee, 0x77ff, 0xffff, 0xbfff, 0xfbf7, 0x7f7f, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xf77b, 0xb37f, 0xecf6, 0x6cff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbf5f, 0x3000, 0x67c0, 0x007f, 0xbfff, 0xffef, + 0x7fff, 0xf77b, 0xb37f, 0xecf6, 0x6dff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfaf, 0x3000, 0x67c0, 0x061f, 0xbfff, 0xffef, 0x7fff, 0xfccd, 0xbbb7, 0x7f99, 0x7cff, 0xffff, 0xb7ff, 0xfff5, - 0x6bff, 0xffff, 0xb7af, 0x3000, 0x66e0, 0x0061, 0xbfff, 0xffdf, + 0x6bff, 0xffff, 0xb7ff, 0x3000, 0x66e0, 0x0601, 0xbfff, 0xffdf, 0x7fff, 0xfccd, 0xbbbe, 0xd519, 0x7cff, 0xffff, 0xafff, 0xffff, - 0x7dff, 0xffff, 0xbdff, 0x3000, 0x67e0, 0x007f, 0xbfff, 0xffff, - 0x7fff, 0xfcc8, 0xb11f, 0xcc99, 0x7cff, 0xffff, 0xbfff, 0xfff5, - 0x6bff, 0xffff, 0xbbbf, 0x3000, 0x67e0, 0x0061, 0xbfff, 0xffff, - 0x7fff, 0xf698, 0xb11f, 0x8033, 0x66ff, 0xffff, 0xbfff, 0xffff, + 0x7dff, 0xffff, 0xbd5f, 0x3000, 0x67e0, 0x061f, 0xbfff, 0xffff, + 0x7fff, 0xfcc8, 0xb11f, 0xcc99, 0x78ff, 0xffff, 0xbfff, 0xfff5, + 0x6bff, 0xffff, 0xbbff, 0x3000, 0x67e0, 0x0601, 0xbfff, 0xffff, + 0x7fff, 0xf698, 0xb11f, 0x8033, 0x6eff, 0xffff, 0xbfff, 0xffff, 0x77ff, 0xffff, 0xbff7, 0xbbbb, 0x73ee, 0x6ee7, 0xb333, 0x31f3, 0x6666, 0x78c6, 0xaccf, 0xb318, 0x7bcc, 0xccc7, 0xb999, 0x99ff, - 0x7fff, 0xffff, 0xb77f, 0x3333, 0x6546, 0x6667, 0xb777, 0x74ab, + 0x7fff, 0xffff, 0xb7ff, 0x3333, 0x6546, 0x6667, 0xb777, 0x74ab, 0x7777, 0x7d9c, 0xb995, 0x19cd, 0x79dd, 0xddd2, 0xb5dd, 0xddff, - 0x7bff, 0xffff, 0xbffb, 0xfddd, 0x7fdd, 0xddff, 0xbfff, 0xffef, + 0x7bff, 0xffff, 0xbffb, 0xfddd, 0x7fdd, 0xdfdf, 0xbfff, 0xffef, 0x7fff, 0xfff6, 0xacff, 0x337f, 0x7fff, 0xffff, 0xb7ff, 0xffff, 0x7fff, 0xffff, 0xbffd, 0x5fff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xfff9, 0xbbdf, 0xddff, 0x7bbf, 0xbfff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xfff7, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xfdff, 0xbfff, 0xfffd, 0x6fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbffe, 0xfffb, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfbf, 0xfffd, 0x6fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbbdf, 0xddff, 0x7bbf, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xfddf, 0xbfff, 0xffdd, 0x6fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbffe, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfbf, 0xffdd, 0x6fff, 0xffff, 0xbfff, 0xffff, 0x7dff, 0xffff, 0xbbff, 0x5fff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xfef5, 0xbbff, 0xbdff, 0x77bf, 0xbfff, 0xbfff, 0xffef, + 0x7fff, 0xfedf, 0xbbff, 0xbdff, 0x77bf, 0xffff, 0xbfff, 0xffef, 0x7dff, 0xffff, 0xbfbf, 0xffef, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7ffd, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xdfff, 0xbfff, 0xffff, + 0x7ffd, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7ffb, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7ff7, 0xffbf, 0xbfff, 0xfdff, 0x7fff, 0xffff, 0xbff7, 0xffdf, 0x7ffe, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xeeff, 0xbfff, 0xffff, 0x7ff7, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7ffd, 0xffff, 0xbfff, 0xffff, - 0x7ffd, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xdfbf, 0xbfff, 0xfdff, + 0x7ffd, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffbf, 0xbfff, 0xfdff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbf7f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfbf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfbf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffd, - 0x7bff, 0xffff, 0xb7ff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7bff, 0xffff, 0xb77f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbf7f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfbf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffd, 0x79ff, 0xffff, 0xb7bf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, @@ -198,17 +198,17 @@ const std::array block_0 { { 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffe, 0x77ff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xa95f, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, + 0x7fff, 0xffff, 0xa59f, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0x7fff, 0x7fff, 0xffff, 0xb7ff, 0xfff5, - 0x69ff, 0xffff, 0xa7ff, 0xffff, 0x7fbf, 0xffff, 0xbfff, 0xffdf, + 0x69ff, 0xffff, 0xab7f, 0xffff, 0x7fbf, 0xffff, 0xbfff, 0xffdf, 0x7fff, 0xffff, 0xbffe, 0xffff, 0x7fff, 0xffff, 0xafff, 0xffff, - 0x7dff, 0xffff, 0xbd9f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7dff, 0xffff, 0xbddf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfff5, - 0x6bff, 0xffff, 0xbaff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x6bff, 0xffff, 0xbabf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0x3333, 0x63e6, 0x6667, 0xb333, 0x31f3, 0x6666, 0x7ccc, 0xb98f, 0x9999, 0x73cc, 0xccc7, 0xb999, 0x99ff, - 0x7fff, 0xffff, 0xb7ff, 0x7777, 0x6957, 0x7777, 0xb777, 0x74ab, + 0x7fff, 0xffff, 0xb7bf, 0x7777, 0x6957, 0x7777, 0xb777, 0x74ab, 0x7777, 0x7ddd, 0xbba5, 0x5ddd, 0x7bdd, 0xddd2, 0xb5dd, 0xddff, 0x7fff, 0xffff, 0xbdff, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0x7fff, 0x7fff, 0xffff, 0xb7ff, 0xffff, @@ -220,29 +220,29 @@ const std::array block_0 { { 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xfbff, 0xbfff, 0xffff, 0x7dff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xefff, 0x7fff, 0xffff, 0xbfff, 0xf7ff, - 0x7dff, 0xffff, 0xbbbf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7dff, 0xffff, 0xbbbf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xdfff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbeff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xefff, + 0x7fff, 0xffff, 0xbfff, 0xffbf, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xfbff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbff7, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xf7ff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xefff, + 0x7fff, 0xffff, 0xbfff, 0xff7f, 0x7fff, 0xffff, 0xbfff, 0xefff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbeff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbdff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffbf, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffb, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffd, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbeff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffbf, - 0x7fff, 0xffff, 0xaddf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xad5f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfff5, - 0x69ff, 0xffff, 0xab7f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x69ff, 0xffff, 0xabff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7dff, 0xffff, 0xbddf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7dff, 0xffff, 0xbd9f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfff5, - 0x69ff, 0xffff, 0xb63f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x69ff, 0xffff, 0xb6bf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffe, 0x75ff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, @@ -250,55 +250,55 @@ const std::array block_0 { { 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbf0f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfaf, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfff5, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xb6ff, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, + 0x7fff, 0xffff, 0xb6af, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0x7fff, 0x7fff, 0xffff, 0xb7ff, 0xfffe, - 0x7bff, 0xffff, 0xb95f, 0xffff, 0x7fbf, 0xffff, 0xbfff, 0xffdf, + 0x7bff, 0xffff, 0xb9ff, 0xffff, 0x7fbf, 0xffff, 0xbfff, 0xffdf, 0x7fff, 0xffff, 0xbffe, 0xffff, 0x7fff, 0xffff, 0xafff, 0xffeb, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbf5f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffe, - 0x77ff, 0xffff, 0xb69f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x77ff, 0xffff, 0xbe9f, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0x3333, 0x63e6, 0x6667, 0xb333, 0x31f3, 0x6666, 0x7ccc, 0xb98f, 0x9999, 0x73cc, 0xccc7, 0xb999, 0x99ff, - 0x7fff, 0xffff, 0xb7bf, 0x7777, 0x6957, 0x7777, 0xb777, 0x74ab, + 0x7fff, 0xffff, 0xbfbf, 0x7777, 0x6957, 0x7777, 0xb777, 0x74ab, 0x7777, 0x7ddd, 0xbba5, 0x5ddd, 0x7bdd, 0xddd2, 0xb5dd, 0xddff, 0x7fff, 0xffff, 0xbedf, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0x7fff, 0x7fff, 0xffff, 0xb7ff, 0xfff7, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbeff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbefd, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffe, 0x7ff7, 0xffbf, 0xbeff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xff5f, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x6ff7, 0xffff, 0xbf7f, 0xfeff, + 0x7fff, 0xffff, 0xbeff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xff5f, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbffe, 0xffff, + 0x7fff, 0xffff, 0xbf7f, 0xffff, 0x6ff7, 0xffff, 0xbf7f, 0xfeff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbdff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xff7f, 0xbfff, 0xffff, - 0x77ff, 0xffff, 0xbffb, 0xff7f, 0x7fff, 0xbbf7, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xfffb, 0x7ff7, 0xffff, 0xbfff, 0xffbf, - 0x7fff, 0xffff, 0xbffe, 0xffff, 0x7fff, 0xffff, 0xbffe, 0xffff, + 0x77ff, 0xffff, 0xbffb, 0xff7f, 0x7fff, 0xbbf7, 0xbfff, 0xbfff, + 0x7fff, 0xffff, 0xbfff, 0xfffb, 0x7fff, 0xffff, 0xbfff, 0xffbf, + 0x77ff, 0xffff, 0xbffe, 0xfffd, 0x6fff, 0xffff, 0xbffe, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbdfd, 0xffff, 0x7fff, 0xdff7, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbdfd, 0xffff, 0x6fff, 0xdff7, 0xbfff, 0x7fff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffbf, 0x7fff, 0xfdff, 0xbffe, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xfffb, 0x7ffb, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfee, 0x75ff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffbd, 0x7fff, 0xfdff, 0xbffe, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xfffb, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfea, 0x75ff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffdf, - 0x7fff, 0xffff, 0xb7ff, 0xffff, 0x7ff7, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7ff7, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbffd, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xb7df, 0xb5ff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfdb, 0xb5ff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffbf, - 0x7fff, 0xffff, 0xb65f, 0xefff, 0x7fff, 0x7fff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xb6af, 0xefff, 0x7fff, 0x7fff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfff5, 0x6bff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7dff, 0xffff, 0xb7ff, 0xfdff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7dff, 0xffff, 0xb7af, 0xfdff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfff5, - 0x6bff, 0xffff, 0xbd0f, 0xffff, 0x7ff7, 0xffdf, 0xbfff, 0xffff, + 0x6bff, 0xffff, 0xbdaf, 0xffff, 0x7ff7, 0xffdf, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffea, 0x77ff, 0xffff, 0xbbff, 0xffff, 0x7fff, 0xffff, 0x9fff, 0xffff, 0x5fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, @@ -307,14 +307,14 @@ const std::array block_0 { { 0x5fff, 0xffff, 0xbfff, 0xdeff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbaff, 0xffff, 0x77ff, 0xffbf, 0x9fff, 0xffff, - 0x5fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfffe, + 0x5fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffee, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fef, 0x7fff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xa55f, 0xfebf, 0x67c6, 0x1ebf, 0xbfff, 0xffef, 0x7fff, 0xffff, 0x9fff, 0x7fff, 0x5fff, 0xffff, 0xb7ff, 0xfff5, - 0x65ff, 0xffff, 0xafff, 0xc2bf, 0x47a6, 0x1ebf, 0xbfff, 0xffdf, + 0x67ff, 0xffff, 0xafff, 0xc2bf, 0x47a6, 0x1ebf, 0xbfff, 0xffdf, 0x7fff, 0xffff, 0xbffe, 0xffff, 0x7fff, 0xffff, 0xafff, 0xffff, - 0x5dff, 0xffff, 0xb55f, 0xfe7f, 0x67e6, 0x1f3f, 0xbfff, 0xffff, + 0x5fff, 0xffff, 0xb55f, 0xfe7f, 0x67e6, 0x1f3f, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xfff5, 0x67ff, 0xffff, 0x9fff, 0xc27f, 0x47e6, 0x1f3f, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x5fff, 0xffff, 0xbfff, 0xffff, @@ -324,11 +324,11 @@ const std::array block_0 { { 0x7777, 0x7ddd, 0xbba5, 0x5ddd, 0x7bdd, 0xddd2, 0xb5dd, 0xddff, 0x5fff, 0xffff, 0xbfff, 0xffff, 0x7fdf, 0xdfff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0x7fff, 0x7fff, 0xffff, 0xb7ff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xfeff, 0x77ff, 0xffff, 0xbfff, 0xefff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x77ff, 0xffff, 0xbfff, 0xefff, 0x7fff, 0xffff, 0xbf7f, 0xfff7, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0x9fff, 0xffff, 0x7ff7, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0x9fff, 0xfffd, 0x7ff7, 0xffff, 0xbfff, 0xffff, 0x7fdf, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xff7f, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0x8fff, 0xfdff, 0x4ff7, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0x8fff, 0xfffd, 0x4ff7, 0xffff, 0xbfff, 0xffff, 0x7fbf, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xff7f, 0x9fff, 0xffff, 0x5dff, 0xffff, 0xafff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xefff, 0x7fff, 0xffff, 0x9f7f, 0xffff, 0x5fff, 0xffff, 0xbfff, 0xffff, @@ -383,7 +383,7 @@ const std::array block_0 { { 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0x9fff, 0xfeff, 0x7fff, 0xbfff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffbf, 0x9fff, 0xfff7, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0x9fff, 0xfff7, 0x7fff, 0xffff, 0xafff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0x9fff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7dff, 0xffff, 0xafff, 0xffff, 0x5fff, 0xffff, 0xbfff, 0xffff, @@ -391,18 +391,18 @@ const std::array block_0 { { 0x7dff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xf7ff, 0x7fff, 0xffff, 0xbfbf, 0xffff, 0x5fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x5fff, 0xefff, 0xbfff, 0xffef, 0x7fff, 0xffbf, 0x9fff, 0xffff, + 0x5fff, 0xefff, 0xbfff, 0xffef, 0x7fff, 0xffff, 0x9fff, 0xffff, 0x5fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xf7ff, - 0x7fff, 0xefff, 0x9fff, 0xffff, 0x5fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x7fff, 0xefff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, + 0x5fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfdf, 0xffff, 0x5fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fef, 0xffff, 0x9fff, 0xe7ff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fef, 0xffff, 0x9fff, 0xefff, 0x5fff, 0xefff, 0xbfff, 0xdfff, 0x7fff, 0xffff, 0x9fff, 0xffff, - 0x5fff, 0xffff, 0xbfff, 0xffbe, 0x7fff, 0xbdff, 0xbfff, 0xffff, + 0x5fff, 0xffff, 0xbfff, 0xffbd, 0x7fff, 0xbdff, 0xbfff, 0xf7ff, 0x7fff, 0xefff, 0x9fff, 0xffff, 0x5fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xfffd, 0x7ff7, 0xfdff, 0xbfff, 0xffff, + 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7ff7, 0xfdff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xdfff, 0x7fff, 0xffff, 0xbfff, 0xffff, - 0x7fff, 0xffff, 0xbfff, 0xff7f, 0x7fff, 0xdfff, 0xbfff, 0xd7ff, + 0x7fff, 0xffff, 0xbfff, 0xff7e, 0x7fff, 0xdfff, 0xbfff, 0xdbff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xffef, 0x7ffd, 0xdfff, 0xbfff, 0xffff, 0x7fff, 0xffff, 0xbfff, 0xefff, 0x7fff, 0xffff, 0xbfff, 0xffff, diff --git a/firmware/common/portapack_hal.hpp b/firmware/common/portapack_hal.hpp index 2bb33e08a..ccf88656d 100644 --- a/firmware/common/portapack_hal.hpp +++ b/firmware/common/portapack_hal.hpp @@ -36,8 +36,8 @@ namespace portapack { constexpr GPIO gpio_io_stbx = gpio[GPIO5_0]; /* P2_0 */ constexpr GPIO gpio_addr = gpio[GPIO5_1]; /* P2_1 */ constexpr GPIO gpio_lcd_te = gpio[GPIO5_3]; /* P2_3 */ -constexpr GPIO gpio_unused = gpio[GPIO5_4]; /* P2_4 */ -constexpr GPIO gpio_lcd_rd = gpio[GPIO5_7]; /* P2_8 */ +constexpr GPIO gpio_unused = gpio[GPIO5_7]; /* P2_8 */ +constexpr GPIO gpio_lcd_rd = gpio[GPIO5_4]; /* P2_4 */ constexpr GPIO gpio_lcd_wr = gpio[GPIO1_10]; /* P2_9 */ constexpr GPIO gpio_dir = gpio[GPIO1_13]; /* P2_13 */ constexpr std::array gpios_data { diff --git a/firmware/common/portapack_shared_memory.cpp b/firmware/common/portapack_shared_memory.cpp index bf02da4f9..4d4e913c1 100644 --- a/firmware/common/portapack_shared_memory.cpp +++ b/firmware/common/portapack_shared_memory.cpp @@ -21,4 +21,13 @@ #include "portapack_shared_memory.hpp" -SharedMemory& shared_memory = *reinterpret_cast(0x10088000); +#include "memory_map.hpp" + +SharedMemory& shared_memory = *reinterpret_cast( + portapack::memory::map::shared_memory.base() +); + +static_assert( + sizeof(SharedMemory) <= portapack::memory::map::shared_memory.size(), + "SharedMemory is too large" +); diff --git a/firmware/common/portapack_shared_memory.hpp b/firmware/common/portapack_shared_memory.hpp index 3a0d151c7..1bbe05c85 100644 --- a/firmware/common/portapack_shared_memory.hpp +++ b/firmware/common/portapack_shared_memory.hpp @@ -39,8 +39,8 @@ struct JammerRange { /* NOTE: These structures must be located in the same location in both M4 and M0 binaries */ struct SharedMemory { - MessageQueue baseband_queue; - MessageQueue application_queue; + MessageQueue<12> baseband_queue; + MessageQueue<11> application_queue; // TODO: M0 should directly configure and control DMA channel that is // acquiring ADC samples. @@ -65,8 +65,8 @@ extern SharedMemory& shared_memory; #if defined(LPC43XX_M0) inline void init_message_queues() { - new (&shared_memory.baseband_queue) MessageQueue(); - new (&shared_memory.application_queue) MessageQueue(); + new (&shared_memory.baseband_queue) MessageQueue<12>(); + new (&shared_memory.application_queue) MessageQueue<11>(); } #endif diff --git a/firmware/common/sine_table.hpp b/firmware/common/sine_table.hpp new file mode 100644 index 000000000..84979dfea --- /dev/null +++ b/firmware/common/sine_table.hpp @@ -0,0 +1,149 @@ +/* + * Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __SINE_TABLE_H__ +#define __SINE_TABLE_H__ + +// TODO: Including only for pi. Need separate math.hpp... +#include "complex.hpp" + +#include +#include + +/* +import numpy +length = 256 +w = numpy.arange(length, dtype=numpy.float64) * (2 * numpy.pi / length) +v = numpy.sin(w) +print(v) +*/ +constexpr size_t sine_table_f32_period_log2 = 8; +constexpr size_t sine_table_f32_period = 1 << sine_table_f32_period_log2; +constexpr uint32_t sine_table_f32_index_mask = sine_table_f32_period - 1; + +constexpr std::array sine_table_f32 { { + 0.00000000e+00, 2.45412285e-02, 4.90676743e-02, + 7.35645636e-02, 9.80171403e-02, 1.22410675e-01, + 1.46730474e-01, 1.70961889e-01, 1.95090322e-01, + 2.19101240e-01, 2.42980180e-01, 2.66712757e-01, + 2.90284677e-01, 3.13681740e-01, 3.36889853e-01, + 3.59895037e-01, 3.82683432e-01, 4.05241314e-01, + 4.27555093e-01, 4.49611330e-01, 4.71396737e-01, + 4.92898192e-01, 5.14102744e-01, 5.34997620e-01, + 5.55570233e-01, 5.75808191e-01, 5.95699304e-01, + 6.15231591e-01, 6.34393284e-01, 6.53172843e-01, + 6.71558955e-01, 6.89540545e-01, 7.07106781e-01, + 7.24247083e-01, 7.40951125e-01, 7.57208847e-01, + 7.73010453e-01, 7.88346428e-01, 8.03207531e-01, + 8.17584813e-01, 8.31469612e-01, 8.44853565e-01, + 8.57728610e-01, 8.70086991e-01, 8.81921264e-01, + 8.93224301e-01, 9.03989293e-01, 9.14209756e-01, + 9.23879533e-01, 9.32992799e-01, 9.41544065e-01, + 9.49528181e-01, 9.56940336e-01, 9.63776066e-01, + 9.70031253e-01, 9.75702130e-01, 9.80785280e-01, + 9.85277642e-01, 9.89176510e-01, 9.92479535e-01, + 9.95184727e-01, 9.97290457e-01, 9.98795456e-01, + 9.99698819e-01, 1.00000000e+00, 9.99698819e-01, + 9.98795456e-01, 9.97290457e-01, 9.95184727e-01, + 9.92479535e-01, 9.89176510e-01, 9.85277642e-01, + 9.80785280e-01, 9.75702130e-01, 9.70031253e-01, + 9.63776066e-01, 9.56940336e-01, 9.49528181e-01, + 9.41544065e-01, 9.32992799e-01, 9.23879533e-01, + 9.14209756e-01, 9.03989293e-01, 8.93224301e-01, + 8.81921264e-01, 8.70086991e-01, 8.57728610e-01, + 8.44853565e-01, 8.31469612e-01, 8.17584813e-01, + 8.03207531e-01, 7.88346428e-01, 7.73010453e-01, + 7.57208847e-01, 7.40951125e-01, 7.24247083e-01, + 7.07106781e-01, 6.89540545e-01, 6.71558955e-01, + 6.53172843e-01, 6.34393284e-01, 6.15231591e-01, + 5.95699304e-01, 5.75808191e-01, 5.55570233e-01, + 5.34997620e-01, 5.14102744e-01, 4.92898192e-01, + 4.71396737e-01, 4.49611330e-01, 4.27555093e-01, + 4.05241314e-01, 3.82683432e-01, 3.59895037e-01, + 3.36889853e-01, 3.13681740e-01, 2.90284677e-01, + 2.66712757e-01, 2.42980180e-01, 2.19101240e-01, + 1.95090322e-01, 1.70961889e-01, 1.46730474e-01, + 1.22410675e-01, 9.80171403e-02, 7.35645636e-02, + 4.90676743e-02, 2.45412285e-02, 1.22464680e-16, + -2.45412285e-02, -4.90676743e-02, -7.35645636e-02, + -9.80171403e-02, -1.22410675e-01, -1.46730474e-01, + -1.70961889e-01, -1.95090322e-01, -2.19101240e-01, + -2.42980180e-01, -2.66712757e-01, -2.90284677e-01, + -3.13681740e-01, -3.36889853e-01, -3.59895037e-01, + -3.82683432e-01, -4.05241314e-01, -4.27555093e-01, + -4.49611330e-01, -4.71396737e-01, -4.92898192e-01, + -5.14102744e-01, -5.34997620e-01, -5.55570233e-01, + -5.75808191e-01, -5.95699304e-01, -6.15231591e-01, + -6.34393284e-01, -6.53172843e-01, -6.71558955e-01, + -6.89540545e-01, -7.07106781e-01, -7.24247083e-01, + -7.40951125e-01, -7.57208847e-01, -7.73010453e-01, + -7.88346428e-01, -8.03207531e-01, -8.17584813e-01, + -8.31469612e-01, -8.44853565e-01, -8.57728610e-01, + -8.70086991e-01, -8.81921264e-01, -8.93224301e-01, + -9.03989293e-01, -9.14209756e-01, -9.23879533e-01, + -9.32992799e-01, -9.41544065e-01, -9.49528181e-01, + -9.56940336e-01, -9.63776066e-01, -9.70031253e-01, + -9.75702130e-01, -9.80785280e-01, -9.85277642e-01, + -9.89176510e-01, -9.92479535e-01, -9.95184727e-01, + -9.97290457e-01, -9.98795456e-01, -9.99698819e-01, + -1.00000000e+00, -9.99698819e-01, -9.98795456e-01, + -9.97290457e-01, -9.95184727e-01, -9.92479535e-01, + -9.89176510e-01, -9.85277642e-01, -9.80785280e-01, + -9.75702130e-01, -9.70031253e-01, -9.63776066e-01, + -9.56940336e-01, -9.49528181e-01, -9.41544065e-01, + -9.32992799e-01, -9.23879533e-01, -9.14209756e-01, + -9.03989293e-01, -8.93224301e-01, -8.81921264e-01, + -8.70086991e-01, -8.57728610e-01, -8.44853565e-01, + -8.31469612e-01, -8.17584813e-01, -8.03207531e-01, + -7.88346428e-01, -7.73010453e-01, -7.57208847e-01, + -7.40951125e-01, -7.24247083e-01, -7.07106781e-01, + -6.89540545e-01, -6.71558955e-01, -6.53172843e-01, + -6.34393284e-01, -6.15231591e-01, -5.95699304e-01, + -5.75808191e-01, -5.55570233e-01, -5.34997620e-01, + -5.14102744e-01, -4.92898192e-01, -4.71396737e-01, + -4.49611330e-01, -4.27555093e-01, -4.05241314e-01, + -3.82683432e-01, -3.59895037e-01, -3.36889853e-01, + -3.13681740e-01, -2.90284677e-01, -2.66712757e-01, + -2.42980180e-01, -2.19101240e-01, -1.95090322e-01, + -1.70961889e-01, -1.46730474e-01, -1.22410675e-01, + -9.80171403e-02, -7.35645636e-02, -4.90676743e-02, + -2.45412285e-02, 0.00000000e+00, +} }; + +inline float sin_f32(const float w) { + constexpr float normalize = 1.0 / (2 * pi); + + const float x = w * normalize; + const int32_t x_int = std::floor(x); + const float x_frac = x - x_int; + + const float n = x_frac * sine_table_f32_period; + const int32_t n_int = static_cast(n) & sine_table_f32_index_mask; + const float n_frac = n - n_int; + + const float p0 = sine_table_f32[n_int + 0]; + const float p1 = sine_table_f32[n_int + 1]; + const float diff = p1 - p0; + const float result = p0 + n_frac * diff; + return result; +} + +#endif/*__SINE_TABLE_H__*/ diff --git a/firmware/common/spi_image.hpp b/firmware/common/spi_image.hpp index e693d3e9f..f8e71d624 100644 --- a/firmware/common/spi_image.hpp +++ b/firmware/common/spi_image.hpp @@ -25,7 +25,7 @@ #include #include -#include "hal.h" +#include "memory_map.hpp" namespace portapack { namespace spi_flash { @@ -34,8 +34,8 @@ struct region_t { const size_t offset; const size_t size; - constexpr const void* base_address() { - return reinterpret_cast(LPC_SPIFI_DATA_CACHED_BASE + offset); + constexpr const void* base() { + return reinterpret_cast(portapack::memory::map::spifi_cached.base() + offset); } }; @@ -45,7 +45,7 @@ constexpr region_t bootstrap { }; constexpr region_t hackrf { - .offset = 0x10010, // Image starts at 0x10 into .dfu file. + .offset = 0x10000, .size = 0x8000, }; @@ -59,9 +59,6 @@ constexpr region_t application { .size = 0x40000, }; -// TODO: Refactor into another header that defines memory regions. -constexpr void* m4_text_ram_base = reinterpret_cast(0x10080000); - } /* namespace spi_flash */ } /* namespace portapack */ diff --git a/firmware/common/ui_painter.cpp b/firmware/common/ui_painter.cpp index ef246e5fb..1f772fa1c 100644 --- a/firmware/common/ui_painter.cpp +++ b/firmware/common/ui_painter.cpp @@ -21,6 +21,8 @@ #include "ui_painter.hpp" +#include "ui_widget.hpp" + #include "portapack.hpp" using namespace portapack; @@ -71,4 +73,36 @@ void Painter::fill_rectangle(const Rect r, const Color c) { display.fill_rectangle(r, c); } +void Painter::paint_widget_tree(Widget* const w) { + if( ui::is_dirty() ) { + paint_widget(w); + ui::dirty_clear(); + } +} + +void Painter::paint_widget(Widget* const w) { + if( w->hidden() ) { + // Mark widget (and all children) as invisible. + w->visible(false); + } else { + // Mark this widget as visible and recurse. + w->visible(true); + + if( w->dirty() ) { + w->paint(*this); + // Force-paint all children. + for(const auto child : w->children()) { + child->set_dirty(); + paint_widget(child); + } + w->set_clean(); + } else { + // Selectively paint all children. + for(const auto child : w->children()) { + paint_widget(child); + } + } + } +} + } /* namespace ui */ diff --git a/firmware/common/ui_painter.hpp b/firmware/common/ui_painter.hpp index 542f3cab5..40e03edf1 100644 --- a/firmware/common/ui_painter.hpp +++ b/firmware/common/ui_painter.hpp @@ -37,6 +37,8 @@ struct Style { Style invert() const; }; +class Widget; + class Painter { public: Painter() { }; @@ -51,9 +53,13 @@ public: void draw_rectangle(const Rect r, const Color c); void fill_rectangle(const Rect r, const Color c); + void paint_widget_tree(Widget* const w); + private: void draw_hline(Point p, size_t width, const Color c); void draw_vline(Point p, size_t height, const Color c); + + void paint_widget(Widget* const w); }; } /* namespace ui */ diff --git a/firmware/common/ui_widget.cpp b/firmware/common/ui_widget.cpp index 3c38cad88..bae025eea 100644 --- a/firmware/common/ui_widget.cpp +++ b/firmware/common/ui_widget.cpp @@ -29,6 +29,20 @@ namespace ui { +static bool ui_dirty = true; + +void dirty_set() { + ui_dirty = true; +} + +void dirty_clear() { + ui_dirty = false; +} + +bool is_dirty() { + return ui_dirty; +} + constexpr size_t to_string_max_length = 16; static char* to_string_dec_uint_internal( @@ -156,7 +170,7 @@ void Widget::set_parent(Widget* const widget) { void Widget::set_dirty() { flags.dirty = true; - dirty_event(); + dirty_set(); } bool Widget::dirty() const { @@ -187,7 +201,7 @@ void Widget::hidden(bool hide) { } void Widget::focus() { - context().focus_manager.set_focus_widget(this); + context().focus_manager().set_focus_widget(this); } void Widget::on_focus() { @@ -195,7 +209,7 @@ void Widget::on_focus() { } void Widget::blur() { - context().focus_manager.set_focus_widget(nullptr); + context().focus_manager().set_focus_widget(nullptr); } void Widget::on_blur() { @@ -207,7 +221,7 @@ bool Widget::focusable() const { } bool Widget::has_focus() { - return (context().focus_manager.focus_widget() == this); + return (context().focus_manager().focus_widget() == this); } Widget* Widget::last_child_focus() const { @@ -291,10 +305,12 @@ void View::paint(Painter& painter) { } void View::add_child(Widget* const widget) { - if( widget->parent() == nullptr ) { - widget->set_parent(this); - children_.push_back(widget); - widget->set_dirty(); + if( widget ) { + if( widget->parent() == nullptr ) { + widget->set_parent(this); + children_.push_back(widget); + widget->set_dirty(); + } } } @@ -305,11 +321,13 @@ void View::add_children(const std::vector& children) { } void View::remove_child(Widget* const widget) { - children_.erase(std::remove(children_.begin(), children_.end(), widget), children_.end()); - dirty_screen_rect += widget->screen_rect(); - widget->set_parent(nullptr); - if( dirty_screen_rect ) { - set_dirty(); + if( widget ) { + children_.erase(std::remove(children_.begin(), children_.end(), widget), children_.end()); + dirty_screen_rect += widget->screen_rect(); + widget->set_parent(nullptr); + if( dirty_screen_rect ) { + set_dirty(); + } } } diff --git a/firmware/common/ui_widget.hpp b/firmware/common/ui_widget.hpp index ca4648a53..9bafe323a 100644 --- a/firmware/common/ui_widget.hpp +++ b/firmware/common/ui_widget.hpp @@ -37,7 +37,9 @@ namespace ui { -extern void dirty_event(); +void dirty_set(); +void dirty_clear(); +bool is_dirty(); // TODO: Move these somewhere else! // TODO: Allow l=0 to not fill/justify? Already using this way in ui_spectrum.hpp... @@ -45,9 +47,19 @@ std::string to_string_dec_uint(const uint32_t n, const int32_t l = 0, const char std::string to_string_dec_int(const int32_t n, const int32_t l = 0, const char fill = 0); std::string to_string_hex(const uint32_t n, const int32_t l = 0); -struct Context { - FocusManager focus_manager; - MessageHandlerMap message_map; +class Context { +public: + FocusManager& focus_manager() { + return focus_manager_; + } + + MessageHandlerMap& message_map() { + return message_map_; + } + +private: + FocusManager focus_manager_; + MessageHandlerMap message_map_; }; class Widget { diff --git a/firmware/common/utility.cpp b/firmware/common/utility.cpp index 857bbb73a..b09cf3577 100644 --- a/firmware/common/utility.cpp +++ b/firmware/common/utility.cpp @@ -19,8 +19,6 @@ * Boston, MA 02110-1301, USA. */ -#include - #include "utility.hpp" #include @@ -115,22 +113,3 @@ static constexpr uint32_t gcd_top(const uint32_t u, const uint32_t v) { uint32_t gcd(const uint32_t u, const uint32_t v) { return gcd_top(u, v); } - -/* Memory management, overriding toolchain new, which uses malloc */ -/* TODO: Move to something like "memory.cpp"! Not utility.cpp. */ - -void* operator new(size_t size) { - return chHeapAlloc(0x0, size); -} - -void* operator new[](size_t size) { - return chHeapAlloc(0x0, size); -} - -void operator delete(void* p) noexcept { - chHeapFree(p); -} - -void operator delete[](void* p) noexcept { - chHeapFree(p); -} diff --git a/firmware/common/utility.hpp b/firmware/common/utility.hpp index 1407f6878..b1d00b65a 100644 --- a/firmware/common/utility.hpp +++ b/firmware/common/utility.hpp @@ -28,10 +28,16 @@ #include #include -#include - #define LOCATE_IN_RAM __attribute__((section(".ramtext"))) +constexpr size_t operator "" _KiB(unsigned long long v) { + return v * 1024; +} + +constexpr size_t operator "" _MiB(unsigned long long v) { + return v * 1024 * 1024; +} + template constexpr typename std::underlying_type::type toUType(E enumerator) noexcept { /* Thanks, Scott Meyers! */ @@ -54,18 +60,6 @@ inline constexpr T pow(const T base, unsigned const exponent) { return (exponent == 0) ? 1 : (base * pow(base, exponent - 1)); } -#if defined(LPC43XX_M4) -static inline bool m4_flag_saturation() { - return __get_APSR() & (1U << 27); -} - -static inline void clear_m4_flag_saturation() { - uint32_t flags = 1; - __asm volatile ("MSR APSR_nzcvqg, %0" : : "r" (flags)); -} - -#endif - float complex16_mag_squared_to_dbv_norm(const float c16_mag_squared); inline float magnitude_squared(const std::complex c) { @@ -76,13 +70,6 @@ inline float magnitude_squared(const std::complex c) { return r2 + i2; } -/* Override new/delete to use Chibi/OS heap functions */ -/* NOTE: Do not inline these, it doesn't work. ;-) */ -void* operator new(size_t size); -void* operator new[](size_t size); -void operator delete(void* p); -void operator delete[](void* p); - namespace std { /*! Stephan T Lavavej (STL!) implementation of make_unique, which has been accepted into the C++14 standard. diff --git a/firmware/common/utility_m4.hpp b/firmware/common/utility_m4.hpp new file mode 100644 index 000000000..e7d98e90f --- /dev/null +++ b/firmware/common/utility_m4.hpp @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2014 Jared Boone, ShareBrained Technology, Inc. + * + * This file is part of PortaPack. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; see the file COPYING. If not, write to + * the Free Software Foundation, Inc., 51 Franklin Street, + * Boston, MA 02110-1301, USA. + */ + +#ifndef __UTILITY_M4_H__ +#define __UTILITY_M4_H__ + +#if defined(LPC43XX_M4) + +#include + +static inline bool m4_flag_saturation() { + return __get_APSR() & (1U << 27); +} + +static inline void clear_m4_flag_saturation() { + uint32_t flags = 1; + __asm volatile ("MSR APSR_nzcvqg, %0" : : "r" (flags)); +} + +static inline complex32_t multiply_conjugate_s16_s32(const complex16_t::rep_type a, const complex16_t::rep_type b) { + // conjugate: conj(a + bj) = a - bj + // multiply: (a + bj) * (c + dj) = (ac - bd) + (bc + ad)j + // conjugate-multiply: (ac + bd) + (bc - ad)j + //return { a.real() * b.real() + a.imag() * b.imag(), a.imag() * b.real() - a.real() * b.imag() }; + const int32_t rr = __SMULBB(a, b); + const int32_t ii = __SMULTT(a, b); + const int32_t r = __QADD(rr, ii); + const int32_t ir = __SMULTB(a, b); + const int32_t ri = __SMULBT(a, b); + const int32_t i = __QSUB(ir, ri); + return { r, i }; +} +#endif /* defined(LPC43XX_M4) */ + +#endif/*__UTILITY_M4_H__*/ diff --git a/firmware/portapack-h1-firmware.bin b/firmware/portapack-h1-firmware.bin index 9be40f827..9241323ff 100644 Binary files a/firmware/portapack-h1-firmware.bin and b/firmware/portapack-h1-firmware.bin differ diff --git a/firmware/tools/make_spi_image.py b/firmware/tools/make_spi_image.py new file mode 100755 index 000000000..646fa59ed --- /dev/null +++ b/firmware/tools/make_spi_image.py @@ -0,0 +1,97 @@ +#!/usr/bin/env python + +# +# Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc. +# +# This file is part of PortaPack. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +import sys + +usage_message = """ +PortaPack SPI flash image generator + +Usage: + Where paths refer to the .bin files for each component project. +""" + +def read_image(path): + f = open(path, 'rb') + data = f.read() + f.close() + return data + +def read_image_from_dfu(path): + data = read_image(path) + # Strip DFU header from file to get binary image. + return data[16:] + +def write_image(data, path): + f = open(path, 'wb') + f.write(data) + f.close() + +if len(sys.argv) != 6: + print(usage_message) + sys.exit(-1) + +bootstrap_image = read_image(sys.argv[1]) +hackrf_image = read_image_from_dfu(sys.argv[2]) +baseband_image = read_image(sys.argv[3]) +application_image = read_image(sys.argv[4]) +output_path = sys.argv[5] + +spi_size = 1048576 + +images = ( + { + 'name': 'bootstrap', + 'data': bootstrap_image, + 'size': 0x10000, + }, + { + 'name': 'hackrf', + 'data': hackrf_image, + 'size': 0x10000, + }, + { + 'name': 'baseband', + 'data': baseband_image, + 'size': 0x20000, + }, + { + 'name': 'application', + 'data': application_image, + 'size': len(application_image), + } +) + +spi_image = bytearray() +spi_image_default_byte = bytearray((255,)) + +for image in images: + if len(image['data']) > image['size']: + raise RuntimeError('data for image "%(name)s" is longer than 0x%(size)x bytes' % image) + pad_size = image['size'] - len(image['data']) + padded_data = image['data'] + (spi_image_default_byte * pad_size) + spi_image += padded_data + +if len(spi_image) > spi_size: + raise RuntimeError('SPI flash image size of %d exceeds device size of %d bytes' % (len(spi_image), spi_size)) + +write_image(spi_image, output_path) diff --git a/hardware/portapack_h1/audio.sch b/hardware/portapack_h1/audio.sch index eb7ac18e2..9dc3a5fc1 100644 --- a/hardware/portapack_h1/audio.sch +++ b/hardware/portapack_h1/audio.sch @@ -3,7 +3,7 @@ LIBS:hackrf_expansion LIBS:wolfson LIBS:passive LIBS:lcd_kingtech -LIBS:power +LIBS:supply LIBS:io_expander LIBS:trs_jack LIBS:battery @@ -19,16 +19,16 @@ LIBS:hole LIBS:sharebrained LIBS:fiducial LIBS:portapack_h1-cache -EELAYER 24 0 +EELAYER 25 0 EELAYER END $Descr A4 11693 8268 encoding utf-8 Sheet 2 4 Title "PortaPack H1" -Date "13 Oct 2014" -Rev "20140826" +Date "21 Aug 2015" +Rev "20150821" Comp "ShareBrained Technology, Inc." -Comment1 "Copyright © 2014 Jared Boone" +Comment1 "Copyright © 2014, 2015 Jared Boone" Comment2 "License: GNU General Public License, version 2" Comment3 "" Comment4 "" @@ -39,7 +39,7 @@ U 1 1 53A8C256 P 7700 3700 F 0 "C18" H 7750 3800 50 0000 L CNN F 1 "220U" H 7750 3600 50 0000 L CNN -F 2 "" H 7700 3700 60 0000 C CNN +F 2 "ipc_capae:IPC_CAPAE830X620N" H 7700 3700 60 0001 C CNN F 3 "" H 7700 3700 60 0000 C CNN F 4 "Nichicon" H 7700 3700 60 0001 C CNN "Mfr" F 5 "UWX1A221MCL1GB" H 7700 3700 60 0001 C CNN "Part" @@ -52,7 +52,7 @@ U 1 1 53A8C25E P 7700 4100 F 0 "C19" H 7750 4200 50 0000 L CNN F 1 "220U" H 7750 4000 50 0000 L CNN -F 2 "" H 7700 4100 60 0000 C CNN +F 2 "ipc_capae:IPC_CAPAE830X620N" H 7700 4100 60 0001 C CNN F 3 "" H 7700 4100 60 0000 C CNN F 4 "Nichicon" H 7700 4100 60 0001 C CNN "Mfr" F 5 "UWX1A221MCL1GB" H 7700 4100 60 0001 C CNN "Part" @@ -65,7 +65,7 @@ U 1 1 53A8C264 P 8000 3350 F 0 "R11" V 8080 3350 50 0000 C CNN F 1 "47K" V 8000 3350 50 0000 C CNN -F 2 "" H 8000 3350 60 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 8000 3350 60 0001 C CNN F 3 "" H 8000 3350 60 0000 C CNN F 4 "Yageo" V 8000 3350 60 0001 C CNN "Mfr" F 5 "RC0603FR-0747KL" V 8000 3350 60 0001 C CNN "Part" @@ -78,7 +78,7 @@ U 1 1 53A8C26A P 8000 4450 F 0 "R12" V 8080 4450 50 0000 C CNN F 1 "47K" V 8000 4450 50 0000 C CNN -F 2 "" H 8000 4450 60 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 8000 4450 60 0001 C CNN F 3 "" H 8000 4450 60 0000 C CNN F 4 "Yageo" V 8000 4450 60 0001 C CNN "Mfr" F 5 "RC0603FR-0747KL" V 8000 4450 60 0001 C CNN "Part" @@ -117,7 +117,7 @@ U 1 1 53A8C27E P 8300 3400 F 0 "C22" H 8350 3500 50 0000 L CNN F 1 "220P" H 8350 3300 50 0000 L CNN -F 2 "" H 8300 3400 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1608X95N" H 8300 3400 60 0001 C CNN F 3 "" H 8300 3400 60 0000 C CNN F 4 "Murata" H 8300 3400 60 0001 C CNN "Mfr" F 5 "GRM1885C1H221JA01" H 8300 3400 60 0001 C CNN "Part" @@ -130,7 +130,7 @@ U 1 1 53A8C284 P 8300 4400 F 0 "C23" H 8350 4500 50 0000 L CNN F 1 "220P" H 8350 4300 50 0000 L CNN -F 2 "" H 8300 4400 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1608X95N" H 8300 4400 60 0001 C CNN F 3 "" H 8300 4400 60 0000 C CNN F 4 "Murata" H 8300 4400 60 0001 C CNN "Mfr" F 5 "GRM1885C1H221JA01" H 8300 4400 60 0001 C CNN "Part" @@ -165,7 +165,7 @@ U 1 1 53A8C296 P 9300 5950 F 0 "R17" V 9380 5950 50 0000 C CNN F 1 "47K" V 9300 5950 50 0000 C CNN -F 2 "" H 9300 5950 60 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 9300 5950 60 0001 C CNN F 3 "" H 9300 5950 60 0000 C CNN F 4 "Yageo" V 9300 5950 60 0001 C CNN "Mfr" F 5 "RC0603FR-0747KL" V 9300 5950 60 0001 C CNN "Part" @@ -178,7 +178,7 @@ U 1 1 53A8C29C P 9650 5600 F 0 "R18" V 9730 5600 50 0000 C CNN F 1 "680R" V 9650 5600 50 0000 C CNN -F 2 "" H 9650 5600 60 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 9650 5600 60 0001 C CNN F 3 "" H 9650 5600 60 0000 C CNN F 4 "Yageo" V 9650 5600 60 0001 C CNN "Mfr" F 5 "RC0603FR-07681RL" V 9650 5600 60 0001 C CNN "Part" @@ -191,7 +191,7 @@ U 1 1 53A8C2A2 P 8800 5900 F 0 "C25" H 8850 6000 50 0000 L CNN F 1 "220P" H 8850 5800 50 0000 L CNN -F 2 "" H 8800 5900 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1608X95N" H 8800 5900 60 0001 C CNN F 3 "" H 8800 5900 60 0000 C CNN F 4 "Murata" H 8800 5900 60 0001 C CNN "Mfr" F 5 "GRM1885C1H221JA01" H 8800 5900 60 0001 C CNN "Part" @@ -204,7 +204,7 @@ U 1 1 53A8C2AA P 8500 5600 F 0 "C24" H 8550 5700 50 0000 L CNN F 1 "1U" H 8550 5500 50 0000 L CNN -F 2 "" H 8500 5600 60 0000 C CNN +F 2 "ipc_capae:IPC_CAPAE430X540N" H 8500 5600 60 0001 C CNN F 3 "" H 8500 5600 60 0000 C CNN F 4 "Kemet" H 8500 5600 60 0001 C CNN "Mfr" F 5 "EDK105M050A9BAA" H 8500 5600 60 0001 C CNN "Part" @@ -217,7 +217,7 @@ U 1 1 53A8C2B0 P 7950 5600 F 0 "R10" V 8030 5600 50 0000 C CNN F 1 "0R" V 7950 5600 50 0000 C CNN -F 2 "" H 7950 5600 60 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 7950 5600 60 0001 C CNN F 3 "" H 7950 5600 60 0000 C CNN F 4 "Yageo" V 7950 5600 60 0001 C CNN "Mfr" F 5 "RC0603JR-070RL" V 7950 5600 60 0001 C CNN "Part" @@ -256,7 +256,7 @@ U 1 1 53A8C2C6 P 9650 4100 F 0 "P2" H 9200 4100 60 0000 C CNN F 1 "TRRS_SW_JACK" H 9450 4350 60 0000 C CNN -F 2 "" H 9650 4100 60 0000 C CNN +F 2 "cui:CUI_SJ-43516-SMT" H 9650 4100 60 0001 C CNN F 3 "" H 9650 4100 60 0000 C CNN F 4 "CUI" H 9650 4100 60 0001 C CNN "Mfr" F 5 "SJ-43514-SMT" H 9650 4100 60 0001 C CNN "Part" @@ -275,36 +275,12 @@ F 3 "" H 9000 5000 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L MIC_ELECTRET X1 -U 1 1 53A8C2D6 -P 9900 5100 -F 0 "X1" H 9900 5350 60 0000 C CNN -F 1 "MIC_ELECTRET" H 9900 4850 60 0000 C CNN -F 2 "DNI" H 9800 5100 60 0000 C CNN -F 3 "" H 9900 5100 60 0000 C CNN -F 4 "CUI" H 9900 5100 60 0001 C CNN "Mfr" -F 5 "CMA-4544PF-W" H 9900 5100 60 0001 C CNN "Part" - 1 9900 5100 - -1 0 0 -1 -$EndComp -$Comp -L GND #PWR09 -U 1 1 53A8C2DC -P 9500 5300 -F 0 "#PWR09" H 9500 5300 30 0001 C CNN -F 1 "GND" H 9500 5230 30 0001 C CNN -F 2 "" H 9500 5300 60 0000 C CNN -F 3 "" H 9500 5300 60 0000 C CNN - 1 9500 5300 - 1 0 0 -1 -$EndComp -$Comp L L L4 U 1 1 53A8C2E2 P 8650 3700 F 0 "L4" V 8600 3700 40 0000 C CNN F 1 "L" V 8750 3700 40 0000 C CNN -F 2 "" H 8650 3700 60 0000 C CNN +F 2 "ipc_indc:IPC_INDC1608X95N" H 8650 3700 60 0001 C CNN F 3 "" H 8650 3700 60 0000 C CNN F 4 "Murata" V 8650 3700 60 0001 C CNN "Mfr" F 5 "BLM18HE152SN1D" V 8650 3700 60 0001 C CNN "Part" @@ -317,7 +293,7 @@ U 1 1 53A8C2E8 P 8650 4100 F 0 "L5" V 8600 4100 40 0000 C CNN F 1 "L" V 8750 4100 40 0000 C CNN -F 2 "" H 8650 4100 60 0000 C CNN +F 2 "ipc_indc:IPC_INDC1608X95N" H 8650 4100 60 0001 C CNN F 3 "" H 8650 4100 60 0000 C CNN F 4 "Murata" V 8650 4100 60 0001 C CNN "Mfr" F 5 "BLM18HE152SN1D" V 8650 4100 60 0001 C CNN "Part" @@ -330,7 +306,7 @@ U 1 1 53A8C2EE P 9000 4650 F 0 "L6" V 8950 4650 40 0000 C CNN F 1 "L" V 9100 4650 40 0000 C CNN -F 2 "" H 9000 4650 60 0000 C CNN +F 2 "ipc_indc:IPC_INDC1608X95N" H 9000 4650 60 0001 C CNN F 3 "" H 9000 4650 60 0000 C CNN F 4 "Murata" V 9000 4650 60 0001 C CNN "Mfr" F 5 "BLM18HE152SN1D" V 9000 4650 60 0001 C CNN "Part" @@ -343,7 +319,7 @@ U 1 1 53A8C2F4 P 9300 4650 F 0 "L9" V 9250 4650 40 0000 C CNN F 1 "L" V 9400 4650 40 0000 C CNN -F 2 "" H 9300 4650 60 0000 C CNN +F 2 "ipc_indc:IPC_INDC1608X95N" H 9300 4650 60 0001 C CNN F 3 "" H 9300 4650 60 0000 C CNN F 4 "Murata" V 9300 4650 60 0001 C CNN "Mfr" F 5 "BLM18HE152SN1D" V 9300 4650 60 0001 C CNN "Part" @@ -356,7 +332,7 @@ U 1 1 53A8C66D P 2600 3850 F 0 "U1" H 2150 4650 60 0000 C CNN F 1 "WM8731SEDS" H 2800 4650 60 0000 C CNN -F 2 "" H 2600 3850 60 0000 C CNN +F 2 "ipc_sop:IPC_SOP65P780X200-28N" H 2600 3850 60 0001 C CNN F 3 "" H 2600 3850 60 0000 C CNN F 4 "Wolfson" H 2600 3850 60 0001 C CNN "Mfr" F 5 "WM8731SEDS/V" H 2600 3850 60 0001 C CNN "Part" @@ -364,10 +340,10 @@ F 5 "WM8731SEDS/V" H 2600 3850 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR010 +L GND #PWR09 U 1 1 53A8C673 P 3400 4500 -F 0 "#PWR010" H 3400 4500 30 0001 C CNN +F 0 "#PWR09" H 3400 4500 30 0001 C CNN F 1 "GND" H 3400 4430 30 0001 C CNN F 2 "" H 3400 4500 60 0000 C CNN F 3 "" H 3400 4500 60 0000 C CNN @@ -375,10 +351,10 @@ F 3 "" H 3400 4500 60 0000 C CNN 0 -1 -1 0 $EndComp $Comp -L GND #PWR011 +L GND #PWR010 U 1 1 53A8C679 P 3400 3200 -F 0 "#PWR011" H 3400 3200 30 0001 C CNN +F 0 "#PWR010" H 3400 3200 30 0001 C CNN F 1 "GND" H 3400 3130 30 0001 C CNN F 2 "" H 3400 3200 60 0000 C CNN F 3 "" H 3400 3200 60 0000 C CNN @@ -386,10 +362,10 @@ F 3 "" H 3400 3200 60 0000 C CNN 0 -1 -1 0 $EndComp $Comp -L GND #PWR012 +L GND #PWR011 U 1 1 53A8C67F P 1800 4200 -F 0 "#PWR012" H 1800 4200 30 0001 C CNN +F 0 "#PWR011" H 1800 4200 30 0001 C CNN F 1 "GND" H 1800 4130 30 0001 C CNN F 2 "" H 1800 4200 60 0000 C CNN F 3 "" H 1800 4200 60 0000 C CNN @@ -404,7 +380,7 @@ U 1 1 53A8C687 P 4900 6200 F 0 "C6" H 4950 6300 50 0000 L CNN F 1 "100N" H 4950 6100 50 0000 L CNN -F 2 "" H 4900 6200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 4900 6200 60 0001 C CNN F 3 "" H 4900 6200 60 0000 C CNN F 4 "Murata" H 4900 6200 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 4900 6200 60 0001 C CNN "Part" @@ -417,7 +393,7 @@ U 1 1 53A8C68D P 5700 6200 F 0 "C10" H 5750 6300 50 0000 L CNN F 1 "100N" H 5750 6100 50 0000 L CNN -F 2 "" H 5700 6200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 5700 6200 60 0001 C CNN F 3 "" H 5700 6200 60 0000 C CNN F 4 "Murata" H 5700 6200 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 5700 6200 60 0001 C CNN "Part" @@ -425,10 +401,10 @@ F 5 "GRM155R61A104KA01" H 5700 6200 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR013 +L GND #PWR012 U 1 1 53A8C693 P 5300 6500 -F 0 "#PWR013" H 5300 6500 30 0001 C CNN +F 0 "#PWR012" H 5300 6500 30 0001 C CNN F 1 "GND" H 5300 6430 30 0001 C CNN F 2 "" H 5300 6500 60 0000 C CNN F 3 "" H 5300 6500 60 0000 C CNN @@ -436,10 +412,10 @@ F 3 "" H 5300 6500 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR014 +L GND #PWR013 U 1 1 53A8C699 P 5700 6500 -F 0 "#PWR014" H 5700 6500 30 0001 C CNN +F 0 "#PWR013" H 5700 6500 30 0001 C CNN F 1 "GND" H 5700 6430 30 0001 C CNN F 2 "" H 5700 6500 60 0000 C CNN F 3 "" H 5700 6500 60 0000 C CNN @@ -452,7 +428,7 @@ U 1 1 53A8C69F P 3500 7100 F 0 "C3" H 3550 7200 50 0000 L CNN F 1 "100N" H 3550 7000 50 0000 L CNN -F 2 "" H 3500 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 3500 7100 60 0001 C CNN F 3 "" H 3500 7100 60 0000 C CNN F 4 "Murata" H 3500 7100 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 3500 7100 60 0001 C CNN "Part" @@ -465,7 +441,7 @@ U 1 1 53A8C6A5 P 3100 7100 F 0 "C2" H 3150 7200 50 0000 L CNN F 1 "100N" H 3150 7000 50 0000 L CNN -F 2 "" H 3100 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 3100 7100 60 0001 C CNN F 3 "" H 3100 7100 60 0000 C CNN F 4 "Murata" H 3100 7100 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 3100 7100 60 0001 C CNN "Part" @@ -478,7 +454,7 @@ U 1 1 53A8C6AB P 4300 7100 F 0 "C5" H 4350 7200 50 0000 L CNN F 1 "100N" H 4350 7000 50 0000 L CNN -F 2 "" H 4300 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 4300 7100 60 0001 C CNN F 3 "" H 4300 7100 60 0000 C CNN F 4 "Murata" H 4300 7100 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 4300 7100 60 0001 C CNN "Part" @@ -491,7 +467,7 @@ U 1 1 53A8C6B1 P 3900 7100 F 0 "C4" H 3950 7200 50 0000 L CNN F 1 "100N" H 3950 7000 50 0000 L CNN -F 2 "" H 3900 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 3900 7100 60 0001 C CNN F 3 "" H 3900 7100 60 0000 C CNN F 4 "Murata" H 3900 7100 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 3900 7100 60 0001 C CNN "Part" @@ -499,10 +475,10 @@ F 5 "GRM155R61A104KA01" H 3900 7100 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR015 +L GND #PWR014 U 1 1 53A8C6B7 P 3100 7400 -F 0 "#PWR015" H 3100 7400 30 0001 C CNN +F 0 "#PWR014" H 3100 7400 30 0001 C CNN F 1 "GND" H 3100 7330 30 0001 C CNN F 2 "" H 3100 7400 60 0000 C CNN F 3 "" H 3100 7400 60 0000 C CNN @@ -510,10 +486,10 @@ F 3 "" H 3100 7400 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR016 +L GND #PWR015 U 1 1 53A8C6BD P 3500 7400 -F 0 "#PWR016" H 3500 7400 30 0001 C CNN +F 0 "#PWR015" H 3500 7400 30 0001 C CNN F 1 "GND" H 3500 7330 30 0001 C CNN F 2 "" H 3500 7400 60 0000 C CNN F 3 "" H 3500 7400 60 0000 C CNN @@ -521,10 +497,10 @@ F 3 "" H 3500 7400 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR017 +L GND #PWR016 U 1 1 53A8C6C3 P 3900 7400 -F 0 "#PWR017" H 3900 7400 30 0001 C CNN +F 0 "#PWR016" H 3900 7400 30 0001 C CNN F 1 "GND" H 3900 7330 30 0001 C CNN F 2 "" H 3900 7400 60 0000 C CNN F 3 "" H 3900 7400 60 0000 C CNN @@ -543,23 +519,15 @@ Text Label 1200 4100 0 60 ~ 0 RHPOUT Text Label 3400 4200 0 60 ~ 0 MICIN -Text Label 3400 4100 0 60 ~ 0 -RLINEIN -Text Label 3400 4000 0 60 ~ 0 -LLINEIN Text Label 3400 4300 0 60 ~ 0 MICBIAS -Text Label 1200 4300 0 60 ~ 0 -LOUT -Text Label 1200 4400 0 60 ~ 0 -ROUT Text Label 3400 3500 0 60 ~ 0 I2S0_MCLK_R $Comp -L GND #PWR018 +L GND #PWR017 U 1 1 53A8C6D8 P 3500 3800 -F 0 "#PWR018" H 3500 3800 30 0001 C CNN +F 0 "#PWR017" H 3500 3800 30 0001 C CNN F 1 "GND" H 3500 3730 30 0001 C CNN F 2 "" H 3500 3800 60 0000 C CNN F 3 "" H 3500 3800 60 0000 C CNN @@ -569,10 +537,10 @@ $EndComp Text Notes 1100 4800 0 60 ~ 0 WM8731 DAI is hi-Z,\n100K PD when disabled $Comp -L GND #PWR019 +L GND #PWR018 U 1 1 53A8C6E9 P 4300 7400 -F 0 "#PWR019" H 4300 7400 30 0001 C CNN +F 0 "#PWR018" H 4300 7400 30 0001 C CNN F 1 "GND" H 4300 7330 30 0001 C CNN F 2 "" H 4300 7400 60 0000 C CNN F 3 "" H 4300 7400 60 0000 C CNN @@ -585,7 +553,7 @@ U 1 1 53A8C6F0 P 6100 6200 F 0 "C12" H 6150 6300 50 0000 L CNN F 1 "10U" H 6150 6100 50 0000 L CNN -F 2 "" H 6100 6200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 6100 6200 60 0001 C CNN F 3 "" H 6100 6200 60 0000 C CNN F 4 "Murata" H 6100 6200 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 6100 6200 60 0001 C CNN "Part" @@ -598,7 +566,7 @@ U 1 1 53A8C6F6 P 5300 6200 F 0 "C8" H 5350 6300 50 0000 L CNN F 1 "10U" H 5350 6100 50 0000 L CNN -F 2 "" H 5300 6200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 5300 6200 60 0001 C CNN F 3 "" H 5300 6200 60 0000 C CNN F 4 "Murata" H 5300 6200 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 5300 6200 60 0001 C CNN "Part" @@ -606,10 +574,10 @@ F 5 "GRM21BR61A106KE19" H 5300 6200 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR020 +L GND #PWR019 U 1 1 53A8C6FC P 6100 6500 -F 0 "#PWR020" H 6100 6500 30 0001 C CNN +F 0 "#PWR019" H 6100 6500 30 0001 C CNN F 1 "GND" H 6100 6430 30 0001 C CNN F 2 "" H 6100 6500 60 0000 C CNN F 3 "" H 6100 6500 60 0000 C CNN @@ -617,10 +585,10 @@ F 3 "" H 6100 6500 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR021 +L GND #PWR020 U 1 1 53A8C702 P 4900 6500 -F 0 "#PWR021" H 4900 6500 30 0001 C CNN +F 0 "#PWR020" H 4900 6500 30 0001 C CNN F 1 "GND" H 4900 6430 30 0001 C CNN F 2 "" H 4900 6500 60 0000 C CNN F 3 "" H 4900 6500 60 0000 C CNN @@ -633,7 +601,7 @@ U 1 1 53A8C708 P 5300 7100 F 0 "C9" H 5350 7200 50 0000 L CNN F 1 "10U" H 5350 7000 50 0000 L CNN -F 2 "" H 5300 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 5300 7100 60 0001 C CNN F 3 "" H 5300 7100 60 0000 C CNN F 4 "Murata" H 5300 7100 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 5300 7100 60 0001 C CNN "Part" @@ -646,7 +614,7 @@ U 1 1 53A8C70E P 4900 7100 F 0 "C7" H 4950 7200 50 0000 L CNN F 1 "10U" H 4950 7000 50 0000 L CNN -F 2 "" H 4900 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 4900 7100 60 0001 C CNN F 3 "" H 4900 7100 60 0000 C CNN F 4 "Murata" H 4900 7100 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 4900 7100 60 0001 C CNN "Part" @@ -654,10 +622,10 @@ F 5 "GRM21BR61A106KE19" H 4900 7100 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR022 +L GND #PWR021 U 1 1 53A8C714 P 6100 7400 -F 0 "#PWR022" H 6100 7400 30 0001 C CNN +F 0 "#PWR021" H 6100 7400 30 0001 C CNN F 1 "GND" H 6100 7330 30 0001 C CNN F 2 "" H 6100 7400 60 0000 C CNN F 3 "" H 6100 7400 60 0000 C CNN @@ -665,10 +633,10 @@ F 3 "" H 6100 7400 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR023 +L GND #PWR022 U 1 1 53A8C71A P 5700 7400 -F 0 "#PWR023" H 5700 7400 30 0001 C CNN +F 0 "#PWR022" H 5700 7400 30 0001 C CNN F 1 "GND" H 5700 7330 30 0001 C CNN F 2 "" H 5700 7400 60 0000 C CNN F 3 "" H 5700 7400 60 0000 C CNN @@ -681,7 +649,7 @@ U 1 1 53A8C720 P 6100 7100 F 0 "C13" H 6150 7200 50 0000 L CNN F 1 "10U" H 6150 7000 50 0000 L CNN -F 2 "" H 6100 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 6100 7100 60 0001 C CNN F 3 "" H 6100 7100 60 0000 C CNN F 4 "Murata" H 6100 7100 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 6100 7100 60 0001 C CNN "Part" @@ -689,10 +657,10 @@ F 5 "GRM21BR61A106KE19" H 6100 7100 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR024 +L GND #PWR023 U 1 1 53A8C726 P 4900 7400 -F 0 "#PWR024" H 4900 7400 30 0001 C CNN +F 0 "#PWR023" H 4900 7400 30 0001 C CNN F 1 "GND" H 4900 7330 30 0001 C CNN F 2 "" H 4900 7400 60 0000 C CNN F 3 "" H 4900 7400 60 0000 C CNN @@ -705,7 +673,7 @@ U 1 1 53A8C72C P 5700 7100 F 0 "C11" H 5750 7200 50 0000 L CNN F 1 "10U" H 5750 7000 50 0000 L CNN -F 2 "" H 5700 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 5700 7100 60 0001 C CNN F 3 "" H 5700 7100 60 0000 C CNN F 4 "Murata" H 5700 7100 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 5700 7100 60 0001 C CNN "Part" @@ -713,10 +681,10 @@ F 5 "GRM21BR61A106KE19" H 5700 7100 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR025 +L GND #PWR024 U 1 1 53A8C732 P 5300 7400 -F 0 "#PWR025" H 5300 7400 30 0001 C CNN +F 0 "#PWR024" H 5300 7400 30 0001 C CNN F 1 "GND" H 5300 7330 30 0001 C CNN F 2 "" H 5300 7400 60 0000 C CNN F 3 "" H 5300 7400 60 0000 C CNN @@ -726,10 +694,10 @@ $EndComp Text Label 3400 4400 0 60 ~ 0 VMID $Comp -L +3.3V #PWR026 +L +3.3V #PWR025 U 1 1 53A8C7B9 P 3100 6700 -F 0 "#PWR026" H 3100 6660 30 0001 C CNN +F 0 "#PWR025" H 3100 6660 30 0001 C CNN F 1 "+3.3V" H 3100 6810 30 0000 C CNN F 2 "" H 3100 6700 60 0000 C CNN F 3 "" H 3100 6700 60 0000 C CNN @@ -770,402 +738,19 @@ U 1 1 53AB09AD P 2000 1250 F 0 "RP1" H 2000 1500 60 0000 C CNN F 1 "220R" H 2000 1000 60 0000 C CNN -F 2 "" H 2000 1250 60 0000 C CNN +F 2 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 2000 1250 60 0001 C CNN F 3 "" H 2000 1250 60 0000 C CNN F 4 "Panasonic" H 2000 1250 60 0001 C CNN "Mfr" F 5 "EXB-38V221JV" H 2000 1250 60 0001 C CNN "Part" 1 2000 1250 1 0 0 -1 $EndComp -$Comp -L TRS_JACK P1 -U 1 1 53AF0914 -P 3900 1600 -F 0 "P1" H 3450 1600 60 0000 C CNN -F 1 "TRS_JACK" H 3800 1850 60 0000 C CNN -F 2 "DNI" H 3450 1700 60 0000 C CNN -F 3 "" H 3900 1600 60 0000 C CNN -F 4 "Switchcraft" H 3900 1600 60 0001 C CNN "Mfr" -F 5 "35RASMT2BHNTRX" H 3900 1600 60 0001 C CNN "Part" - 1 3900 1600 - 1 0 0 1 -$EndComp -$Comp -L TRS_JACK P3 -U 1 1 53AF0926 -P 10300 1600 -F 0 "P3" H 9850 1600 60 0000 C CNN -F 1 "TRS_JACK" H 10200 1850 60 0000 C CNN -F 2 "DNI" H 9850 1700 60 0000 C CNN -F 3 "" H 10300 1600 60 0000 C CNN -F 4 "Switchcraft" H 10300 1600 60 0001 C CNN "Mfr" -F 5 "35RASMT2BHNTRX" H 10300 1600 60 0001 C CNN "Part" - 1 10300 1600 - -1 0 0 1 -$EndComp -$Comp -L L L10 -U 1 1 53AF0931 -P 9900 2150 -F 0 "L10" V 9850 2150 40 0000 C CNN -F 1 "L" V 10000 2150 40 0000 C CNN -F 2 "DNI" V 9750 2150 60 0000 C CNN -F 3 "" H 9900 2150 60 0000 C CNN -F 4 "Murata" V 9900 2150 60 0001 C CNN "Mfr" -F 5 "BLM18HE152SN1D" V 9900 2150 60 0001 C CNN "Part" - 1 9900 2150 - 1 0 0 -1 -$EndComp -$Comp -L L L1 -U 1 1 53AF093C -P 4300 2150 -F 0 "L1" V 4250 2150 40 0000 C CNN -F 1 "L" V 4400 2150 40 0000 C CNN -F 2 "DNI" V 4150 2150 60 0000 C CNN -F 3 "" H 4300 2150 60 0000 C CNN -F 4 "Murata" V 4300 2150 60 0001 C CNN "Mfr" -F 5 "BLM18HE152SN1D" V 4300 2150 60 0001 C CNN "Part" - 1 4300 2150 - 1 0 0 -1 -$EndComp -$Comp -L GND #PWR027 -U 1 1 53AF0951 -P 4300 2500 -F 0 "#PWR027" H 4300 2500 30 0001 C CNN -F 1 "GND" H 4300 2430 30 0001 C CNN -F 2 "" H 4300 2500 60 0000 C CNN -F 3 "" H 4300 2500 60 0000 C CNN - 1 4300 2500 - 1 0 0 -1 -$EndComp -$Comp -L GND #PWR028 -U 1 1 53AF095C -P 9900 2500 -F 0 "#PWR028" H 9900 2500 30 0001 C CNN -F 1 "GND" H 9900 2430 30 0001 C CNN -F 2 "" H 9900 2500 60 0000 C CNN -F 3 "" H 9900 2500 60 0000 C CNN - 1 9900 2500 - 1 0 0 -1 -$EndComp -$Comp -L R R7 -U 1 1 53AF0B74 -P 5350 1800 -F 0 "R7" V 5430 1800 50 0000 C CNN -F 1 "5K6" V 5350 1800 50 0000 C CNN -F 2 "DNI" V 5250 1800 60 0000 C CNN -F 3 "" H 5350 1800 60 0000 C CNN -F 4 "Yageo" V 5350 1800 60 0001 C CNN "Mfr" -F 5 "RC0603FR-075K6L" V 5350 1800 60 0001 C CNN "Part" - 1 5350 1800 - 0 1 -1 0 -$EndComp -$Comp -L R R6 -U 1 1 53AF0B7F -P 5350 1400 -F 0 "R6" V 5430 1400 50 0000 C CNN -F 1 "5K6" V 5350 1400 50 0000 C CNN -F 2 "DNI" V 5250 1400 60 0000 C CNN -F 3 "" H 5350 1400 60 0000 C CNN -F 4 "Yageo" V 5350 1400 60 0001 C CNN "Mfr" -F 5 "RC0603FR-075K6L" V 5350 1400 60 0001 C CNN "Part" - 1 5350 1400 - 0 1 -1 0 -$EndComp -$Comp -L R R8 -U 1 1 53AF0B8A -P 5700 1050 -F 0 "R8" V 5780 1050 50 0000 C CNN -F 1 "5K6" V 5700 1050 50 0000 C CNN -F 2 "DNI" V 5600 1050 60 0000 C CNN -F 3 "" H 5700 1050 60 0000 C CNN -F 4 "Yageo" V 5700 1050 60 0001 C CNN "Mfr" -F 5 "RC0603FR-075K6L" V 5700 1050 60 0001 C CNN "Part" - 1 5700 1050 - -1 0 0 -1 -$EndComp -$Comp -L R R9 -U 1 1 53AF0B95 -P 5700 2150 -F 0 "R9" V 5780 2150 50 0000 C CNN -F 1 "5K6" V 5700 2150 50 0000 C CNN -F 2 "DNI" V 5600 2150 60 0000 C CNN -F 3 "" H 5700 2150 60 0000 C CNN -F 4 "Yageo" V 5700 2150 60 0001 C CNN "Mfr" -F 5 "RC0603FR-075K6L" V 5700 2150 60 0001 C CNN "Part" - 1 5700 2150 - -1 0 0 -1 -$EndComp -$Comp -L GND #PWR029 -U 1 1 53AF0BA0 -P 5700 2500 -F 0 "#PWR029" H 5700 2500 30 0001 C CNN -F 1 "GND" H 5700 2430 30 0001 C CNN -F 2 "" H 5700 2500 60 0000 C CNN -F 3 "" H 5700 2500 60 0000 C CNN - 1 5700 2500 - 1 0 0 -1 -$EndComp -$Comp -L GND #PWR030 -U 1 1 53AF0BAB -P 5700 700 -F 0 "#PWR030" H 5700 700 30 0001 C CNN -F 1 "GND" H 5700 630 30 0001 C CNN -F 2 "" H 5700 700 60 0000 C CNN -F 3 "" H 5700 700 60 0000 C CNN - 1 5700 700 - -1 0 0 1 -$EndComp -$Comp -L C C15 -U 1 1 53AF112C -P 6000 2100 -F 0 "C15" H 6050 2200 50 0000 L CNN -F 1 "220P" H 6050 2000 50 0000 L CNN -F 2 "DNI" H 6200 2100 60 0000 C CNN -F 3 "" H 6000 2100 60 0000 C CNN -F 4 "Murata" H 6000 2100 60 0001 C CNN "Mfr" -F 5 "GRM1885C1H221JA01" H 6000 2100 60 0001 C CNN "Part" - 1 6000 2100 - 1 0 0 -1 -$EndComp -$Comp -L C C14 -U 1 1 53AF1137 -P 6000 1100 -F 0 "C14" H 6050 1200 50 0000 L CNN -F 1 "220P" H 6050 1000 50 0000 L CNN -F 2 "DNI" H 6200 1100 60 0000 C CNN -F 3 "" H 6000 1100 60 0000 C CNN -F 4 "Murata" H 6000 1100 60 0001 C CNN "Mfr" -F 5 "GRM1885C1H221JA01" H 6000 1100 60 0001 C CNN "Part" - 1 6000 1100 - 1 0 0 -1 -$EndComp -$Comp -L GND #PWR031 -U 1 1 53AF1142 -P 6000 800 -F 0 "#PWR031" H 6000 800 30 0001 C CNN -F 1 "GND" H 6000 730 30 0001 C CNN -F 2 "" H 6000 800 60 0000 C CNN -F 3 "" H 6000 800 60 0000 C CNN - 1 6000 800 - -1 0 0 1 -$EndComp -$Comp -L GND #PWR032 -U 1 1 53AF114D -P 6000 2400 -F 0 "#PWR032" H 6000 2400 30 0001 C CNN -F 1 "GND" H 6000 2330 30 0001 C CNN -F 2 "" H 6000 2400 60 0000 C CNN -F 3 "" H 6000 2400 60 0000 C CNN - 1 6000 2400 - 1 0 0 -1 -$EndComp -$Comp -L CP C16 -U 1 1 53AF15D9 -P 6400 1400 -F 0 "C16" H 6450 1500 50 0000 L CNN -F 1 "1U" H 6450 1300 50 0000 L CNN -F 2 "DNI" H 6300 1500 60 0000 C CNN -F 3 "" H 6400 1400 60 0000 C CNN -F 4 "Kemet" H 6400 1400 60 0001 C CNN "Mfr" -F 5 "EDK105M050A9BAA" H 6400 1400 60 0001 C CNN "Part" - 1 6400 1400 - 0 1 1 0 -$EndComp -$Comp -L CP C17 -U 1 1 53AF15E8 -P 6400 1800 -F 0 "C17" H 6450 1900 50 0000 L CNN -F 1 "1U" H 6450 1700 50 0000 L CNN -F 2 "DNI" H 6300 1900 60 0000 C CNN -F 3 "" H 6400 1800 60 0000 C CNN -F 4 "Kemet" H 6400 1800 60 0001 C CNN "Mfr" -F 5 "EDK105M050A9BAA" H 6400 1800 60 0001 C CNN "Part" - 1 6400 1800 - 0 1 1 0 -$EndComp -Text Label 6700 1400 0 60 ~ 0 -LLINEIN -Text Label 6700 1800 0 60 ~ 0 -RLINEIN -$Comp -L L L2 -U 1 1 53AF20F3 -P 4750 1400 -F 0 "L2" V 4700 1400 40 0000 C CNN -F 1 "L" V 4850 1400 40 0000 C CNN -F 2 "DNI" V 4600 1400 60 0000 C CNN -F 3 "" H 4750 1400 60 0000 C CNN -F 4 "Murata" V 4750 1400 60 0001 C CNN "Mfr" -F 5 "BLM18HE152SN1D" V 4750 1400 60 0001 C CNN "Part" - 1 4750 1400 - 0 1 1 0 -$EndComp -$Comp -L L L3 -U 1 1 53AF20FE -P 4750 1800 -F 0 "L3" V 4700 1800 40 0000 C CNN -F 1 "L" V 4850 1800 40 0000 C CNN -F 2 "DNI" V 4600 1800 60 0000 C CNN -F 3 "" H 4750 1800 60 0000 C CNN -F 4 "Murata" V 4750 1800 60 0001 C CNN "Mfr" -F 5 "BLM18HE152SN1D" V 4750 1800 60 0001 C CNN "Part" - 1 4750 1800 - 0 1 1 0 -$EndComp -$Comp -L L L7 -U 1 1 53AF25CC -P 9450 1400 -F 0 "L7" V 9400 1400 40 0000 C CNN -F 1 "L" V 9550 1400 40 0000 C CNN -F 2 "DNI" V 9300 1400 60 0000 C CNN -F 3 "" H 9450 1400 60 0000 C CNN -F 4 "Murata" V 9450 1400 60 0001 C CNN "Mfr" -F 5 "BLM18HE152SN1D" V 9450 1400 60 0001 C CNN "Part" - 1 9450 1400 - 0 1 1 0 -$EndComp -$Comp -L L L8 -U 1 1 53AF25D7 -P 9450 1800 -F 0 "L8" V 9400 1800 40 0000 C CNN -F 1 "L" V 9550 1800 40 0000 C CNN -F 2 "DNI" V 9300 1800 60 0000 C CNN -F 3 "" H 9450 1800 60 0000 C CNN -F 4 "Murata" V 9450 1800 60 0001 C CNN "Mfr" -F 5 "BLM18HE152SN1D" V 9450 1800 60 0001 C CNN "Part" - 1 9450 1800 - 0 1 1 0 -$EndComp -$Comp -L R R15 -U 1 1 53AF2725 -P 8850 1400 -F 0 "R15" V 8930 1400 50 0000 C CNN -F 1 "100R" V 8850 1400 50 0000 C CNN -F 2 "DNI" V 8750 1400 60 0000 C CNN -F 3 "" H 8850 1400 60 0000 C CNN -F 4 "Yageo" V 8850 1400 60 0001 C CNN "Mfr" -F 5 "RC0603FR-07100RL" V 8850 1400 60 0001 C CNN "Part" - 1 8850 1400 - 0 1 -1 0 -$EndComp -$Comp -L R R16 -U 1 1 53AF2730 -P 8850 1800 -F 0 "R16" V 8930 1800 50 0000 C CNN -F 1 "100R" V 8850 1800 50 0000 C CNN -F 2 "DNI" V 8750 1800 60 0000 C CNN -F 3 "" H 8850 1800 60 0000 C CNN -F 4 "Yageo" V 8850 1800 60 0001 C CNN "Mfr" -F 5 "RC0603FR-07100RL" V 8850 1800 60 0001 C CNN "Part" - 1 8850 1800 - 0 1 -1 0 -$EndComp -$Comp -L R R14 -U 1 1 53AF273B -P 8500 2150 -F 0 "R14" V 8580 2150 50 0000 C CNN -F 1 "47K" V 8500 2150 50 0000 C CNN -F 2 "DNI" V 8400 2150 60 0000 C CNN -F 3 "" H 8500 2150 60 0000 C CNN -F 4 "Yageo" V 8500 2150 60 0001 C CNN "Mfr" -F 5 "RC0603FR-0747KL" V 8500 2150 60 0001 C CNN "Part" - 1 8500 2150 - -1 0 0 -1 -$EndComp -$Comp -L R R13 -U 1 1 53AF2746 -P 8500 1050 -F 0 "R13" V 8580 1050 50 0000 C CNN -F 1 "47K" V 8500 1050 50 0000 C CNN -F 2 "DNI" V 8400 1050 60 0000 C CNN -F 3 "" H 8500 1050 60 0000 C CNN -F 4 "Yageo" V 8500 1050 60 0001 C CNN "Mfr" -F 5 "RC0603FR-0747KL" V 8500 1050 60 0001 C CNN "Part" - 1 8500 1050 - -1 0 0 -1 -$EndComp -$Comp -L CP C21 -U 1 1 53AF2753 -P 8200 1800 -F 0 "C21" H 8250 1900 50 0000 L CNN -F 1 "10U" H 8250 1700 50 0000 L CNN -F 2 "DNI" H 8100 1700 60 0000 C CNN -F 3 "" H 8200 1800 60 0000 C CNN -F 4 "Kemet" H 8200 1800 60 0001 C CNN "Mfr" -F 5 "EDK106M025A9BAA" H 8200 1800 60 0001 C CNN "Part" - 1 8200 1800 - 0 -1 -1 0 -$EndComp -$Comp -L CP C20 -U 1 1 53AF2762 -P 8200 1400 -F 0 "C20" H 8250 1500 50 0000 L CNN -F 1 "10U" H 8250 1300 50 0000 L CNN -F 2 "DNI" H 8100 1300 60 0000 C CNN -F 3 "" H 8200 1400 60 0000 C CNN -F 4 "Kemet" H 8200 1400 60 0001 C CNN "Mfr" -F 5 "EDK106M025A9BAA" H 8200 1400 60 0001 C CNN "Part" - 1 8200 1400 - 0 -1 -1 0 -$EndComp -$Comp -L GND #PWR033 -U 1 1 53AF2B94 -P 8500 700 -F 0 "#PWR033" H 8500 700 30 0001 C CNN -F 1 "GND" H 8500 630 30 0001 C CNN -F 2 "" H 8500 700 60 0000 C CNN -F 3 "" H 8500 700 60 0000 C CNN - 1 8500 700 - -1 0 0 1 -$EndComp -$Comp -L GND #PWR034 -U 1 1 53AF2B9F -P 8500 2500 -F 0 "#PWR034" H 8500 2500 30 0001 C CNN -F 1 "GND" H 8500 2430 30 0001 C CNN -F 2 "" H 8500 2500 60 0000 C CNN -F 3 "" H 8500 2500 60 0000 C CNN - 1 8500 2500 - 1 0 0 -1 -$EndComp -Text Label 7600 1400 0 60 ~ 0 -LOUT -Text Label 7600 1800 0 60 ~ 0 -ROUT Wire Wire Line 9300 4300 9300 4400 Wire Wire Line 9400 4300 9300 4300 Wire Wire Line 9000 4900 9000 5000 -Connection ~ 9300 5000 Wire Wire Line 9000 4200 9000 4400 Wire Wire Line @@ -1178,14 +763,8 @@ Wire Wire Line 9400 3800 9000 3800 Wire Wire Line 8900 4100 9400 4100 -Wire Wire Line - 9600 5000 9300 5000 Wire Wire Line 8700 5600 9400 5600 -Wire Wire Line - 9500 5200 9500 5300 -Wire Wire Line - 9600 5200 9500 5200 Connection ~ 9300 5600 Connection ~ 8800 5600 Wire Wire Line @@ -1241,16 +820,8 @@ Wire Wire Line 3300 3800 3500 3800 Wire Wire Line 3300 3900 3400 3900 -Wire Wire Line - 1100 4400 1900 4400 -Wire Wire Line - 1100 4300 1900 4300 Wire Wire Line 4100 4200 3300 4200 -Wire Wire Line - 4100 4100 3300 4100 -Wire Wire Line - 4100 4000 3300 4000 Wire Wire Line 1100 4100 1900 4100 Wire Wire Line @@ -1334,96 +905,6 @@ Wire Wire Line 3300 4300 4100 4300 Wire Wire Line 4900 5900 5300 5900 -Wire Wire Line - 10000 1800 9900 1800 -Wire Wire Line - 9900 1800 9900 1900 -Wire Wire Line - 9900 2400 9900 2500 -Wire Wire Line - 4300 2400 4300 2500 -Wire Wire Line - 4200 1800 4300 1800 -Wire Wire Line - 4300 1800 4300 1900 -Wire Wire Line - 5600 1800 6200 1800 -Wire Wire Line - 5700 1800 5700 1900 -Wire Wire Line - 5600 1400 6200 1400 -Wire Wire Line - 5700 1400 5700 1300 -Wire Wire Line - 5700 2400 5700 2500 -Wire Wire Line - 5700 800 5700 700 -Wire Wire Line - 6000 2300 6000 2400 -Wire Wire Line - 6000 1800 6000 1900 -Connection ~ 5700 1800 -Wire Wire Line - 6000 1400 6000 1300 -Connection ~ 5700 1400 -Wire Wire Line - 6000 900 6000 800 -Wire Wire Line - 4200 1700 4400 1700 -Wire Wire Line - 4400 1700 4400 1800 -Wire Wire Line - 4200 1500 4400 1500 -Wire Wire Line - 4400 1500 4400 1400 -Connection ~ 6000 1800 -Connection ~ 6000 1400 -Wire Wire Line - 7100 1400 6600 1400 -Wire Wire Line - 7100 1800 6600 1800 -Wire Wire Line - 4400 1400 4500 1400 -Wire Wire Line - 5000 1400 5100 1400 -Wire Wire Line - 4400 1800 4500 1800 -Wire Wire Line - 5000 1800 5100 1800 -Wire Wire Line - 10000 1700 9800 1700 -Wire Wire Line - 9800 1700 9800 1800 -Wire Wire Line - 9800 1800 9700 1800 -Wire Wire Line - 10000 1500 9800 1500 -Wire Wire Line - 9800 1500 9800 1400 -Wire Wire Line - 9800 1400 9700 1400 -Wire Wire Line - 9200 1400 9100 1400 -Wire Wire Line - 9200 1800 9100 1800 -Wire Wire Line - 8400 1800 8600 1800 -Wire Wire Line - 8500 1800 8500 1900 -Wire Wire Line - 8400 1400 8600 1400 -Wire Wire Line - 8500 1400 8500 1300 -Connection ~ 8500 1400 -Connection ~ 8500 1800 -Wire Wire Line - 8500 2400 8500 2500 -Wire Wire Line - 8500 800 8500 700 -Wire Wire Line - 7500 1400 8000 1400 -Wire Wire Line - 7500 1800 8000 1800 Wire Wire Line 8300 4100 8300 4200 Connection ~ 8300 4100 @@ -1458,10 +939,10 @@ Wire Wire Line 6100 6800 6100 6900 Connection ~ 5700 6800 $Comp -L +3.3V #PWR035 +L +3.3V #PWR026 U 1 1 53BC2346 P 3500 3300 -F 0 "#PWR035" H 3500 3260 30 0001 C CNN +F 0 "#PWR026" H 3500 3260 30 0001 C CNN F 1 "+3.3V" H 3500 3410 30 0000 C CNN F 2 "" H 3500 3300 60 0000 C CNN F 3 "" H 3500 3300 60 0000 C CNN @@ -1469,10 +950,10 @@ F 3 "" H 3500 3300 60 0000 C CNN 0 1 1 0 $EndComp $Comp -L +3.3V #PWR036 +L +3.3V #PWR027 U 1 1 53BC2351 P 1800 3200 -F 0 "#PWR036" H 1800 3160 30 0001 C CNN +F 0 "#PWR027" H 1800 3160 30 0001 C CNN F 1 "+3.3V" H 1800 3310 30 0000 C CNN F 2 "" H 1800 3200 60 0000 C CNN F 3 "" H 1800 3200 60 0000 C CNN @@ -1480,10 +961,10 @@ F 3 "" H 1800 3200 60 0000 C CNN 0 -1 -1 0 $EndComp $Comp -L +3.3V #PWR037 +L +3.3V #PWR028 U 1 1 53BC235C P 1800 3900 -F 0 "#PWR037" H 1800 3860 30 0001 C CNN +F 0 "#PWR028" H 1800 3860 30 0001 C CNN F 1 "+3.3V" H 1800 4010 30 0000 C CNN F 2 "" H 1800 3900 60 0000 C CNN F 3 "" H 1800 3900 60 0000 C CNN @@ -1491,14 +972,18 @@ F 3 "" H 1800 3900 60 0000 C CNN 0 -1 -1 0 $EndComp $Comp -L +3.3V #PWR038 +L +3.3V #PWR029 U 1 1 53BC2367 P 1800 4500 -F 0 "#PWR038" H 1800 4460 30 0001 C CNN +F 0 "#PWR029" H 1800 4460 30 0001 C CNN F 1 "+3.3V" H 1800 4610 30 0000 C CNN F 2 "" H 1800 4500 60 0000 C CNN F 3 "" H 1800 4500 60 0000 C CNN 1 1800 4500 0 -1 -1 0 $EndComp +NoConn ~ 3300 4000 +NoConn ~ 3300 4100 +NoConn ~ 1900 4300 +NoConn ~ 1900 4400 $EndSCHEMATC diff --git a/hardware/portapack_h1/cpld/portapack_h1_cpld.qsf b/hardware/portapack_h1/cpld/portapack_h1_cpld.qsf index 0af980abf..b9cec13a8 100644 --- a/hardware/portapack_h1/cpld/portapack_h1_cpld.qsf +++ b/hardware/portapack_h1/cpld/portapack_h1_cpld.qsf @@ -166,10 +166,6 @@ set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SW_U set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SW_ROT_B set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SW_SEL set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to SW_ROT_A -set_location_assignment PIN_31 -to MCU_ROT_A -set_location_assignment PIN_30 -to MCU_ROT_B -set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to MCU_ROT_A -set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to MCU_ROT_B set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to LCD_DB[15] set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to LCD_DB[14] set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to LCD_DB[13] @@ -201,8 +197,6 @@ set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_D[2 set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_D[1] set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_D[0] set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_DIR -set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_ROT_A -set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_ROT_B set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to SW_D set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to SW_L set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to SW_R @@ -245,8 +239,6 @@ set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_D[2] set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_D[1] set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_D[0] set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_DIR -set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_ROT_A -set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_ROT_B set_instance_assignment -name SLOW_SLEW_RATE ON -to SW_D set_instance_assignment -name SLOW_SLEW_RATE ON -to SW_L set_instance_assignment -name SLOW_SLEW_RATE ON -to SW_R @@ -268,11 +260,10 @@ set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to LCD_BACKLIGHT set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to LCD_BACKLIGHT set_instance_assignment -name SLOW_SLEW_RATE ON -to LCD_BACKLIGHT set_instance_assignment -name PCI_IO OFF -to LCD_BACKLIGHT -set_location_assignment PIN_34 -to MCU_LCD_RD +set_location_assignment PIN_30 -to MCU_LCD_RD set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to MCU_LCD_RD set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_LCD_RD set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_LCD_RD -set_instance_assignment -name PCI_IO OFF -to MCU_LCD_RD set_location_assignment PIN_40 -to MCU_LCD_WR set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to MCU_LCD_WR set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_LCD_WR @@ -285,4 +276,13 @@ set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_IO_STBX set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to TP_R set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to TP_D set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to TP_L -set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to TP_U \ No newline at end of file +set_instance_assignment -name WEAK_PULL_UP_RESISTOR ON -to TP_U +set_location_assignment PIN_31 -to MCU_LCD_TE +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to MCU_LCD_TE +set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_LCD_TE +set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_LCD_TE +set_location_assignment PIN_34 -to MCU_P2_8 +set_instance_assignment -name IO_STANDARD "3.3-V LVCMOS" -to MCU_P2_8 +set_instance_assignment -name CURRENT_STRENGTH_NEW "MINIMUM CURRENT" -to MCU_P2_8 +set_instance_assignment -name SLOW_SLEW_RATE ON -to MCU_P2_8 +set_instance_assignment -name PCI_IO OFF -to MCU_P2_8 \ No newline at end of file diff --git a/hardware/portapack_h1/cpld/top.vhd b/hardware/portapack_h1/cpld/top.vhd index 57554bd6e..943707eaf 100644 --- a/hardware/portapack_h1/cpld/top.vhd +++ b/hardware/portapack_h1/cpld/top.vhd @@ -28,9 +28,9 @@ entity top is MCU_IO_STBX : in std_logic; MCU_LCD_WR : in std_logic; MCU_ADDR : in std_logic; - MCU_ROT_A : out std_logic; - MCU_ROT_B : out std_logic; - MCU_LCD_RD : in std_logic; + MCU_LCD_TE : out std_logic; + MCU_P2_8 : in std_logic; + MCU_LCD_RD : in std_logic; TP_U : out std_logic; TP_D : out std_logic; @@ -102,8 +102,7 @@ begin LCD_BACKLIGHT <= lcd_backlight_q; - MCU_ROT_A <= LCD_TE; -- not SW_ROT_A; - MCU_ROT_B <= '0'; -- not SW_ROT_B; + MCU_LCD_TE <= LCD_TE; -- State management data_dir <= to_mcu when MCU_DIR = '1' else from_mcu; @@ -112,10 +111,8 @@ begin io_strobe <= (MCU_IO_STBX = '0'); io_read_strobe <= io_strobe and dir_read; - io_write_strobe <= io_strobe and dir_write; lcd_read_strobe <= (MCU_LCD_RD = '1'); - lcd_write_strobe <= (MCU_LCD_WR = '1'); lcd_write <= not lcd_read_strobe; -- LCD interface diff --git a/hardware/portapack_h1/hackrf_if.sch b/hardware/portapack_h1/hackrf_if.sch index 77a91a73c..bca7df99c 100644 --- a/hardware/portapack_h1/hackrf_if.sch +++ b/hardware/portapack_h1/hackrf_if.sch @@ -3,7 +3,7 @@ LIBS:hackrf_expansion LIBS:wolfson LIBS:passive LIBS:lcd_kingtech -LIBS:power +LIBS:supply LIBS:io_expander LIBS:trs_jack LIBS:battery @@ -19,626 +19,622 @@ LIBS:hole LIBS:sharebrained LIBS:fiducial LIBS:portapack_h1-cache -EELAYER 24 0 +EELAYER 25 0 EELAYER END $Descr A4 11693 8268 encoding utf-8 Sheet 4 4 Title "PortaPack H1" -Date "13 Oct 2014" -Rev "20140826" +Date "21 Aug 2015" +Rev "20150821" Comp "ShareBrained Technology, Inc." -Comment1 "Copyright © 2014 Jared Boone" +Comment1 "Copyright © 2014, 2015 Jared Boone" Comment2 "License: GNU General Public License, version 2" Comment3 "" Comment4 "" $EndDescr Text Label 1300 2600 0 60 ~ 0 -P2_4 +MCU_LCD_RD +$Comp +L GND #PWR050 +U 1 1 53A8CD34 +P 3700 4200 +F 0 "#PWR050" H 3700 4200 30 0001 C CNN +F 1 "GND" H 3700 4130 30 0001 C CNN +F 2 "" H 3700 4200 60 0000 C CNN +F 3 "" H 3700 4200 60 0000 C CNN + 1 3700 4200 + 0 -1 -1 0 +$EndComp +$Comp +L GND #PWR051 +U 1 1 53A8CD3A +P 3700 4700 +F 0 "#PWR051" H 3700 4700 30 0001 C CNN +F 1 "GND" H 3700 4630 30 0001 C CNN +F 2 "" H 3700 4700 60 0000 C CNN +F 3 "" H 3700 4700 60 0000 C CNN + 1 3700 4700 + 0 -1 -1 0 +$EndComp +$Comp +L GND #PWR052 +U 1 1 53A8CD40 +P 3700 3200 +F 0 "#PWR052" H 3700 3200 30 0001 C CNN +F 1 "GND" H 3700 3130 30 0001 C CNN +F 2 "" H 3700 3200 60 0000 C CNN +F 3 "" H 3700 3200 60 0000 C CNN + 1 3700 3200 + 0 -1 -1 0 +$EndComp +$Comp +L GND #PWR053 +U 1 1 53A8CD46 +P 3700 2800 +F 0 "#PWR053" H 3700 2800 30 0001 C CNN +F 1 "GND" H 3700 2730 30 0001 C CNN +F 2 "" H 3700 2800 60 0000 C CNN +F 3 "" H 3700 2800 60 0000 C CNN + 1 3700 2800 + 0 -1 -1 0 +$EndComp +$Comp +L GND #PWR054 +U 1 1 53A8CD4C +P 3700 2500 +F 0 "#PWR054" H 3700 2500 30 0001 C CNN +F 1 "GND" H 3700 2430 30 0001 C CNN +F 2 "" H 3700 2500 60 0000 C CNN +F 3 "" H 3700 2500 60 0000 C CNN + 1 3700 2500 + 0 -1 -1 0 +$EndComp +$Comp +L +3.3V #PWR055 +U 1 1 53A8CD52 +P 1900 2900 +F 0 "#PWR055" H 1900 2860 30 0001 C CNN +F 1 "+3.3V" H 1900 3010 30 0000 C CNN +F 2 "" H 1900 2900 60 0000 C CNN +F 3 "" H 1900 2900 60 0000 C CNN + 1 1900 2900 + 0 -1 -1 0 +$EndComp +$Comp +L +3.3V #PWR056 +U 1 1 53A8CD58 +P 1900 4200 +F 0 "#PWR056" H 1900 4160 30 0001 C CNN +F 1 "+3.3V" H 1900 4310 30 0000 C CNN +F 2 "" H 1900 4200 60 0000 C CNN +F 3 "" H 1900 4200 60 0000 C CNN + 1 1900 4200 + 0 -1 -1 0 +$EndComp +$Comp +L +3.3V #PWR057 +U 1 1 53A8CD5E +P 1900 900 +F 0 "#PWR057" H 1900 860 30 0001 C CNN +F 1 "+3.3V" H 1900 1010 30 0000 C CNN +F 2 "" H 1900 900 60 0000 C CNN +F 3 "" H 1900 900 60 0000 C CNN + 1 1900 900 + 0 -1 -1 0 +$EndComp +$Comp +L GND #PWR058 +U 1 1 53A8CD64 +P 1900 1400 +F 0 "#PWR058" H 1900 1400 30 0001 C CNN +F 1 "GND" H 1900 1330 30 0001 C CNN +F 2 "" H 1900 1400 60 0000 C CNN +F 3 "" H 1900 1400 60 0000 C CNN + 1 1900 1400 + 0 1 1 0 +$EndComp $Comp L GND #PWR059 -U 1 1 53A8CD34 -P 3500 4200 -F 0 "#PWR059" H 3500 4200 30 0001 C CNN -F 1 "GND" H 3500 4130 30 0001 C CNN -F 2 "" H 3500 4200 60 0000 C CNN -F 3 "" H 3500 4200 60 0000 C CNN - 1 3500 4200 - 0 -1 -1 0 +U 1 1 53A8CD6A +P 1900 1500 +F 0 "#PWR059" H 1900 1500 30 0001 C CNN +F 1 "GND" H 1900 1430 30 0001 C CNN +F 2 "" H 1900 1500 60 0000 C CNN +F 3 "" H 1900 1500 60 0000 C CNN + 1 1900 1500 + 0 1 1 0 $EndComp $Comp L GND #PWR060 -U 1 1 53A8CD3A -P 3500 4700 -F 0 "#PWR060" H 3500 4700 30 0001 C CNN -F 1 "GND" H 3500 4630 30 0001 C CNN -F 2 "" H 3500 4700 60 0000 C CNN -F 3 "" H 3500 4700 60 0000 C CNN - 1 3500 4700 - 0 -1 -1 0 -$EndComp -$Comp -L GND #PWR061 -U 1 1 53A8CD40 -P 3500 3200 -F 0 "#PWR061" H 3500 3200 30 0001 C CNN -F 1 "GND" H 3500 3130 30 0001 C CNN -F 2 "" H 3500 3200 60 0000 C CNN -F 3 "" H 3500 3200 60 0000 C CNN - 1 3500 3200 - 0 -1 -1 0 -$EndComp -$Comp -L GND #PWR062 -U 1 1 53A8CD46 -P 3500 2800 -F 0 "#PWR062" H 3500 2800 30 0001 C CNN -F 1 "GND" H 3500 2730 30 0001 C CNN -F 2 "" H 3500 2800 60 0000 C CNN -F 3 "" H 3500 2800 60 0000 C CNN - 1 3500 2800 - 0 -1 -1 0 -$EndComp -$Comp -L GND #PWR063 -U 1 1 53A8CD4C -P 3500 2500 -F 0 "#PWR063" H 3500 2500 30 0001 C CNN -F 1 "GND" H 3500 2430 30 0001 C CNN -F 2 "" H 3500 2500 60 0000 C CNN -F 3 "" H 3500 2500 60 0000 C CNN - 1 3500 2500 - 0 -1 -1 0 -$EndComp -$Comp -L +3.3V #PWR064 -U 1 1 53A8CD52 -P 1700 2900 -F 0 "#PWR064" H 1700 2860 30 0001 C CNN -F 1 "+3.3V" H 1700 3010 30 0000 C CNN -F 2 "" H 1700 2900 60 0000 C CNN -F 3 "" H 1700 2900 60 0000 C CNN - 1 1700 2900 - 0 -1 -1 0 -$EndComp -$Comp -L +3.3V #PWR065 -U 1 1 53A8CD58 -P 1700 4200 -F 0 "#PWR065" H 1700 4160 30 0001 C CNN -F 1 "+3.3V" H 1700 4310 30 0000 C CNN -F 2 "" H 1700 4200 60 0000 C CNN -F 3 "" H 1700 4200 60 0000 C CNN - 1 1700 4200 - 0 -1 -1 0 -$EndComp -$Comp -L +3.3V #PWR066 -U 1 1 53A8CD5E -P 1700 900 -F 0 "#PWR066" H 1700 860 30 0001 C CNN -F 1 "+3.3V" H 1700 1010 30 0000 C CNN -F 2 "" H 1700 900 60 0000 C CNN -F 3 "" H 1700 900 60 0000 C CNN - 1 1700 900 - 0 -1 -1 0 -$EndComp -$Comp -L GND #PWR067 -U 1 1 53A8CD64 -P 1700 1400 -F 0 "#PWR067" H 1700 1400 30 0001 C CNN -F 1 "GND" H 1700 1330 30 0001 C CNN -F 2 "" H 1700 1400 60 0000 C CNN -F 3 "" H 1700 1400 60 0000 C CNN - 1 1700 1400 - 0 1 1 0 -$EndComp -$Comp -L GND #PWR068 -U 1 1 53A8CD6A -P 1700 1500 -F 0 "#PWR068" H 1700 1500 30 0001 C CNN -F 1 "GND" H 1700 1430 30 0001 C CNN -F 2 "" H 1700 1500 60 0000 C CNN -F 3 "" H 1700 1500 60 0000 C CNN - 1 1700 1500 - 0 1 1 0 -$EndComp -$Comp -L GND #PWR069 U 1 1 53A8CD70 -P 1700 1700 -F 0 "#PWR069" H 1700 1700 30 0001 C CNN -F 1 "GND" H 1700 1630 30 0001 C CNN -F 2 "" H 1700 1700 60 0000 C CNN -F 3 "" H 1700 1700 60 0000 C CNN - 1 1700 1700 +P 1900 1700 +F 0 "#PWR060" H 1900 1700 30 0001 C CNN +F 1 "GND" H 1900 1630 30 0001 C CNN +F 2 "" H 1900 1700 60 0000 C CNN +F 3 "" H 1900 1700 60 0000 C CNN + 1 1900 1700 0 1 1 0 $EndComp -NoConn ~ 3400 4800 -NoConn ~ 1800 4800 -NoConn ~ 1800 2400 -NoConn ~ 3400 2400 -NoConn ~ 3400 2700 -NoConn ~ 1800 2700 -NoConn ~ 1800 2800 -Text Label 3500 1000 0 60 ~ 0 -GPIO3_9 -Text Label 3500 1100 0 60 ~ 0 -GPIO3_11 -Text Label 3500 1200 0 60 ~ 0 -GPIO3_13 -Text Label 3500 1300 0 60 ~ 0 -GPIO3_15 -Text Label 1100 1300 0 60 ~ 0 -GPIO3_14 -Text Label 1100 1200 0 60 ~ 0 -GPIO3_12 -Text Label 1100 1100 0 60 ~ 0 -GPIO3_10 -Text Label 1100 1000 0 60 ~ 0 -GPIO3_8 -NoConn ~ 1800 3600 -NoConn ~ 3400 5000 -NoConn ~ 3400 5100 -NoConn ~ 3400 5200 -NoConn ~ 1800 5200 -Text Label 3500 4600 0 60 ~ 0 -P1_5 -NoConn ~ 1800 4900 -NoConn ~ 3400 4900 -Text Label 1100 5100 0 60 ~ 0 -CPLD_TDI -Text Label 3700 3300 0 60 ~ 0 -P2_0 -Text Label 1500 3300 0 60 ~ 0 -P2_1 -Text Label 1500 3400 0 60 ~ 0 -P2_9 -Text Label 3700 3400 0 60 ~ 0 -P2_13 -Text Label 3500 4500 0 60 ~ 0 -P1_8 -Text Label 1500 3500 0 60 ~ 0 +NoConn ~ 3600 4800 +NoConn ~ 2000 4800 +NoConn ~ 2000 2400 +NoConn ~ 3600 2400 +NoConn ~ 3600 2700 +NoConn ~ 2000 2700 +NoConn ~ 2000 2800 +Text Label 3700 1000 0 60 ~ 0 +MCU_D1 +Text Label 3700 1100 0 60 ~ 0 +MCU_D3 +Text Label 3700 1200 0 60 ~ 0 +MCU_D5 +Text Label 3700 1300 0 60 ~ 0 +MCU_D7 +Text Label 1300 1300 0 60 ~ 0 +MCU_D6 +Text Label 1300 1200 0 60 ~ 0 +MCU_D4 +Text Label 1300 1100 0 60 ~ 0 +MCU_D2 +Text Label 1300 1000 0 60 ~ 0 +MCU_D0 +NoConn ~ 2000 3600 +NoConn ~ 3600 5000 +NoConn ~ 3600 5100 +NoConn ~ 3600 5200 +NoConn ~ 2000 5200 +Text Label 3700 4600 0 60 ~ 0 +PP_CPLD_TDO +NoConn ~ 2000 4900 +NoConn ~ 3600 4900 +Text Label 1200 5100 0 60 ~ 0 +H1_CPLD_TDI +Text Label 3900 3300 0 60 ~ 0 +MCU_IO_STBX +Text Label 1300 3300 0 60 ~ 0 +MCU_ADDR +Text Label 1300 3400 0 60 ~ 0 +MCU_LCD_WR +Text Label 3900 3400 0 60 ~ 0 +MCU_DIR +Text Label 3700 4500 0 60 ~ 0 +PP_CPLD_TMS +Text Label 1300 3500 0 60 ~ 0 P2_8 -Text Label 1100 5000 0 60 ~ 0 -CPLD_TCK +Text Label 1200 5000 0 60 ~ 0 +H1_CPLD_TCK Text Label 1300 2500 0 60 ~ 0 RESET# -NoConn ~ 3400 2900 -NoConn ~ 3400 3000 -Text Notes 2800 650 0 60 ~ 0 -TODO: WAKEUP to SEL button? +NoConn ~ 3600 2900 +NoConn ~ 3600 3000 $Comp L HACKRF_ONE_P20 P20 U 1 1 53A8CDAE -P 2600 1300 -F 0 "P20" H 2600 1950 60 0000 C CNN -F 1 "HACKRF_ONE_P20" H 2600 650 60 0000 C CNN -F 2 "" H 2600 1300 60 0000 C CNN -F 3 "" H 2600 1300 60 0000 C CNN -F 4 "MLE" H 2600 1300 60 0001 C CNN "Mfr" -F 5 "TSHSM-111-D-06-T-V-S-P-TR-AP-LF" H 2600 1300 60 0001 C CNN "Part" - 1 2600 1300 +P 2800 1300 +F 0 "P20" H 2800 1950 60 0000 C CNN +F 1 "HACKRF_ONE_P20" H 2800 650 60 0000 C CNN +F 2 "header:HEADER_11X2_REV_SM_254_AP" H 2800 1300 60 0001 C CNN +F 3 "" H 2800 1300 60 0000 C CNN +F 4 "MLE" H 2800 1300 60 0001 C CNN "Mfr" +F 5 "TSHSM-111-D-06-T-V-S-P-TR-AP-LF" H 2800 1300 60 0001 C CNN "Part" + 1 2800 1300 1 0 0 -1 $EndComp $Comp L HACKRF_ONE_P22 P22 U 1 1 53A8CDB6 -P 2600 3000 -F 0 "P22" H 2600 3750 60 0000 C CNN -F 1 "HACKRF_ONE_P22" H 2600 2250 60 0000 C CNN -F 2 "" H 2600 3000 60 0000 C CNN -F 3 "" H 2600 3000 60 0000 C CNN -F 4 "MLE" H 2600 3000 60 0001 C CNN "Mfr" -F 5 "TSHSM-113-D-06-T-V-S-P-TR-AP-LF" H 2600 3000 60 0001 C CNN "Part" - 1 2600 3000 +P 2800 3000 +F 0 "P22" H 2800 3750 60 0000 C CNN +F 1 "HACKRF_ONE_P22" H 2800 2250 60 0000 C CNN +F 2 "header:HEADER_13X2_REV_SM_254_AP" H 2800 3000 60 0001 C CNN +F 3 "" H 2800 3000 60 0000 C CNN +F 4 "MLE" H 2800 3000 60 0001 C CNN "Mfr" +F 5 "TSHSM-113-D-06-T-V-S-P-TR-AP-LF" H 2800 3000 60 0001 C CNN "Part" + 1 2800 3000 1 0 0 -1 $EndComp $Comp L HACKRF_ONE_P28 P28 U 1 1 53A8CDBE -P 2600 4700 -F 0 "P28" H 2600 5350 60 0000 C CNN -F 1 "HACKRF_ONE_P28" H 2600 4050 60 0000 C CNN -F 2 "" H 2600 4700 60 0000 C CNN -F 3 "" H 2600 4700 60 0000 C CNN -F 4 "MLE" H 2600 4700 60 0001 C CNN "Mfr" -F 5 "TSHSM-111-D-06-T-V-S-P-TR-AP-LF" H 2600 4700 60 0001 C CNN "Part" - 1 2600 4700 +P 2800 4700 +F 0 "P28" H 2800 5350 60 0000 C CNN +F 1 "HACKRF_ONE_P28" H 2800 4050 60 0000 C CNN +F 2 "header:HEADER_11X2_REV_SM_254_AP" H 2800 4700 60 0001 C CNN +F 3 "" H 2800 4700 60 0000 C CNN +F 4 "MLE" H 2800 4700 60 0001 C CNN "Mfr" +F 5 "TSHSM-111-D-06-T-V-S-P-TR-AP-LF" H 2800 4700 60 0001 C CNN "Part" + 1 2800 4700 1 0 0 -1 $EndComp -NoConn ~ 1800 1600 -NoConn ~ 1800 1800 -NoConn ~ 3400 1800 -NoConn ~ 3400 800 -NoConn ~ 3400 900 +NoConn ~ 2000 1600 +NoConn ~ 2000 1800 +NoConn ~ 3600 1800 +NoConn ~ 3600 800 +NoConn ~ 3600 900 Wire Wire Line - 1000 5000 1800 5000 + 1100 5000 2000 5000 Wire Wire Line - 3900 4500 3400 4500 + 4400 4500 3600 4500 Wire Wire Line - 1400 3500 1800 3500 + 1200 3500 2000 3500 Wire Wire Line - 1400 3400 1800 3400 + 1200 3400 2000 3400 Wire Wire Line - 4100 3400 3400 3400 + 4600 3400 3600 3400 Wire Wire Line - 1400 3300 1800 3300 + 1200 3300 2000 3300 Wire Wire Line - 4100 3300 3400 3300 + 4600 3300 3600 3300 Wire Wire Line - 1000 5100 1800 5100 + 1100 5100 2000 5100 Wire Wire Line - 3500 3600 3400 3600 + 3700 3600 3600 3600 Wire Wire Line - 3500 3500 3400 3500 + 3700 3500 3600 3500 Wire Wire Line - 1000 800 1800 800 + 1200 800 2000 800 Wire Wire Line - 3400 3100 3600 3100 + 3600 3100 3800 3100 Wire Wire Line - 1400 3200 1800 3200 + 1200 3200 2000 3200 Wire Wire Line - 1400 3100 1800 3100 + 1200 3100 2000 3100 Wire Wire Line - 1400 3000 1800 3000 + 1200 3000 2000 3000 Wire Wire Line - 1500 4300 1800 4300 + 1700 4300 2000 4300 Wire Wire Line - 1500 4400 1800 4400 + 1700 4400 2000 4400 Wire Wire Line - 1500 4500 1800 4500 + 1700 4500 2000 4500 Wire Wire Line - 1500 4700 1800 4700 + 1700 4700 2000 4700 Wire Wire Line - 1500 4600 1800 4600 + 1700 4600 2000 4600 Wire Wire Line - 3900 4600 3400 4600 + 4400 4600 3600 4600 Wire Wire Line - 3900 4400 3400 4400 + 4400 4400 3600 4400 Wire Wire Line - 3900 4300 3400 4300 + 4400 4300 3600 4300 Wire Wire Line - 1800 2500 1200 2500 + 2000 2500 1200 2500 Wire Wire Line - 4000 1300 3400 1300 + 4200 1300 3600 1300 Wire Wire Line - 4000 1200 3400 1200 + 4200 1200 3600 1200 Wire Wire Line - 4000 1100 3400 1100 + 4200 1100 3600 1100 Wire Wire Line - 4000 1000 3400 1000 + 4200 1000 3600 1000 Wire Wire Line - 1000 1300 1800 1300 + 1200 1300 2000 1300 Wire Wire Line - 1000 1200 1800 1200 + 1200 1200 2000 1200 Wire Wire Line - 1000 1100 1800 1100 + 1200 1100 2000 1100 Wire Wire Line - 1000 1000 1800 1000 + 1200 1000 2000 1000 Wire Wire Line - 3500 1700 3400 1700 + 3700 1700 3600 1700 Wire Wire Line - 3500 1600 3400 1600 + 3700 1600 3600 1600 Wire Wire Line - 3500 1500 3400 1500 + 3700 1500 3600 1500 Wire Wire Line - 3500 1400 3400 1400 + 3700 1400 3600 1400 Wire Wire Line - 1800 1700 1700 1700 + 2000 1700 1900 1700 Wire Wire Line - 1800 1500 1700 1500 + 2000 1500 1900 1500 Wire Wire Line - 1800 1400 1700 1400 + 2000 1400 1900 1400 Wire Wire Line - 1800 900 1700 900 + 2000 900 1900 900 Wire Wire Line - 1800 4200 1700 4200 + 2000 4200 1900 4200 Wire Wire Line - 3500 4700 3400 4700 + 3700 4700 3600 4700 Wire Wire Line - 3400 4200 3500 4200 + 3600 4200 3700 4200 Wire Wire Line - 3400 3200 3500 3200 + 3600 3200 3700 3200 Wire Wire Line - 3500 2800 3400 2800 + 3700 2800 3600 2800 Wire Wire Line - 3400 2500 3500 2500 + 3600 2500 3700 2500 Wire Wire Line - 1800 2900 1700 2900 + 2000 2900 1900 2900 Wire Wire Line - 1200 2600 1800 2600 + 1200 2600 2000 2600 Wire Wire Line - 4100 2600 3400 2600 + 4600 2600 3600 2600 $Comp L 5M40ZE64 U3 U 1 1 53A8D11B -P 8250 3150 -F 0 "U3" H 8250 3200 60 0000 C CNN -F 1 "5M40ZE64" H 8250 3100 60 0000 C CNN -F 2 "" H 8250 3150 60 0000 C CNN -F 3 "" H 8250 3150 60 0000 C CNN -F 4 "Altera" H 8250 3150 60 0001 C CNN "Mfr" -F 5 "5M40ZE64C5N" H 8250 3150 60 0001 C CNN "Part" - 1 8250 3150 +P 7750 3050 +F 0 "U3" H 7750 3100 60 0000 C CNN +F 1 "5M40ZE64" H 7750 3000 60 0000 C CNN +F 2 "ipc_qfp:IPC_QFP40P900X900X120-65N" H 7750 3050 60 0001 C CNN +F 3 "" H 7750 3050 60 0000 C CNN +F 4 "Altera" H 7750 3050 60 0001 C CNN "Mfr" +F 5 "5M40ZE64C5N" H 7750 3050 60 0001 C CNN "Part" + 1 7750 3050 1 0 0 -1 $EndComp -Text Label 7700 1450 1 60 ~ 0 +Text Label 7200 1350 1 60 ~ 0 LCD_DB0 -Text Label 7800 1450 1 60 ~ 0 +Text Label 7300 1350 1 60 ~ 0 LCD_DB1 -Text Label 7900 1450 1 60 ~ 0 +Text Label 7400 1350 1 60 ~ 0 LCD_DB2 -Text Label 8000 1450 1 60 ~ 0 +Text Label 7500 1350 1 60 ~ 0 LCD_DB3 -Text Label 8100 1450 1 60 ~ 0 +Text Label 7600 1350 1 60 ~ 0 LCD_DB4 -Text Label 8300 1450 1 60 ~ 0 +Text Label 7800 1350 1 60 ~ 0 LCD_DB5 -Text Label 8400 1450 1 60 ~ 0 +Text Label 7900 1350 1 60 ~ 0 LCD_DB6 -Text Label 8500 1450 1 60 ~ 0 +Text Label 8000 1350 1 60 ~ 0 LCD_DB7 -Text Label 8600 1450 1 60 ~ 0 +Text Label 8100 1350 1 60 ~ 0 LCD_DB8 -Text Label 8700 1450 1 60 ~ 0 +Text Label 8200 1350 1 60 ~ 0 LCD_DB9 -Text Label 8800 1450 1 60 ~ 0 +Text Label 8300 1350 1 60 ~ 0 LCD_DB10 -Text Label 8900 1450 1 60 ~ 0 +Text Label 8400 1350 1 60 ~ 0 LCD_DB11 -Text Label 9000 1450 1 60 ~ 0 +Text Label 8500 1350 1 60 ~ 0 LCD_DB12 -Text Label 9950 2400 0 60 ~ 0 +Text Label 9450 2300 0 60 ~ 0 LCD_DB13 -Text Label 9950 2500 0 60 ~ 0 +Text Label 9450 2400 0 60 ~ 0 LCD_DB14 -Text Label 9950 2600 0 60 ~ 0 +Text Label 9450 2500 0 60 ~ 0 LCD_DB15 -Text Label 4600 5900 0 60 ~ 0 -GPIO3_8 -Text Label 4600 6000 0 60 ~ 0 -GPIO3_9 -Text Label 4600 5800 0 60 ~ 0 -GPIO3_10 -Text Label 4600 5700 0 60 ~ 0 -GPIO3_11 -Text Label 4600 5000 0 60 ~ 0 -GPIO3_12 -Text Label 4600 5100 0 60 ~ 0 -GPIO3_13 -Text Label 4600 4900 0 60 ~ 0 -GPIO3_14 -Text Label 4600 4800 0 60 ~ 0 -GPIO3_15 -Text Label 4600 1000 0 60 ~ 0 -P2_9 -Text Label 4600 1100 0 60 ~ 0 -P2_13 -Text Label 6100 3700 0 60 ~ 0 -P1_8 +Text Label 5100 6200 0 60 ~ 0 +MCU_D0 +Text Label 5100 6300 0 60 ~ 0 +MCU_D1 +Text Label 5100 6100 0 60 ~ 0 +MCU_D2 +Text Label 5100 6000 0 60 ~ 0 +MCU_D3 +Text Label 3300 6200 0 60 ~ 0 +MCU_D4 +Text Label 3300 6300 0 60 ~ 0 +MCU_D5 +Text Label 3300 6100 0 60 ~ 0 +MCU_D6 +Text Label 3300 6000 0 60 ~ 0 +MCU_D7 +Text Label 6900 6200 0 60 ~ 0 +MCU_LCD_WR +Text Label 6900 6300 0 60 ~ 0 +MCU_DIR +Text Label 5500 3600 0 60 ~ 0 +PP_CPLD_TMS $Comp -L +3.3V #PWR070 +L +3.3V #PWR061 U 1 1 53A8D13C -P 8100 4850 -F 0 "#PWR070" H 8100 4810 30 0001 C CNN -F 1 "+3.3V" H 8100 4960 30 0000 C CNN -F 2 "" H 8100 4850 60 0000 C CNN -F 3 "" H 8100 4850 60 0000 C CNN - 1 8100 4850 +P 7600 4750 +F 0 "#PWR061" H 7600 4710 30 0001 C CNN +F 1 "+3.3V" H 7600 4860 30 0000 C CNN +F 2 "" H 7600 4750 60 0000 C CNN +F 3 "" H 7600 4750 60 0000 C CNN + 1 7600 4750 -1 0 0 1 $EndComp $Comp -L +3.3V #PWR071 +L +3.3V #PWR062 U 1 1 53A8D142 -P 6000 2900 -F 0 "#PWR071" H 6000 2860 30 0001 C CNN -F 1 "+3.3V" H 6000 3010 30 0000 C CNN -F 2 "" H 6000 2900 60 0000 C CNN -F 3 "" H 6000 2900 60 0000 C CNN - 1 6000 2900 +P 6050 2800 +F 0 "#PWR062" H 6050 2760 30 0001 C CNN +F 1 "+3.3V" H 6050 2910 30 0000 C CNN +F 2 "" H 6050 2800 60 0000 C CNN +F 3 "" H 6050 2800 60 0000 C CNN + 1 6050 2800 0 -1 -1 0 $EndComp $Comp -L +1.8V #PWR072 +L +1.8V #PWR063 U 1 1 53A8D148 -P 10550 3100 -F 0 "#PWR072" H 10550 3240 20 0001 C CNN -F 1 "+1.8V" H 10550 3210 30 0000 C CNN -F 2 "" H 10550 3100 60 0000 C CNN -F 3 "" H 10550 3100 60 0000 C CNN - 1 10550 3100 +P 9450 3000 +F 0 "#PWR063" H 9450 3140 20 0001 C CNN +F 1 "+1.8V" H 9450 3110 30 0000 C CNN +F 2 "" H 9450 3000 60 0000 C CNN +F 3 "" H 9450 3000 60 0000 C CNN + 1 9450 3000 0 1 1 0 $EndComp $Comp -L +1.8V #PWR073 +L +1.8V #PWR064 U 1 1 53A8D14E -P 6000 3100 -F 0 "#PWR073" H 6000 3240 20 0001 C CNN -F 1 "+1.8V" H 6000 3210 30 0000 C CNN -F 2 "" H 6000 3100 60 0000 C CNN -F 3 "" H 6000 3100 60 0000 C CNN - 1 6000 3100 +P 6050 3000 +F 0 "#PWR064" H 6050 3140 20 0001 C CNN +F 1 "+1.8V" H 6050 3110 30 0000 C CNN +F 2 "" H 6050 3000 60 0000 C CNN +F 3 "" H 6050 3000 60 0000 C CNN + 1 6050 3000 0 -1 -1 0 $EndComp $Comp -L GND #PWR074 +L GND #PWR065 U 1 1 53A8D154 -P 9450 4850 -F 0 "#PWR074" H 9450 4850 30 0001 C CNN -F 1 "GND" H 9450 4780 30 0001 C CNN -F 2 "" H 9450 4850 60 0000 C CNN -F 3 "" H 9450 4850 60 0000 C CNN - 1 9450 4850 +P 8950 4750 +F 0 "#PWR065" H 8950 4750 30 0001 C CNN +F 1 "GND" H 8950 4680 30 0001 C CNN +F 2 "" H 8950 4750 60 0000 C CNN +F 3 "" H 8950 4750 60 0000 C CNN + 1 8950 4750 1 0 0 -1 $EndComp -Text Label 8700 5350 1 60 ~ 0 +Text Label 8200 5400 1 60 ~ 0 RESET# -Text Label 8800 5350 1 60 ~ 0 -P2_4_R -Text Label 6100 3800 0 60 ~ 0 -CPLD_TDI -Text Label 10050 4000 0 60 ~ 0 -P2_1_R -Text Label 9000 5350 1 60 ~ 0 -P2_0_R -Text Label 7600 1450 1 60 ~ 0 -LCD_TE +Text Label 8300 5400 1 60 ~ 0 +MCU_LCD_RD_R +Text Label 5500 3700 0 60 ~ 0 +H1_CPLD_TDI +Text Label 9700 3800 0 60 ~ 0 +MCU_ADDR_R +Text Label 8500 5400 1 60 ~ 0 +MCU_IO_STBX_R $Comp -L +1.8V #PWR075 +L +1.8V #PWR066 U 1 1 53A8D16D -P 10550 3300 -F 0 "#PWR075" H 10550 3440 20 0001 C CNN -F 1 "+1.8V" H 10550 3410 30 0000 C CNN -F 2 "" H 10550 3300 60 0000 C CNN -F 3 "" H 10550 3300 60 0000 C CNN - 1 10550 3300 +P 9450 3200 +F 0 "#PWR066" H 9450 3340 20 0001 C CNN +F 1 "+1.8V" H 9450 3310 30 0000 C CNN +F 2 "" H 9450 3200 60 0000 C CNN +F 3 "" H 9450 3200 60 0000 C CNN + 1 9450 3200 0 1 1 0 $EndComp $Comp -L +1.8V #PWR076 +L +1.8V #PWR067 U 1 1 53A8D173 -P 8200 1050 -F 0 "#PWR076" H 8200 1190 20 0001 C CNN -F 1 "+1.8V" H 8200 1160 30 0000 C CNN -F 2 "" H 8200 1050 60 0000 C CNN -F 3 "" H 8200 1050 60 0000 C CNN - 1 8200 1050 +P 7700 950 +F 0 "#PWR067" H 7700 1090 20 0001 C CNN +F 1 "+1.8V" H 7700 1060 30 0000 C CNN +F 2 "" H 7700 950 60 0000 C CNN +F 3 "" H 7700 950 60 0000 C CNN + 1 7700 950 1 0 0 -1 $EndComp Wire Wire Line - 4500 6000 5100 6000 + 5000 6300 5500 6300 Wire Wire Line - 4500 5900 5100 5900 + 5000 6200 5500 6200 Wire Wire Line - 4500 5800 5100 5800 + 5000 6100 5500 6100 Wire Wire Line - 4500 5700 5100 5700 + 5000 6000 5500 6000 Wire Wire Line - 7500 4750 7500 5450 + 7000 4650 7000 5500 Wire Wire Line - 4500 5100 5100 5100 + 3200 6300 3700 6300 Wire Wire Line - 4500 5000 5100 5000 + 3200 6200 3700 6200 Wire Wire Line - 4500 4900 5100 4900 + 3200 6100 3700 6100 Wire Wire Line - 4500 4800 5100 4800 + 3200 6000 3700 6000 Wire Wire Line - 6000 3200 6650 3200 + 5400 3100 6150 3100 Wire Wire Line - 4500 900 5000 900 + 6800 6100 7500 6100 Wire Wire Line - 4500 1100 5000 1100 + 6800 6300 7500 6300 Wire Wire Line - 4500 800 5000 800 + 6800 6000 7500 6000 Wire Wire Line - 6000 3700 6650 3700 + 5400 3600 6150 3600 Wire Wire Line - 8200 4750 8200 5450 + 7700 4650 7700 5500 Wire Wire Line - 8300 4750 8300 5450 + 7800 4650 7800 5500 Wire Wire Line - 8400 4750 8400 5450 + 7900 4650 7900 5500 Wire Wire Line - 8500 4750 8500 5450 + 8000 4650 8000 5500 Wire Wire Line - 8600 5450 8600 4750 + 8100 5500 8100 4650 Wire Wire Line - 8700 5450 8700 4750 + 8200 5500 8200 4650 Wire Wire Line - 8400 800 8400 1550 + 7900 800 7900 1450 Wire Wire Line - 8500 800 8500 1550 + 8000 800 8000 1450 Wire Wire Line - 9450 4750 9450 4850 + 8950 4650 8950 4750 Wire Wire Line - 6000 3800 6650 3800 + 5400 3700 6150 3700 Wire Wire Line - 6000 3900 6650 3900 + 5400 3800 6150 3800 Wire Wire Line - 6650 3100 6000 3100 + 6150 3000 6050 3000 Wire Wire Line - 10550 3100 9850 3100 + 9450 3000 9350 3000 Wire Wire Line - 8200 1050 8200 1550 + 7700 950 7700 1450 Wire Wire Line - 10550 3300 9850 3300 + 9450 3200 9350 3200 Wire Wire Line - 8100 4850 8100 4750 + 7600 4750 7600 4650 Wire Wire Line - 6000 2900 6650 2900 + 6050 2800 6150 2800 Wire Wire Line - 8800 5450 8800 4750 + 8300 5500 8300 4650 Wire Wire Line - 9000 5450 9000 4750 + 8500 5500 8500 4650 Wire Wire Line - 8300 800 8300 1550 + 7800 800 7800 1450 Wire Wire Line - 8100 800 8100 1550 + 7600 800 7600 1450 Wire Wire Line - 8000 800 8000 1550 + 7500 800 7500 1450 Wire Wire Line - 7900 800 7900 1550 + 7400 800 7400 1450 Wire Wire Line - 7800 800 7800 1550 + 7300 800 7300 1450 Wire Wire Line - 7700 800 7700 1550 + 7200 800 7200 1450 Wire Wire Line - 8000 5450 8000 4750 + 7500 5500 7500 4650 Wire Wire Line - 7900 4750 7900 5450 + 7400 4650 7400 5500 Wire Wire Line - 7800 4750 7800 5450 + 7300 4650 7300 5500 Wire Wire Line - 7700 4750 7700 5450 + 7200 4650 7200 5500 Wire Wire Line - 7600 4750 7600 5450 + 7100 4650 7100 5500 Wire Wire Line - 6000 3600 6650 3600 + 5400 3500 6150 3500 Wire Wire Line - 6000 3500 6650 3500 + 5400 3400 6150 3400 Wire Wire Line - 6000 3400 6650 3400 + 5400 3300 6150 3300 Wire Wire Line - 6000 3300 6650 3300 + 5400 3200 6150 3200 Wire Wire Line - 6550 2600 6650 2600 + 6050 2500 6150 2500 Wire Wire Line - 6550 2500 6650 2500 + 6050 2400 6150 2400 Wire Wire Line - 6550 2400 6650 2400 + 6050 2300 6150 2300 Wire Wire Line - 8600 1550 8600 800 + 8100 1450 8100 800 Wire Wire Line - 8700 1550 8700 800 + 8200 1450 8200 800 Wire Wire Line - 8800 1550 8800 800 + 8300 1450 8300 800 Wire Wire Line - 8900 1550 8900 800 + 8400 1450 8400 800 Wire Wire Line - 9000 1550 9000 800 + 8500 1450 8500 800 Wire Wire Line - 10450 2400 9850 2400 + 9950 2300 9350 2300 Wire Wire Line - 10450 2500 9850 2500 + 9950 2400 9350 2400 Wire Wire Line - 10450 2600 9850 2600 + 9950 2500 9350 2500 Wire Wire Line - 10400 2900 9850 2900 -Text Label 6100 3900 0 60 ~ 0 -CPLD_TCK -Text Notes 9900 6350 0 60 ~ 0 + 10400 2800 9350 2800 +Text Label 5500 3800 0 60 ~ 0 +H1_CPLD_TCK +Text Notes 9400 5500 0 60 ~ 0 TDI, TMS: weak internal PU\nTCK: weak internal PD -Text Label 7500 5350 1 60 ~ 0 -P1_5 +Text Label 7000 5400 1 60 ~ 0 +PP_CPLD_TDO $Comp -L +3.3V #PWR077 +L +3.3V #PWR068 U 1 1 53A8D521 P 800 5700 -F 0 "#PWR077" H 800 5660 30 0001 C CNN +F 0 "#PWR068" H 800 5660 30 0001 C CNN F 1 "+3.3V" H 800 5810 30 0000 C CNN F 2 "" H 800 5700 60 0000 C CNN F 3 "" H 800 5700 60 0000 C CNN @@ -651,7 +647,7 @@ U 1 1 53A8D527 P 800 6100 F 0 "C28" H 850 6200 50 0000 L CNN F 1 "100N" H 850 6000 50 0000 L CNN -F 2 "" H 800 6100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 800 6100 60 0001 C CNN F 3 "" H 800 6100 60 0000 C CNN F 4 "Murata" H 800 6100 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 800 6100 60 0001 C CNN "Part" @@ -659,10 +655,10 @@ F 5 "GRM155R61A104KA01" H 800 6100 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR078 +L GND #PWR069 U 1 1 53A8D52D P 2000 7500 -F 0 "#PWR078" H 2000 7500 30 0001 C CNN +F 0 "#PWR069" H 2000 7500 30 0001 C CNN F 1 "GND" H 2000 7430 30 0001 C CNN F 2 "" H 2000 7500 60 0000 C CNN F 3 "" H 2000 7500 60 0000 C CNN @@ -675,7 +671,7 @@ U 1 1 53A8D535 P 6000 7200 F 0 "BT1" H 6000 7350 50 0000 C CNN F 1 "BATTERY" H 6000 7060 50 0000 C CNN -F 2 "" H 6000 7200 60 0000 C CNN +F 2 "bat_coin:MPD_BU2032SM-BT-G" H 6000 7200 60 0001 C CNN F 3 "" H 6000 7200 60 0000 C CNN F 4 "MPD" H 6000 7200 60 0001 C CNN "Mfr" F 5 "BU2032SM-BT-GTR" H 6000 7200 60 0001 C CNN "Part" @@ -683,10 +679,10 @@ F 5 "BU2032SM-BT-GTR" H 6000 7200 60 0001 C CNN "Part" 0 1 1 0 $EndComp $Comp -L GND #PWR079 +L GND #PWR070 U 1 1 53A8D53B P 6000 7500 -F 0 "#PWR079" H 6000 7500 30 0001 C CNN +F 0 "#PWR070" H 6000 7500 30 0001 C CNN F 1 "GND" H 6000 7430 30 0001 C CNN F 2 "" H 6000 7500 60 0000 C CNN F 3 "" H 6000 7500 60 0000 C CNN @@ -701,7 +697,7 @@ U 1 1 53A8D542 P 1200 6100 F 0 "C30" H 1250 6200 50 0000 L CNN F 1 "100N" H 1250 6000 50 0000 L CNN -F 2 "" H 1200 6100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 1200 6100 60 0001 C CNN F 3 "" H 1200 6100 60 0000 C CNN F 4 "Murata" H 1200 6100 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 1200 6100 60 0001 C CNN "Part" @@ -714,7 +710,7 @@ U 1 1 53A8D548 P 800 7200 F 0 "C29" H 850 7300 50 0000 L CNN F 1 "100N" H 850 7100 50 0000 L CNN -F 2 "" H 800 7200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 800 7200 60 0001 C CNN F 3 "" H 800 7200 60 0000 C CNN F 4 "Murata" H 800 7200 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 800 7200 60 0001 C CNN "Part" @@ -727,7 +723,7 @@ U 1 1 53A8D54E P 1200 7200 F 0 "C31" H 1250 7300 50 0000 L CNN F 1 "100N" H 1250 7100 50 0000 L CNN -F 2 "" H 1200 7200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 1200 7200 60 0001 C CNN F 3 "" H 1200 7200 60 0000 C CNN F 4 "Murata" H 1200 7200 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 1200 7200 60 0001 C CNN "Part" @@ -735,10 +731,10 @@ F 5 "GRM155R61A104KA01" H 1200 7200 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR080 +L GND #PWR071 U 1 1 53A8D554 P 800 6400 -F 0 "#PWR080" H 800 6400 30 0001 C CNN +F 0 "#PWR071" H 800 6400 30 0001 C CNN F 1 "GND" H 800 6330 30 0001 C CNN F 2 "" H 800 6400 60 0000 C CNN F 3 "" H 800 6400 60 0000 C CNN @@ -746,10 +742,10 @@ F 3 "" H 800 6400 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR081 +L GND #PWR072 U 1 1 53A8D55A P 1200 6400 -F 0 "#PWR081" H 1200 6400 30 0001 C CNN +F 0 "#PWR072" H 1200 6400 30 0001 C CNN F 1 "GND" H 1200 6330 30 0001 C CNN F 2 "" H 1200 6400 60 0000 C CNN F 3 "" H 1200 6400 60 0000 C CNN @@ -757,10 +753,10 @@ F 3 "" H 1200 6400 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR082 +L GND #PWR073 U 1 1 53A8D560 P 800 7500 -F 0 "#PWR082" H 800 7500 30 0001 C CNN +F 0 "#PWR073" H 800 7500 30 0001 C CNN F 1 "GND" H 800 7430 30 0001 C CNN F 2 "" H 800 7500 60 0000 C CNN F 3 "" H 800 7500 60 0000 C CNN @@ -768,10 +764,10 @@ F 3 "" H 800 7500 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR083 +L GND #PWR074 U 1 1 53A8D566 P 1200 7500 -F 0 "#PWR083" H 1200 7500 30 0001 C CNN +F 0 "#PWR074" H 1200 7500 30 0001 C CNN F 1 "GND" H 1200 7430 30 0001 C CNN F 2 "" H 1200 7500 60 0000 C CNN F 3 "" H 1200 7500 60 0000 C CNN @@ -784,7 +780,7 @@ U 1 1 53A8D56C P 1600 7200 F 0 "C33" H 1650 7300 50 0000 L CNN F 1 "100N" H 1650 7100 50 0000 L CNN -F 2 "" H 1600 7200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 1600 7200 60 0001 C CNN F 3 "" H 1600 7200 60 0000 C CNN F 4 "Murata" H 1600 7200 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 1600 7200 60 0001 C CNN "Part" @@ -797,7 +793,7 @@ U 1 1 53A8D572 P 2000 7200 F 0 "C35" H 2050 7300 50 0000 L CNN F 1 "100N" H 2050 7100 50 0000 L CNN -F 2 "" H 2000 7200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 2000 7200 60 0001 C CNN F 3 "" H 2000 7200 60 0000 C CNN F 4 "Murata" H 2000 7200 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 2000 7200 60 0001 C CNN "Part" @@ -805,10 +801,10 @@ F 5 "GRM155R61A104KA01" H 2000 7200 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR084 +L GND #PWR075 U 1 1 53A8D578 P 1600 7500 -F 0 "#PWR084" H 1600 7500 30 0001 C CNN +F 0 "#PWR075" H 1600 7500 30 0001 C CNN F 1 "GND" H 1600 7430 30 0001 C CNN F 2 "" H 1600 7500 60 0000 C CNN F 3 "" H 1600 7500 60 0000 C CNN @@ -816,10 +812,10 @@ F 3 "" H 1600 7500 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L +1.8V #PWR085 +L +1.8V #PWR076 U 1 1 53A8D57E P 800 6800 -F 0 "#PWR085" H 800 6940 20 0001 C CNN +F 0 "#PWR076" H 800 6940 20 0001 C CNN F 1 "+1.8V" H 800 6910 30 0000 C CNN F 2 "" H 800 6800 60 0000 C CNN F 3 "" H 800 6800 60 0000 C CNN @@ -832,7 +828,7 @@ U 1 1 53A8D586 P 4400 7000 F 0 "U2" H 4400 7350 60 0000 C CNN F 1 "REGULATOR_SOT23_5" H 4400 7250 60 0000 C CNN -F 2 "" H 4400 7000 60 0000 C CNN +F 2 "ipc_sot:IPC_SOT95P280X110-5N" H 4400 7000 60 0001 C CNN F 3 "" H 4400 7000 60 0000 C CNN F 4 "Toshiba" H 4400 7000 60 0001 C CNN "Mfr" F 5 "TCR2EF18,LM" H 4400 7000 60 0001 C CNN "Part" @@ -845,7 +841,7 @@ U 1 1 53A8D58C P 3500 7200 F 0 "C38" H 3550 7300 50 0000 L CNN F 1 "10U" H 3550 7100 50 0000 L CNN -F 2 "" H 3500 7200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 3500 7200 60 0001 C CNN F 3 "" H 3500 7200 60 0000 C CNN F 4 "Murata" H 3500 7200 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 3500 7200 60 0001 C CNN "Part" @@ -858,7 +854,7 @@ U 1 1 53A8D592 P 5300 7200 F 0 "C40" H 5350 7300 50 0000 L CNN F 1 "10U" H 5350 7100 50 0000 L CNN -F 2 "" H 5300 7200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 5300 7200 60 0001 C CNN F 3 "" H 5300 7200 60 0000 C CNN F 4 "Murata" H 5300 7200 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 5300 7200 60 0001 C CNN "Part" @@ -866,10 +862,10 @@ F 5 "GRM21BR61A106KE19" H 5300 7200 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR086 +L GND #PWR077 U 1 1 53A8D598 P 4400 7400 -F 0 "#PWR086" H 4400 7400 30 0001 C CNN +F 0 "#PWR077" H 4400 7400 30 0001 C CNN F 1 "GND" H 4400 7330 30 0001 C CNN F 2 "" H 4400 7400 60 0000 C CNN F 3 "" H 4400 7400 60 0000 C CNN @@ -877,10 +873,10 @@ F 3 "" H 4400 7400 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR087 +L GND #PWR078 U 1 1 53A8D59E P 3500 7500 -F 0 "#PWR087" H 3500 7500 30 0001 C CNN +F 0 "#PWR078" H 3500 7500 30 0001 C CNN F 1 "GND" H 3500 7430 30 0001 C CNN F 2 "" H 3500 7500 60 0000 C CNN F 3 "" H 3500 7500 60 0000 C CNN @@ -888,10 +884,10 @@ F 3 "" H 3500 7500 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR088 +L GND #PWR079 U 1 1 53A8D5A4 P 5300 7500 -F 0 "#PWR088" H 5300 7500 30 0001 C CNN +F 0 "#PWR079" H 5300 7500 30 0001 C CNN F 1 "GND" H 5300 7430 30 0001 C CNN F 2 "" H 5300 7500 60 0000 C CNN F 3 "" H 5300 7500 60 0000 C CNN @@ -903,17 +899,17 @@ L C C39 U 1 1 53A8D5AA P 4900 7400 F 0 "C39" H 4950 7500 50 0000 L CNN -F 1 "?" H 4950 7300 50 0000 L CNN -F 2 "DNI" H 5100 7400 60 0000 C CNN +F 1 "DNI" H 4950 7300 50 0000 L CNN +F 2 "ipc_capc:IPC_CAPC1608X90N" H 5100 7400 60 0001 C CNN F 3 "" H 4900 7400 60 0000 C CNN 1 4900 7400 -1 0 0 -1 $EndComp $Comp -L GND #PWR089 +L GND #PWR080 U 1 1 53A8D5B0 P 4900 7700 -F 0 "#PWR089" H 4900 7700 30 0001 C CNN +F 0 "#PWR080" H 4900 7700 30 0001 C CNN F 1 "GND" H 4900 7630 30 0001 C CNN F 2 "" H 4900 7700 60 0000 C CNN F 3 "" H 4900 7700 60 0000 C CNN @@ -921,10 +917,10 @@ F 3 "" H 4900 7700 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L +1.8V #PWR090 +L +1.8V #PWR081 U 1 1 53A8D5B6 P 5300 6800 -F 0 "#PWR090" H 5300 6940 20 0001 C CNN +F 0 "#PWR081" H 5300 6940 20 0001 C CNN F 1 "+1.8V" H 5300 6910 30 0000 C CNN F 2 "" H 5300 6800 60 0000 C CNN F 3 "" H 5300 6800 60 0000 C CNN @@ -932,10 +928,10 @@ F 3 "" H 5300 6800 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L +3.3V #PWR091 +L +3.3V #PWR082 U 1 1 53A8D5BC P 3500 6800 -F 0 "#PWR091" H 3500 6760 30 0001 C CNN +F 0 "#PWR082" H 3500 6760 30 0001 C CNN F 1 "+3.3V" H 3500 6910 30 0000 C CNN F 2 "" H 3500 6800 60 0000 C CNN F 3 "" H 3500 6800 60 0000 C CNN @@ -948,7 +944,7 @@ U 1 1 53A8D5C2 P 1600 6100 F 0 "C32" H 1650 6200 50 0000 L CNN F 1 "10U" H 1650 6000 50 0000 L CNN -F 2 "" H 1600 6100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 1600 6100 60 0001 C CNN F 3 "" H 1600 6100 60 0000 C CNN F 4 "Murata" H 1600 6100 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 1600 6100 60 0001 C CNN "Part" @@ -961,7 +957,7 @@ U 1 1 53A8D5C8 P 2000 6100 F 0 "C34" H 2050 6200 50 0000 L CNN F 1 "10U" H 2050 6000 50 0000 L CNN -F 2 "" H 2000 6100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 2000 6100 60 0001 C CNN F 3 "" H 2000 6100 60 0000 C CNN F 4 "Murata" H 2000 6100 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 2000 6100 60 0001 C CNN "Part" @@ -969,10 +965,10 @@ F 5 "GRM21BR61A106KE19" H 2000 6100 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR092 +L GND #PWR083 U 1 1 53A8D5CE P 1600 6400 -F 0 "#PWR092" H 1600 6400 30 0001 C CNN +F 0 "#PWR083" H 1600 6400 30 0001 C CNN F 1 "GND" H 1600 6330 30 0001 C CNN F 2 "" H 1600 6400 60 0000 C CNN F 3 "" H 1600 6400 60 0000 C CNN @@ -980,10 +976,10 @@ F 3 "" H 1600 6400 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR093 +L GND #PWR084 U 1 1 53A8D5D4 P 2000 6400 -F 0 "#PWR093" H 2000 6400 30 0001 C CNN +F 0 "#PWR084" H 2000 6400 30 0001 C CNN F 1 "GND" H 2000 6330 30 0001 C CNN F 2 "" H 2000 6400 60 0000 C CNN F 3 "" H 2000 6400 60 0000 C CNN @@ -996,7 +992,7 @@ U 1 1 53A8D5DA P 2400 7200 F 0 "C36" H 2450 7300 50 0000 L CNN F 1 "10U" H 2450 7100 50 0000 L CNN -F 2 "" H 2400 7200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 2400 7200 60 0001 C CNN F 3 "" H 2400 7200 60 0000 C CNN F 4 "Murata" H 2400 7200 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 2400 7200 60 0001 C CNN "Part" @@ -1009,7 +1005,7 @@ U 1 1 53A8D5E0 P 2800 7200 F 0 "C37" H 2850 7300 50 0000 L CNN F 1 "10U" H 2850 7100 50 0000 L CNN -F 2 "" H 2800 7200 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 2800 7200 60 0001 C CNN F 3 "" H 2800 7200 60 0000 C CNN F 4 "Murata" H 2800 7200 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 2800 7200 60 0001 C CNN "Part" @@ -1017,10 +1013,10 @@ F 5 "GRM21BR61A106KE19" H 2800 7200 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR094 +L GND #PWR085 U 1 1 53A8D5E6 P 2800 7500 -F 0 "#PWR094" H 2800 7500 30 0001 C CNN +F 0 "#PWR085" H 2800 7500 30 0001 C CNN F 1 "GND" H 2800 7430 30 0001 C CNN F 2 "" H 2800 7500 60 0000 C CNN F 3 "" H 2800 7500 60 0000 C CNN @@ -1028,10 +1024,10 @@ F 3 "" H 2800 7500 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR095 +L GND #PWR086 U 1 1 53A8D5EC P 2400 7500 -F 0 "#PWR095" H 2400 7500 30 0001 C CNN +F 0 "#PWR086" H 2400 7500 30 0001 C CNN F 1 "GND" H 2400 7430 30 0001 C CNN F 2 "" H 2400 7500 60 0000 C CNN F 3 "" H 2400 7500 60 0000 C CNN @@ -1126,8 +1122,8 @@ L C C41 U 1 1 53A8D62C P 6500 7200 F 0 "C41" H 6550 7300 50 0000 L CNN -F 1 "10U" H 6550 7100 50 0000 L CNN -F 2 "" H 6500 7200 60 0000 C CNN +F 1 "DNI" H 6550 7100 50 0000 L CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 6500 7200 60 0001 C CNN F 3 "" H 6500 7200 60 0000 C CNN F 4 "Murata" H 6500 7200 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 6500 7200 60 0001 C CNN "Part" @@ -1135,10 +1131,10 @@ F 5 "GRM21BR61A106KE19" H 6500 7200 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR096 +L GND #PWR087 U 1 1 53A8D632 P 6500 7500 -F 0 "#PWR096" H 6500 7500 30 0001 C CNN +F 0 "#PWR087" H 6500 7500 30 0001 C CNN F 1 "GND" H 6500 7430 30 0001 C CNN F 2 "" H 6500 7500 60 0000 C CNN F 3 "" H 6500 7500 60 0000 C CNN @@ -1152,133 +1148,135 @@ Wire Wire Line Wire Wire Line 6500 6900 6000 6900 Wire Wire Line - 8900 5450 8900 4750 -Text Label 3700 2600 0 60 ~ 0 -P2_3 -Text Label 8900 5350 1 60 ~ 0 -P2_3_R + 8400 5500 8400 4650 +Text Label 3900 2600 0 60 ~ 0 +MCU_LCD_TE +Text Label 8400 5400 1 60 ~ 0 +MCU_LCD_TE_R Wire Wire Line - 6000 800 5400 800 + 8800 6000 7900 6000 Wire Wire Line - 6000 900 5400 900 + 8800 6100 7900 6100 Wire Wire Line - 6000 1100 5400 1100 -Text Label 5500 1100 0 60 ~ 0 -P2_13_R -Text Label 5500 1000 0 60 ~ 0 -P2_9_R -Text Label 9950 3000 0 60 ~ 0 -P2_13_R -Text Label 9950 3200 0 60 ~ 0 -P2_9_R + 8800 6300 7900 6300 +Text Label 8000 6300 0 60 ~ 0 +MCU_DIR_R +Text Label 8000 6200 0 60 ~ 0 +MCU_LCD_WR_R +Text Label 9650 2900 0 60 ~ 0 +MCU_DIR_R +Text Label 9650 3100 0 60 ~ 0 +MCU_LCD_WR_R Wire Wire Line - 4500 1700 5000 1700 + 9000 6000 9700 6000 Wire Wire Line - 4500 1900 5000 1900 + 9000 6200 9700 6200 Wire Wire Line - 4500 2100 5000 2100 + 9000 6400 9700 6400 Wire Wire Line - 6100 1700 5500 1700 + 11100 6000 10200 6000 Wire Wire Line - 6100 1900 5500 1900 + 11100 6200 10200 6200 Wire Wire Line - 6100 2100 5500 2100 -Text Label 4600 1700 0 60 ~ 0 -P2_4 -Text Label 4600 1900 0 60 ~ 0 -P2_3 -Text Label 4600 800 0 60 ~ 0 -P2_1 -Text Label 4600 2100 0 60 ~ 0 -P2_0 -Text Label 5600 1700 0 60 ~ 0 -P2_4_R -Text Label 5600 1900 0 60 ~ 0 -P2_3_R -Text Label 5500 800 0 60 ~ 0 -P2_1_R -Text Label 5600 2100 0 60 ~ 0 -P2_0_R -Text Label 7600 5350 1 60 ~ 0 -GPIO3_15_R -Text Label 7700 5350 1 60 ~ 0 -GPIO3_14_R -Text Label 7800 5350 1 60 ~ 0 -GPIO3_12_R -Text Label 7900 5350 1 60 ~ 0 -GPIO3_13_R -Text Label 8000 5350 1 60 ~ 0 -GPIO3_11_R -Text Label 8200 5350 1 60 ~ 0 -GPIO3_10_R -Text Label 8400 5350 1 60 ~ 0 -GPIO3_8_R -Text Label 8500 5350 1 60 ~ 0 -GPIO3_9_R + 11100 6400 10200 6400 +Text Label 9100 6000 0 60 ~ 0 +MCU_LCD_RD +Text Label 9100 6200 0 60 ~ 0 +MCU_LCD_TE +Text Label 6900 6000 0 60 ~ 0 +MCU_ADDR +Text Label 9100 6400 0 60 ~ 0 +MCU_IO_STBX +Text Label 10300 6000 0 60 ~ 0 +MCU_LCD_RD_R +Text Label 10300 6200 0 60 ~ 0 +MCU_LCD_TE_R +Text Label 8000 6000 0 60 ~ 0 +MCU_ADDR_R +Text Label 10300 6400 0 60 ~ 0 +MCU_IO_STBX_R +Text Label 7100 5400 1 60 ~ 0 +MCU_D7_R +Text Label 7200 5400 1 60 ~ 0 +MCU_D6_R +Text Label 7300 5400 1 60 ~ 0 +MCU_D4_R +Text Label 7400 5400 1 60 ~ 0 +MCU_D5_R +Text Label 7500 5400 1 60 ~ 0 +MCU_D3_R +Text Label 7700 5400 1 60 ~ 0 +MCU_D2_R +Text Label 7900 5400 1 60 ~ 0 +MCU_D0_R +Text Label 8000 5400 1 60 ~ 0 +MCU_D1_R Wire Wire Line - 6300 4800 5500 4800 + 4800 6000 4100 6000 Wire Wire Line - 6300 4900 5500 4900 + 4800 6100 4100 6100 Wire Wire Line - 6300 5000 5500 5000 + 4800 6200 4100 6200 Wire Wire Line - 6300 5100 5500 5100 + 4800 6300 4100 6300 Wire Wire Line - 6300 5700 5500 5700 + 6600 6000 5900 6000 Wire Wire Line - 6300 5800 5500 5800 + 6600 6100 5900 6100 Wire Wire Line - 6300 5900 5500 5900 + 6600 6200 5900 6200 Wire Wire Line - 6300 6000 5500 6000 -Text Label 5600 4800 0 60 ~ 0 -GPIO3_15_R -Text Label 5600 4900 0 60 ~ 0 -GPIO3_14_R -Text Label 5600 5000 0 60 ~ 0 -GPIO3_12_R -Text Label 5600 5100 0 60 ~ 0 -GPIO3_13_R -Text Label 5600 5700 0 60 ~ 0 -GPIO3_11_R -Text Label 5600 5800 0 60 ~ 0 -GPIO3_10_R -Text Label 5600 5900 0 60 ~ 0 -GPIO3_8_R -Text Label 5600 6000 0 60 ~ 0 -GPIO3_9_R + 6600 6300 5900 6300 +Text Label 4200 6000 0 60 ~ 0 +MCU_D7_R +Text Label 4200 6100 0 60 ~ 0 +MCU_D6_R +Text Label 4200 6200 0 60 ~ 0 +MCU_D4_R +Text Label 4200 6300 0 60 ~ 0 +MCU_D5_R +Text Label 6000 6000 0 60 ~ 0 +MCU_D3_R +Text Label 6000 6100 0 60 ~ 0 +MCU_D2_R +Text Label 6000 6200 0 60 ~ 0 +MCU_D0_R +Text Label 6000 6300 0 60 ~ 0 +MCU_D1_R $Comp L R R22 U 1 1 53A915E9 -P 1350 5300 -F 0 "R22" V 1430 5300 50 0000 C CNN -F 1 "220R" V 1350 5300 50 0000 C CNN -F 2 "" H 1350 5300 60 0000 C CNN -F 3 "" H 1350 5300 60 0000 C CNN -F 4 "Yageo" V 1350 5300 60 0001 C CNN "Mfr" -F 5 "RC0603FR-07220RL" V 1350 5300 60 0001 C CNN "Part" - 1 1350 5300 +P 1550 5300 +F 0 "R22" V 1630 5300 50 0000 C CNN +F 1 "220R" V 1550 5300 50 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 1550 5300 60 0001 C CNN +F 3 "" H 1550 5300 60 0000 C CNN +F 4 "Yageo" V 1550 5300 60 0001 C CNN "Mfr" +F 5 "RC0603FR-07220RL" V 1550 5300 60 0001 C CNN "Part" + 1 1550 5300 0 1 -1 0 $EndComp Wire Wire Line - 1700 5100 1700 5300 + 1900 5100 1900 5300 Wire Wire Line - 1700 5300 1600 5300 -Connection ~ 1700 5100 + 1900 5300 1800 5300 +Connection ~ 1900 5100 Wire Wire Line - 1100 5300 1000 5300 -Wire Wire Line - 9850 3900 9950 3900 -Wire Wire Line - 9950 3900 9950 4000 -Wire Wire Line - 9950 4000 10450 4000 -Text Label 1100 800 0 60 ~ 0 + 1300 5300 1200 5300 +Text Label 1300 800 0 60 ~ 0 VBAT Wire Bus Line - 7400 700 10550 700 + 6900 700 10050 700 Entry Wire Line - 7600 700 7700 800 + 7100 700 7200 800 +Entry Wire Line + 7200 700 7300 800 +Entry Wire Line + 7300 700 7400 800 +Entry Wire Line + 7400 700 7500 800 +Entry Wire Line + 7500 700 7600 800 Entry Wire Line 7700 700 7800 800 Entry Wire Line @@ -1287,6 +1285,8 @@ Entry Wire Line 7900 700 8000 800 Entry Wire Line 8000 700 8100 800 +Entry Wire Line + 8100 700 8200 800 Entry Wire Line 8200 700 8300 800 Entry Wire Line @@ -1294,214 +1294,204 @@ Entry Wire Line Entry Wire Line 8400 700 8500 800 Entry Wire Line - 8500 700 8600 800 + 9950 2300 10050 2200 Entry Wire Line - 8600 700 8700 800 + 9950 2400 10050 2300 Entry Wire Line - 8700 700 8800 800 -Entry Wire Line - 8800 700 8900 800 -Entry Wire Line - 8900 700 9000 800 -Entry Wire Line - 10450 2400 10550 2300 -Entry Wire Line - 10450 2500 10550 2400 -Entry Wire Line - 10450 2600 10550 2500 + 9950 2500 10050 2400 Wire Wire Line - 7500 1550 7500 1450 + 7000 1450 7000 1350 Wire Wire Line - 7500 1450 7400 1450 + 7000 1350 6900 1350 Wire Wire Line - 7400 900 7600 900 + 6900 900 7100 900 Wire Wire Line - 7600 900 7600 1550 -Text HLabel 7400 700 0 60 BiDi ~ 0 + 7100 900 7100 1450 +Text HLabel 6900 700 0 60 BiDi ~ 0 LCD_DB[15..0] -Text HLabel 7400 900 0 60 Input ~ 0 +Text HLabel 6900 900 0 60 Input ~ 0 LCD_TE -Text HLabel 6000 3200 0 60 Input ~ 0 +Text HLabel 5400 3100 0 60 Input ~ 0 SW_R -Text HLabel 6000 3500 0 60 Input ~ 0 +Text HLabel 5400 3400 0 60 Input ~ 0 SW_ROT_B -Text HLabel 6000 3400 0 60 Input ~ 0 +Text HLabel 5400 3300 0 60 Input ~ 0 SW_ROT_A -Text HLabel 6000 3300 0 60 Input ~ 0 +Text HLabel 5400 3200 0 60 Input ~ 0 SW_D -Text HLabel 6000 3600 0 60 Input ~ 0 +Text HLabel 5400 3500 0 60 Input ~ 0 SW_SEL -Text HLabel 8300 5450 3 60 Input ~ 0 +Text HLabel 7800 5500 3 60 Input ~ 0 SW_U -Text HLabel 8600 5450 3 60 Input ~ 0 +Text HLabel 8100 5500 3 60 Input ~ 0 SW_L -Text HLabel 6550 2700 0 60 Output ~ 0 +Text HLabel 6050 2600 0 60 Output ~ 0 LCD_BACKLIGHT -Text HLabel 10400 3400 2 60 Output ~ 0 +Text HLabel 10400 3300 2 60 Output ~ 0 LCD_RESET# -Text HLabel 10400 2900 2 60 Output ~ 0 -LCD_RS Text HLabel 10400 2800 2 60 Output ~ 0 -LCD_RD# +LCD_RS Text HLabel 10400 2700 2 60 Output ~ 0 +LCD_RD# +Text HLabel 10400 2600 2 60 Output ~ 0 LCD_WR# -Text HLabel 3500 1700 2 60 BiDi ~ 0 +Text HLabel 3700 1700 2 60 BiDi ~ 0 TP_U -Text HLabel 3500 1600 2 60 BiDi ~ 0 +Text HLabel 3700 1600 2 60 BiDi ~ 0 TP_L -Text HLabel 3500 1500 2 60 BiDi ~ 0 +Text HLabel 3700 1500 2 60 BiDi ~ 0 TP_D -Text HLabel 3500 1400 2 60 BiDi ~ 0 +Text HLabel 3700 1400 2 60 BiDi ~ 0 TP_R -Text HLabel 7400 1450 0 60 BiDi ~ 0 +Text HLabel 6900 1350 0 60 BiDi ~ 0 TP_R -Text HLabel 6550 2400 0 60 BiDi ~ 0 +Text HLabel 6050 2300 0 60 BiDi ~ 0 TP_D -Text HLabel 6550 2500 0 60 BiDi ~ 0 +Text HLabel 6050 2400 0 60 BiDi ~ 0 TP_L -Text HLabel 6550 2600 0 60 BiDi ~ 0 +Text HLabel 6050 2500 0 60 BiDi ~ 0 TP_U -Text HLabel 1400 3000 0 60 Output ~ 0 +Text HLabel 1200 3000 0 60 Output ~ 0 I2S0_TX_SDA -Text HLabel 1400 3100 0 60 Output ~ 0 +Text HLabel 1200 3100 0 60 Output ~ 0 I2S0_WS -Text HLabel 1400 3200 0 60 Output ~ 0 +Text HLabel 1200 3200 0 60 Output ~ 0 I2S0_MCLK -Text HLabel 3600 3100 2 60 Output ~ 0 +Text HLabel 3800 3100 2 60 Output ~ 0 I2S0_SCK -Text HLabel 3500 3500 2 60 BiDi ~ 0 +Text HLabel 3700 3500 2 60 BiDi ~ 0 SDA -Text HLabel 3500 3600 2 60 Output ~ 0 +Text HLabel 3700 3600 2 60 Output ~ 0 SCL -Text HLabel 1500 4300 0 60 Input ~ 0 +Text HLabel 1700 4300 0 60 Input ~ 0 SD_CD -Text HLabel 1500 4400 0 60 BiDi ~ 0 +Text HLabel 1700 4400 0 60 BiDi ~ 0 SD_DAT2 -Text HLabel 1500 4500 0 60 BiDi ~ 0 +Text HLabel 1700 4500 0 60 BiDi ~ 0 SD_DAT0 -Text HLabel 1500 4600 0 60 BiDi ~ 0 +Text HLabel 1700 4600 0 60 BiDi ~ 0 SD_CMD -Text HLabel 1500 4700 0 60 Output ~ 0 +Text HLabel 1700 4700 0 60 Output ~ 0 SD_CLK -Text HLabel 3900 4300 2 60 BiDi ~ 0 +Text HLabel 4400 4300 2 60 BiDi ~ 0 SD_DAT3 -Text HLabel 3900 4400 2 60 BiDi ~ 0 +Text HLabel 4400 4400 2 60 BiDi ~ 0 SD_DAT1 -Text HLabel 1000 5300 0 60 Input ~ 0 +Text HLabel 1200 5300 0 60 Input ~ 0 I2S0_RX_SDA $Comp L RPACK4 RP4 U 1 1 53AB047A -P 5200 950 -F 0 "RP4" H 5200 1200 60 0000 C CNN -F 1 "220R" H 5200 700 60 0000 C CNN -F 2 "" H 5200 950 60 0000 C CNN -F 3 "" H 5200 950 60 0000 C CNN -F 4 "Panasonic" H 5200 950 60 0001 C CNN "Mfr" -F 5 "EXB-38V221JV" H 5200 950 60 0001 C CNN "Part" - 1 5200 950 +P 7700 6150 +F 0 "RP4" H 7700 6400 60 0000 C CNN +F 1 "220R" H 7700 5900 60 0000 C CNN +F 2 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 7700 6150 60 0001 C CNN +F 3 "" H 7700 6150 60 0000 C CNN +F 4 "Panasonic" H 7700 6150 60 0001 C CNN "Mfr" +F 5 "EXB-38V221JV" H 7700 6150 60 0001 C CNN "Part" + 1 7700 6150 1 0 0 -1 $EndComp $Comp L RPACK4 RP6 U 1 1 53AB04B9 -P 5300 4950 -F 0 "RP6" H 5300 5200 60 0000 C CNN -F 1 "220R" H 5300 4700 60 0000 C CNN -F 2 "" H 5300 4950 60 0000 C CNN -F 3 "" H 5300 4950 60 0000 C CNN -F 4 "Panasonic" H 5300 4950 60 0001 C CNN "Mfr" -F 5 "EXB-38V221JV" H 5300 4950 60 0001 C CNN "Part" - 1 5300 4950 +P 3900 6150 +F 0 "RP6" H 3900 6400 60 0000 C CNN +F 1 "220R" H 3900 5900 60 0000 C CNN +F 2 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 3900 6150 60 0001 C CNN +F 3 "" H 3900 6150 60 0000 C CNN +F 4 "Panasonic" H 3900 6150 60 0001 C CNN "Mfr" +F 5 "EXB-38V221JV" H 3900 6150 60 0001 C CNN "Part" + 1 3900 6150 1 0 0 -1 $EndComp $Comp L RPACK4 RP7 U 1 1 53AB04D6 -P 5300 5850 -F 0 "RP7" H 5300 6100 60 0000 C CNN -F 1 "220R" H 5300 5600 60 0000 C CNN -F 2 "" H 5300 5850 60 0000 C CNN -F 3 "" H 5300 5850 60 0000 C CNN -F 4 "Panasonic" H 5300 5850 60 0001 C CNN "Mfr" -F 5 "EXB-38V221JV" H 5300 5850 60 0001 C CNN "Part" - 1 5300 5850 +P 5700 6150 +F 0 "RP7" H 5700 6400 60 0000 C CNN +F 1 "220R" H 5700 5900 60 0000 C CNN +F 2 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 5700 6150 60 0001 C CNN +F 3 "" H 5700 6150 60 0000 C CNN +F 4 "Panasonic" H 5700 6150 60 0001 C CNN "Mfr" +F 5 "EXB-38V221JV" H 5700 6150 60 0001 C CNN "Part" + 1 5700 6150 1 0 0 -1 $EndComp Wire Wire Line - 6000 1000 5400 1000 + 8800 6200 7900 6200 Wire Wire Line - 4500 1000 5000 1000 -Text Label 4600 900 0 60 ~ 0 + 6800 6200 7500 6200 +Text Label 6900 6100 0 60 ~ 0 P2_8 -Text Label 5500 900 0 60 ~ 0 +Text Label 8000 6100 0 60 ~ 0 P2_8_R $Comp L R R1 U 1 1 53AB79CA -P 5250 1700 -F 0 "R1" V 5330 1700 50 0000 C CNN -F 1 "220R" V 5250 1700 50 0000 C CNN -F 2 "" H 5250 1700 60 0000 C CNN -F 3 "" H 5250 1700 60 0000 C CNN -F 4 "Yageo" V 5250 1700 60 0001 C CNN "Mfr" -F 5 "RC0603FR-07220RL" V 5250 1700 60 0001 C CNN "Part" - 1 5250 1700 +P 9950 6000 +F 0 "R1" V 10030 6000 50 0000 C CNN +F 1 "220R" V 9950 6000 50 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 9950 6000 60 0001 C CNN +F 3 "" H 9950 6000 60 0000 C CNN +F 4 "Yageo" V 9950 6000 60 0001 C CNN "Mfr" +F 5 "RC0603FR-07220RL" V 9950 6000 60 0001 C CNN "Part" + 1 9950 6000 0 1 -1 0 $EndComp $Comp L R R2 U 1 1 53AB79D5 -P 5250 1900 -F 0 "R2" V 5330 1900 50 0000 C CNN -F 1 "220R" V 5250 1900 50 0000 C CNN -F 2 "" H 5250 1900 60 0000 C CNN -F 3 "" H 5250 1900 60 0000 C CNN -F 4 "Yageo" V 5250 1900 60 0001 C CNN "Mfr" -F 5 "RC0603FR-07220RL" V 5250 1900 60 0001 C CNN "Part" - 1 5250 1900 +P 9950 6200 +F 0 "R2" V 10030 6200 50 0000 C CNN +F 1 "220R" V 9950 6200 50 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 9950 6200 60 0001 C CNN +F 3 "" H 9950 6200 60 0000 C CNN +F 4 "Yageo" V 9950 6200 60 0001 C CNN "Mfr" +F 5 "RC0603FR-07220RL" V 9950 6200 60 0001 C CNN "Part" + 1 9950 6200 0 1 -1 0 $EndComp $Comp L R R3 U 1 1 53AB79EA -P 5250 2100 -F 0 "R3" V 5330 2100 50 0000 C CNN -F 1 "220R" V 5250 2100 50 0000 C CNN -F 2 "" H 5250 2100 60 0000 C CNN -F 3 "" H 5250 2100 60 0000 C CNN -F 4 "Yageo" V 5250 2100 60 0001 C CNN "Mfr" -F 5 "RC0603FR-07220RL" V 5250 2100 60 0001 C CNN "Part" - 1 5250 2100 +P 9950 6400 +F 0 "R3" V 10030 6400 50 0000 C CNN +F 1 "220R" V 9950 6400 50 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 9950 6400 60 0001 C CNN +F 3 "" H 9950 6400 60 0000 C CNN +F 4 "Yageo" V 9950 6400 60 0001 C CNN "Mfr" +F 5 "RC0603FR-07220RL" V 9950 6400 60 0001 C CNN "Part" + 1 9950 6400 0 1 -1 0 $EndComp -Text Label 9950 3800 0 60 ~ 0 +Text Label 9700 3700 0 60 ~ 0 P2_8_R Wire Bus Line - 10550 700 10550 2500 + 10050 700 10050 2400 Wire Wire Line - 9850 2800 10400 2800 + 9350 2700 10400 2700 Wire Wire Line - 9850 2700 10400 2700 + 9350 2600 10400 2600 Wire Wire Line - 10400 3000 9850 3000 + 10400 2900 9350 2900 Wire Wire Line - 10400 3200 9850 3200 + 10400 3100 9350 3100 Wire Wire Line - 9850 3400 10400 3400 + 9350 3300 10400 3300 Wire Wire Line - 10400 3800 9850 3800 -NoConn ~ 9850 3600 -NoConn ~ 9850 3700 -NoConn ~ 6650 3000 -NoConn ~ 6650 2800 + 10400 3700 9350 3700 +NoConn ~ 9350 3500 +NoConn ~ 9350 3600 +NoConn ~ 6150 2900 +NoConn ~ 6150 2700 $Comp L C C42 U 1 1 53B1911F P 2400 6100 F 0 "C42" H 2450 6200 50 0000 L CNN F 1 "10U" H 2450 6000 50 0000 L CNN -F 2 "" H 2400 6100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 2400 6100 60 0001 C CNN F 3 "" H 2400 6100 60 0000 C CNN F 4 "Murata" H 2400 6100 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 2400 6100 60 0001 C CNN "Part" @@ -1509,10 +1499,10 @@ F 5 "GRM21BR61A106KE19" H 2400 6100 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR097 +L GND #PWR088 U 1 1 53B1912C P 2400 6400 -F 0 "#PWR097" H 2400 6400 30 0001 C CNN +F 0 "#PWR088" H 2400 6400 30 0001 C CNN F 1 "GND" H 2400 6330 30 0001 C CNN F 2 "" H 2400 6400 60 0000 C CNN F 3 "" H 2400 6400 60 0000 C CNN @@ -1530,7 +1520,7 @@ U 1 1 53B1A065 P 2800 6100 F 0 "C43" H 2850 6200 50 0000 L CNN F 1 "10U" H 2850 6000 50 0000 L CNN -F 2 "" H 2800 6100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 2800 6100 60 0001 C CNN F 3 "" H 2800 6100 60 0000 C CNN F 4 "Murata" H 2800 6100 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 2800 6100 60 0001 C CNN "Part" @@ -1538,10 +1528,10 @@ F 5 "GRM21BR61A106KE19" H 2800 6100 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR098 +L GND #PWR089 U 1 1 53B1A072 P 2800 6400 -F 0 "#PWR098" H 2800 6400 30 0001 C CNN +F 0 "#PWR089" H 2800 6400 30 0001 C CNN F 1 "GND" H 2800 6330 30 0001 C CNN F 2 "" H 2800 6400 60 0000 C CNN F 3 "" H 2800 6400 60 0000 C CNN @@ -1554,6 +1544,8 @@ Connection ~ 2400 5800 Wire Wire Line 2800 6300 2800 6400 Wire Wire Line - 6650 2700 6550 2700 -NoConn ~ 9850 3500 + 6150 2600 6050 2600 +NoConn ~ 9350 3400 +Wire Wire Line + 10400 3800 9350 3800 $EndSCHEMATC diff --git a/hardware/portapack_h1/lcd_sw_sd.sch b/hardware/portapack_h1/lcd_sw_sd.sch index 204c250c6..73a879543 100644 --- a/hardware/portapack_h1/lcd_sw_sd.sch +++ b/hardware/portapack_h1/lcd_sw_sd.sch @@ -3,7 +3,7 @@ LIBS:hackrf_expansion LIBS:wolfson LIBS:passive LIBS:lcd_kingtech -LIBS:power +LIBS:supply LIBS:io_expander LIBS:trs_jack LIBS:battery @@ -19,25 +19,25 @@ LIBS:hole LIBS:sharebrained LIBS:fiducial LIBS:portapack_h1-cache -EELAYER 24 0 +EELAYER 25 0 EELAYER END $Descr A4 11693 8268 encoding utf-8 Sheet 3 4 Title "PortaPack H1" -Date "13 Oct 2014" -Rev "20140826" +Date "21 Aug 2015" +Rev "20150821" Comp "ShareBrained Technology, Inc." -Comment1 "Copyright © 2014 Jared Boone" +Comment1 "Copyright © 2014, 2015 Jared Boone" Comment2 "License: GNU General Public License, version 2" Comment3 "" Comment4 "" $EndDescr $Comp -L GND #PWR039 +L GND #PWR030 U 1 1 53A91602 P 9800 1800 -F 0 "#PWR039" H 9800 1800 30 0001 C CNN +F 0 "#PWR030" H 9800 1800 30 0001 C CNN F 1 "GND" H 9800 1730 30 0001 C CNN F 2 "" H 9800 1800 60 0000 C CNN F 3 "" H 9800 1800 60 0000 C CNN @@ -45,10 +45,10 @@ F 3 "" H 9800 1800 60 0000 C CNN 0 1 1 0 $EndComp $Comp -L GND #PWR040 +L GND #PWR031 U 1 1 53A91608 P 9800 5000 -F 0 "#PWR040" H 9800 5000 30 0001 C CNN +F 0 "#PWR031" H 9800 5000 30 0001 C CNN F 1 "GND" H 9800 4930 30 0001 C CNN F 2 "" H 9800 5000 60 0000 C CNN F 3 "" H 9800 5000 60 0000 C CNN @@ -56,10 +56,10 @@ F 3 "" H 9800 5000 60 0000 C CNN 0 1 1 0 $EndComp $Comp -L +3.3V #PWR041 +L +3.3V #PWR032 U 1 1 53A9160E P 9700 1700 -F 0 "#PWR041" H 9700 1660 30 0001 C CNN +F 0 "#PWR032" H 9700 1660 30 0001 C CNN F 1 "+3.3V" H 9700 1810 30 0000 C CNN F 2 "" H 9700 1700 60 0000 C CNN F 3 "" H 9700 1700 60 0000 C CNN @@ -67,10 +67,10 @@ F 3 "" H 9700 1700 60 0000 C CNN 0 -1 -1 0 $EndComp $Comp -L +3.3V #PWR042 +L +3.3V #PWR033 U 1 1 53A91614 P 9700 1900 -F 0 "#PWR042" H 9700 1860 30 0001 C CNN +F 0 "#PWR033" H 9700 1860 30 0001 C CNN F 1 "+3.3V" H 9700 2010 30 0000 C CNN F 2 "" H 9700 1900 60 0000 C CNN F 3 "" H 9700 1900 60 0000 C CNN @@ -78,10 +78,10 @@ F 3 "" H 9700 1900 60 0000 C CNN 0 -1 -1 0 $EndComp $Comp -L GND #PWR043 +L GND #PWR034 U 1 1 53A91623 P 9800 5700 -F 0 "#PWR043" H 9800 5700 30 0001 C CNN +F 0 "#PWR034" H 9800 5700 30 0001 C CNN F 1 "GND" H 9800 5630 30 0001 C CNN F 2 "" H 9800 5700 60 0000 C CNN F 3 "" H 9800 5700 60 0000 C CNN @@ -110,7 +110,7 @@ U 1 1 53A91635 P 8300 1350 F 0 "R20" V 8380 1350 50 0000 C CNN F 1 "47K" V 8300 1350 50 0000 C CNN -F 2 "" H 8300 1350 60 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 8300 1350 60 0001 C CNN F 3 "" H 8300 1350 60 0000 C CNN F 4 "Yageo" V 8300 1350 60 0001 C CNN "Mfr" F 5 "RC0603FR-0747KL" V 8300 1350 60 0001 C CNN "Part" @@ -118,10 +118,10 @@ F 5 "RC0603FR-0747KL" V 8300 1350 60 0001 C CNN "Part" 1 0 0 1 $EndComp $Comp -L GND #PWR044 +L GND #PWR035 U 1 1 53A91640 P 9700 2600 -F 0 "#PWR044" H 9700 2600 30 0001 C CNN +F 0 "#PWR035" H 9700 2600 30 0001 C CNN F 1 "GND" H 9700 2530 30 0001 C CNN F 2 "" H 9700 2600 60 0000 C CNN F 3 "" H 9700 2600 60 0000 C CNN @@ -152,7 +152,7 @@ U 1 1 53A91651 P 10350 3550 F 0 "J3" H 10350 5650 60 0000 C CNN F 1 "KINGTECH_DW0240A2BZ_FPC" H 10350 1250 60 0000 C CNN -F 2 "" H 10250 3550 60 0000 C CNN +F 2 "molex:MOLEX_54132-40XX_LR" H 10250 3550 60 0001 C CNN F 3 "" H 10250 3550 60 0000 C CNN F 4 "FCI" H 10350 3550 60 0001 C CNN "Mfr" F 5 "62684-401100ALF" H 10350 3550 60 0001 C CNN "Part" @@ -165,7 +165,7 @@ U 1 1 53A91657 P 8300 2350 F 0 "R19" V 8380 2350 50 0000 C CNN F 1 "47K" V 8300 2350 50 0000 C CNN -F 2 "" H 8300 2350 60 0000 C CNN +F 2 "ipc_resc:IPC_RESC1608X55N" H 8300 2350 60 0001 C CNN F 3 "" H 8300 2350 60 0000 C CNN F 4 "Yageo" V 8300 2350 60 0001 C CNN "Mfr" F 5 "RC0603FR-0747KL" V 8300 2350 60 0001 C CNN "Part" @@ -173,10 +173,10 @@ F 5 "RC0603FR-0747KL" V 8300 2350 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR045 +L GND #PWR036 U 1 1 53A9165D P 8300 2700 -F 0 "#PWR045" H 8300 2700 30 0001 C CNN +F 0 "#PWR036" H 8300 2700 30 0001 C CNN F 1 "GND" H 8300 2630 30 0001 C CNN F 2 "" H 8300 2700 60 0000 C CNN F 3 "" H 8300 2700 60 0000 C CNN @@ -184,10 +184,10 @@ F 3 "" H 8300 2700 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L +1.8V #PWR046 +L +1.8V #PWR037 U 1 1 53A91663 P 9700 5100 -F 0 "#PWR046" H 9700 5240 20 0001 C CNN +F 0 "#PWR037" H 9700 5240 20 0001 C CNN F 1 "+1.8V" H 9700 5210 30 0000 C CNN F 2 "" H 9700 5100 60 0000 C CNN F 3 "" H 9700 5100 60 0000 C CNN @@ -195,10 +195,10 @@ F 3 "" H 9700 5100 60 0000 C CNN 0 -1 -1 0 $EndComp $Comp -L GND #PWR047 +L GND #PWR038 U 1 1 53A9166C P 9700 3000 -F 0 "#PWR047" H 9700 3000 30 0001 C CNN +F 0 "#PWR038" H 9700 3000 30 0001 C CNN F 1 "GND" H 9700 2930 30 0001 C CNN F 2 "" H 9700 3000 60 0000 C CNN F 3 "" H 9700 3000 60 0000 C CNN @@ -293,7 +293,7 @@ U 1 1 53A8C6D0 P 3900 6300 F 0 "J2" H 3450 6950 60 0000 C CNN F 1 "MICROSD_DETSW" H 4050 6950 60 0000 C CNN -F 2 "" H 3900 6300 60 0000 C CNN +F 2 "alps:ALPS_SCHA4B0100" H 3900 6300 60 0001 C CNN F 3 "" H 3900 6300 60 0000 C CNN F 4 "ALPS" H 3900 6300 60 0001 C CNN "Mfr" F 5 "SCHA4B0415" H 3900 6300 60 0001 C CNN "Part" @@ -301,10 +301,10 @@ F 5 "SCHA4B0415" H 3900 6300 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR048 +L GND #PWR039 U 1 1 53A8C6D6 P 3100 6300 -F 0 "#PWR048" H 3100 6300 30 0001 C CNN +F 0 "#PWR039" H 3100 6300 30 0001 C CNN F 1 "GND" H 3100 6230 30 0001 C CNN F 2 "" H 3100 6300 60 0000 C CNN F 3 "" H 3100 6300 60 0000 C CNN @@ -312,10 +312,10 @@ F 3 "" H 3100 6300 60 0000 C CNN 0 1 1 0 $EndComp $Comp -L GND #PWR049 +L GND #PWR040 U 1 1 53A8C6E2 P 3100 6700 -F 0 "#PWR049" H 3100 6700 30 0001 C CNN +F 0 "#PWR040" H 3100 6700 30 0001 C CNN F 1 "GND" H 3100 6630 30 0001 C CNN F 2 "" H 3100 6700 60 0000 C CNN F 3 "" H 3100 6700 60 0000 C CNN @@ -328,7 +328,7 @@ U 1 1 53AA73CE P 2800 7100 F 0 "C27" H 2850 7200 50 0000 L CNN F 1 "100N" H 2850 7000 50 0000 L CNN -F 2 "" H 2800 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC1005X55N" H 2800 7100 60 0001 C CNN F 3 "" H 2800 7100 60 0000 C CNN F 4 "Murata" H 2800 7100 60 0001 C CNN "Mfr" F 5 "GRM155R61A104KA01" H 2800 7100 60 0001 C CNN "Part" @@ -336,10 +336,10 @@ F 5 "GRM155R61A104KA01" H 2800 7100 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR050 +L GND #PWR041 U 1 1 53A8C6EF P 2400 7400 -F 0 "#PWR050" H 2400 7400 30 0001 C CNN +F 0 "#PWR041" H 2400 7400 30 0001 C CNN F 1 "GND" H 2400 7330 30 0001 C CNN F 2 "" H 2400 7400 60 0000 C CNN F 3 "" H 2400 7400 60 0000 C CNN @@ -347,10 +347,10 @@ F 3 "" H 2400 7400 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR051 +L GND #PWR042 U 1 1 53A8C6F5 P 4200 7200 -F 0 "#PWR051" H 4200 7200 30 0001 C CNN +F 0 "#PWR042" H 4200 7200 30 0001 C CNN F 1 "GND" H 4200 7130 30 0001 C CNN F 2 "" H 4200 7200 60 0000 C CNN F 3 "" H 4200 7200 60 0000 C CNN @@ -363,7 +363,7 @@ U 1 1 53A8C6FD P 2500 1450 F 0 "SW1" H 2500 2050 60 0000 C CNN F 1 "CK_TSWB-3N-CB" H 2500 850 60 0000 C CNN -F 2 "" H 2500 1450 60 0000 C CNN +F 2 "ck:CK_TSWB-3N-CB222_LFS" H 2500 1450 60 0001 C CNN F 3 "" H 2500 1450 60 0000 C CNN F 4 "C&K" H 2500 1450 60 0001 C CNN "Mfr" F 5 "TSWB-3N-CB111 LFS" H 2500 1450 60 0001 C CNN "Part" @@ -371,10 +371,10 @@ F 5 "TSWB-3N-CB111 LFS" H 2500 1450 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR052 +L GND #PWR043 U 1 1 53A8C70A P 1400 2000 -F 0 "#PWR052" H 1400 2000 30 0001 C CNN +F 0 "#PWR043" H 1400 2000 30 0001 C CNN F 1 "GND" H 1400 1930 30 0001 C CNN F 2 "" H 1400 2000 60 0000 C CNN F 3 "" H 1400 2000 60 0000 C CNN @@ -382,10 +382,10 @@ F 3 "" H 1400 2000 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR053 +L GND #PWR044 U 1 1 53A8C710 P 3600 2000 -F 0 "#PWR053" H 3600 2000 30 0001 C CNN +F 0 "#PWR044" H 3600 2000 30 0001 C CNN F 1 "GND" H 3600 1930 30 0001 C CNN F 2 "" H 3600 2000 60 0000 C CNN F 3 "" H 3600 2000 60 0000 C CNN @@ -393,10 +393,10 @@ F 3 "" H 3600 2000 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L GND #PWR054 +L GND #PWR045 U 1 1 53A8C716 P 4000 7200 -F 0 "#PWR054" H 4000 7200 30 0001 C CNN +F 0 "#PWR045" H 4000 7200 30 0001 C CNN F 1 "GND" H 4000 7130 30 0001 C CNN F 2 "" H 4000 7200 60 0000 C CNN F 3 "" H 4000 7200 60 0000 C CNN @@ -409,7 +409,7 @@ U 1 1 53A8C71C P 2400 7100 F 0 "C26" H 2450 7200 50 0000 L CNN F 1 "10U" H 2450 7000 50 0000 L CNN -F 2 "" H 2400 7100 60 0000 C CNN +F 2 "ipc_capc:IPC_CAPC2012X140N" H 2400 7100 60 0001 C CNN F 3 "" H 2400 7100 60 0000 C CNN F 4 "Murata" H 2400 7100 60 0001 C CNN "Mfr" F 5 "GRM21BR61A106KE19" H 2400 7100 60 0001 C CNN "Part" @@ -417,10 +417,10 @@ F 5 "GRM21BR61A106KE19" H 2400 7100 60 0001 C CNN "Part" -1 0 0 -1 $EndComp $Comp -L GND #PWR055 +L GND #PWR046 U 1 1 53A8C722 P 2800 7400 -F 0 "#PWR055" H 2800 7400 30 0001 C CNN +F 0 "#PWR046" H 2800 7400 30 0001 C CNN F 1 "GND" H 2800 7330 30 0001 C CNN F 2 "" H 2800 7400 60 0000 C CNN F 3 "" H 2800 7400 60 0000 C CNN @@ -428,10 +428,10 @@ F 3 "" H 2800 7400 60 0000 C CNN 1 0 0 -1 $EndComp $Comp -L +3.3V #PWR056 +L +3.3V #PWR047 U 1 1 53A8C728 P 2800 5700 -F 0 "#PWR056" H 2800 5660 30 0001 C CNN +F 0 "#PWR047" H 2800 5660 30 0001 C CNN F 1 "+3.3V" H 2800 5810 30 0000 C CNN F 2 "" H 2800 5700 60 0000 C CNN F 3 "" H 2800 5700 60 0000 C CNN @@ -495,7 +495,7 @@ U 1 1 53A8C752 P 8000 4600 F 0 "LCD1" H 8000 5650 60 0000 C CNN F 1 "KINGTECH_DW0240A2BZ_PANEL" H 8000 3650 60 0000 C CNN -F 2 "" H 8000 4600 60 0000 C CNN +F 2 "lcd_kingtech:KINGTECH_DW0240A2BZ_PANEL" H 8000 4600 60 0001 C CNN F 3 "" H 8000 4600 60 0000 C CNN 1 8000 4600 1 0 0 -1 @@ -607,7 +607,7 @@ U 1 1 53C5B6EB P 8700 950 F 0 "Q1" H 8700 801 40 0000 R CNN F 1 "MOSFET_N" H 8700 1100 40 0000 R CNN -F 2 "" H 8570 1052 29 0000 C CNN +F 2 "ipc_sot:IPC_SOT95P230X110-3N" H 8570 1052 29 0001 C CNN F 3 "" H 8700 950 60 0000 C CNN F 4 "NXP" H 8700 950 60 0001 C CNN "Mfr" F 5 "2N7002P,215" H 8700 950 60 0001 C CNN "Part" @@ -615,10 +615,10 @@ F 5 "2N7002P,215" H 8700 950 60 0001 C CNN "Part" 1 0 0 -1 $EndComp $Comp -L GND #PWR057 +L GND #PWR048 U 1 1 53C5B707 P 8800 1250 -F 0 "#PWR057" H 8800 1250 30 0001 C CNN +F 0 "#PWR048" H 8800 1250 30 0001 C CNN F 1 "GND" H 8800 1180 30 0001 C CNN F 2 "" H 8800 1250 60 0000 C CNN F 3 "" H 8800 1250 60 0000 C CNN @@ -635,10 +635,10 @@ Wire Wire Line 8300 1000 8300 1100 Connection ~ 8300 1000 $Comp -L GND #PWR058 +L GND #PWR049 U 1 1 53C5B8B4 P 8300 1700 -F 0 "#PWR058" H 8300 1700 30 0001 C CNN +F 0 "#PWR049" H 8300 1700 30 0001 C CNN F 1 "GND" H 8300 1630 30 0001 C CNN F 2 "" H 8300 1700 60 0000 C CNN F 3 "" H 8300 1700 60 0000 C CNN diff --git a/hardware/portapack_h1/portapack_h1.cmp b/hardware/portapack_h1/portapack_h1.cmp deleted file mode 100644 index 550e9b6b9..000000000 --- a/hardware/portapack_h1/portapack_h1.cmp +++ /dev/null @@ -1,717 +0,0 @@ -Cmp-Mod V01 Created by CvPcb (2014-03-01 BZR 4730)-product date = Tuesday, August 26, 2014 'AMt' 09:05:06 AM - -BeginCmp -TimeStamp = /53A8C780/53A8D535; -Reference = BT1; -ValeurCmp = BATTERY; -IdModule = bat_coin:MPD_BU2032SM-BT-G; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C6A5; -Reference = C2; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C69F; -Reference = C3; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C6B1; -Reference = C4; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C6AB; -Reference = C5; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C687; -Reference = C6; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C70E; -Reference = C7; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C6F6; -Reference = C8; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C708; -Reference = C9; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C68D; -Reference = C10; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C72C; -Reference = C11; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C6F0; -Reference = C12; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C720; -Reference = C13; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF1137; -Reference = C14; -ValeurCmp = 220P; -IdModule = ipc_capc:IPC_CAPC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF112C; -Reference = C15; -ValeurCmp = 220P; -IdModule = ipc_capc:IPC_CAPC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF15D9; -Reference = C16; -ValeurCmp = 1U; -IdModule = ipc_capae:IPC_CAPAE430X540N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF15E8; -Reference = C17; -ValeurCmp = 1U; -IdModule = ipc_capae:IPC_CAPAE430X540N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C256; -Reference = C18; -ValeurCmp = 220U; -IdModule = ipc_capae:IPC_CAPAE830X620N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C25E; -Reference = C19; -ValeurCmp = 220U; -IdModule = ipc_capae:IPC_CAPAE830X620N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF2762; -Reference = C20; -ValeurCmp = 10U; -IdModule = ipc_capae:IPC_CAPAE430X540N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF2753; -Reference = C21; -ValeurCmp = 10U; -IdModule = ipc_capae:IPC_CAPAE430X540N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C27E; -Reference = C22; -ValeurCmp = 220P; -IdModule = ipc_capc:IPC_CAPC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C284; -Reference = C23; -ValeurCmp = 220P; -IdModule = ipc_capc:IPC_CAPC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C2AA; -Reference = C24; -ValeurCmp = 1U; -IdModule = ipc_capae:IPC_CAPAE430X540N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C2A2; -Reference = C25; -ValeurCmp = 220P; -IdModule = ipc_capc:IPC_CAPC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A9129D/53A8C71C; -Reference = C26; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A9129D/53AA73CE; -Reference = C27; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D527; -Reference = C28; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D548; -Reference = C29; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D542; -Reference = C30; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D54E; -Reference = C31; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D5C2; -Reference = C32; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D56C; -Reference = C33; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D5C8; -Reference = C34; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D572; -Reference = C35; -ValeurCmp = 100N; -IdModule = ipc_capc:IPC_CAPC1005X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D5DA; -Reference = C36; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D5E0; -Reference = C37; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D58C; -Reference = C38; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D5AA; -Reference = C39; -ValeurCmp = DNI; -IdModule = ipc_capc:IPC_CAPC1608X90N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D592; -Reference = C40; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D62C; -Reference = C41; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53B1911F; -Reference = C42; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53B1A065; -Reference = C43; -ValeurCmp = 10U; -IdModule = ipc_capc:IPC_CAPC2012X140N; -EndCmp - -BeginCmp -TimeStamp = /53B309AC; -Reference = FID1; -ValeurCmp = FIDUCIAL; -IdModule = fiducial:FIDUCIAL_65MIL; -EndCmp - -BeginCmp -TimeStamp = /53B30B4C; -Reference = FID2; -ValeurCmp = FIDUCIAL; -IdModule = fiducial:FIDUCIAL_65MIL; -EndCmp - -BeginCmp -TimeStamp = /53B30CEC; -Reference = FID3; -ValeurCmp = FIDUCIAL; -IdModule = fiducial:FIDUCIAL_65MIL; -EndCmp - -BeginCmp -TimeStamp = /53B30E8C; -Reference = FID4; -ValeurCmp = FIDUCIAL; -IdModule = fiducial:FIDUCIAL_65MIL; -EndCmp - -BeginCmp -TimeStamp = /5369BBC4; -Reference = H1; -ValeurCmp = HOLE1; -IdModule = hole:HOLE_3200UM_VIAS; -EndCmp - -BeginCmp -TimeStamp = /5369BBD8; -Reference = H2; -ValeurCmp = HOLE1; -IdModule = hole:HOLE_3200UM_VIAS; -EndCmp - -BeginCmp -TimeStamp = /5369BBEC; -Reference = H3; -ValeurCmp = HOLE1; -IdModule = hole:HOLE_3200UM_VIAS; -EndCmp - -BeginCmp -TimeStamp = /5369BC00; -Reference = H4; -ValeurCmp = HOLE1; -IdModule = hole:HOLE_3200UM_VIAS; -EndCmp - -BeginCmp -TimeStamp = /5369BC14; -Reference = H5; -ValeurCmp = HOLE1; -IdModule = hole:HOLE_3200UM_VIAS; -EndCmp - -BeginCmp -TimeStamp = /53A9129D/53A8C6D0; -Reference = J2; -ValeurCmp = MICROSD_DETSW; -IdModule = alps:ALPS_SCHA4B0100; -EndCmp - -BeginCmp -TimeStamp = /53A9129D/53A91651; -Reference = J3; -ValeurCmp = KINGTECH_DW0240A2BZ_FPC; -IdModule = molex:MOLEX_54132-40XX_LR; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF093C; -Reference = L1; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF20F3; -Reference = L2; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF20FE; -Reference = L3; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C2E2; -Reference = L4; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C2E8; -Reference = L5; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C2EE; -Reference = L6; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF25CC; -Reference = L7; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF25D7; -Reference = L8; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C2F4; -Reference = L9; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF0931; -Reference = L10; -ValeurCmp = L; -IdModule = ipc_indc:IPC_INDC1608X95N; -EndCmp - -BeginCmp -TimeStamp = /53A9129D/53A8C752; -Reference = LCD1; -ValeurCmp = KINGTECH_DW0240A2BZ_PANEL; -IdModule = lcd_kingtech:KINGTECH_DW0240A2BZ_PANEL; -EndCmp - -BeginCmp -TimeStamp = /53B1AE0D; -Reference = LOGO1; -ValeurCmp = SHAREBRAINED; -IdModule = sharebrained:sharebrained_text_300; -EndCmp - -BeginCmp -TimeStamp = /53B1B509; -Reference = LOGO2; -ValeurCmp = PORTAPACK_H1; -IdModule = sharebrained:portapack_text_300; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF0914; -Reference = P1; -ValeurCmp = TRS_JACK; -IdModule = cui:CUI_SJ-3524-SMT; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C2C6; -Reference = P2; -ValeurCmp = TRRS_SW_JACK; -IdModule = cui:CUI_SJ-43516-SMT; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF0926; -Reference = P3; -ValeurCmp = TRS_JACK; -IdModule = cui:CUI_SJ-3524-SMT; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8CDAE; -Reference = P20; -ValeurCmp = HACKRF_ONE_P20; -IdModule = header:HEADER_11X2_REV_SM_254_AP; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8CDB6; -Reference = P22; -ValeurCmp = HACKRF_ONE_P22; -IdModule = header:HEADER_13X2_REV_SM_254_AP; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8CDBE; -Reference = P28; -ValeurCmp = HACKRF_ONE_P28; -IdModule = header:HEADER_11X2_REV_SM_254_AP; -EndCmp - -BeginCmp -TimeStamp = /53A9129D/53C5B6EB; -Reference = Q1; -ValeurCmp = MOSFET_N; -IdModule = ipc_sot:IPC_SOT95P230X110-3N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53AB79CA; -Reference = R1; -ValeurCmp = 220R; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53AB79D5; -Reference = R2; -ValeurCmp = 220R; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53AB79EA; -Reference = R3; -ValeurCmp = 220R; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF0B7F; -Reference = R6; -ValeurCmp = 5K6; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF0B74; -Reference = R7; -ValeurCmp = 5K6; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF0B8A; -Reference = R8; -ValeurCmp = 5K6; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF0B95; -Reference = R9; -ValeurCmp = 5K6; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C2B0; -Reference = R10; -ValeurCmp = 47K; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C264; -Reference = R11; -ValeurCmp = 47K; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C26A; -Reference = R12; -ValeurCmp = 47K; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF2746; -Reference = R13; -ValeurCmp = 47K; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF273B; -Reference = R14; -ValeurCmp = 47K; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF2725; -Reference = R15; -ValeurCmp = 100R; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AF2730; -Reference = R16; -ValeurCmp = 100R; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C296; -Reference = R17; -ValeurCmp = 47K; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C29C; -Reference = R18; -ValeurCmp = 680R; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A9129D/53A91657; -Reference = R19; -ValeurCmp = 47K; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A9129D/53A91635; -Reference = R20; -ValeurCmp = 47K; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A915E9; -Reference = R22; -ValeurCmp = 220R; -IdModule = ipc_resc:IPC_RESC1608X55N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53AB09AD; -Reference = RP1; -ValeurCmp = 220R; -IdModule = ipc_resc:IPC_RESCAXS80P160X320X60-8N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53AB047A; -Reference = RP4; -ValeurCmp = 220R; -IdModule = ipc_resc:IPC_RESCAXS80P160X320X60-8N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53AB04B9; -Reference = RP6; -ValeurCmp = 220R; -IdModule = ipc_resc:IPC_RESCAXS80P160X320X60-8N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53AB04D6; -Reference = RP7; -ValeurCmp = 220R; -IdModule = ipc_resc:IPC_RESCAXS80P160X320X60-8N; -EndCmp - -BeginCmp -TimeStamp = /53A9129D/53A8C6FD; -Reference = SW1; -ValeurCmp = CK_TSWB-3N-CB; -IdModule = ck:CK_TSWB-3N-CB222_LFS; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C66D; -Reference = U1; -ValeurCmp = WM8731SEDS; -IdModule = ipc_sop:IPC_SOP65P780X200-28N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D586; -Reference = U2; -ValeurCmp = REGULATOR_SOT23_5; -IdModule = ipc_sot:IPC_SOT95P280X110-5N; -EndCmp - -BeginCmp -TimeStamp = /53A8C780/53A8D11B; -Reference = U3; -ValeurCmp = 5M40ZE64; -IdModule = ipc_qfp:IPC_QFP40P900X900X120-65N; -EndCmp - -BeginCmp -TimeStamp = /53A8BFC3/53A8C2D6; -Reference = X1; -ValeurCmp = MIC_ELECTRET; -IdModule = cui:CUI_CMA-4544PF-W; -EndCmp - -EndListe diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 98e22a008..8830b2d21 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -1,36 +1,47 @@ -(kicad_pcb (version 4) (host pcbnew "(2015-07-14 BZR 5938)-product") +(kicad_pcb (version 4) (host pcbnew "(2015-08-20 BZR 6109)-product") (general - (links 325) - (no_connects 124) - (area 50.179381 97.225799 180.874201 175.190501) + (links 291) + (no_connects 0) + (area 19.949999 22.3 274.050002 175.190501) (thickness 1.6) - (drawings 24) - (tracks 1715) + (drawings 110) + (tracks 1594) (zones 0) - (modules 100) - (nets 124) + (modules 77) + (nets 140) ) (page A4) + (title_block + (title "PortaPack H1") + (date 2015-08-31) + (rev 20150831) + (company "ShareBrained Technology, Inc.") + (comment 1 "License: GNU General Public License, version 2") + (comment 2 "Copyright (c) 2014, 2015 Jared Boone") + ) + (layers - (0 1_top signal hide) - (1 2_pwr mixed hide) - (2 3_gnd mixed hide) - (31 4_bot signal hide) + (0 1_top signal) + (1 2_pwr mixed) + (2 3_gnd mixed) + (31 4_bot signal) (32 B.Adhes user hide) (33 F.Adhes user hide) (34 B.Paste user hide) (35 F.Paste user hide) - (36 B.SilkS user hide) - (37 F.SilkS user hide) + (36 B.SilkS user) + (37 F.SilkS user) (38 B.Mask user hide) (39 F.Mask user hide) - (40 Dwgs.User user hide) + (40 Dwgs.User user) (41 Cmts.User user hide) (42 Eco1.User user hide) (43 Eco2.User user hide) (44 Edge.Cuts user) + (46 B.CrtYd user hide) + (47 F.CrtYd user hide) ) (setup @@ -44,10 +55,11 @@ (trace_min 0.2) (segment_width 0.1524) (edge_width 0.1) - (via_size 0.6985) - (via_drill 0.3429) - (via_min_size 0.6985) - (via_min_drill 0.3429) + (via_size 0.6858) + (via_drill 0.3302) + (via_min_size 0.6858) + (via_min_drill 0.3302) + (user_via 0.6858 0.3302) (uvia_size 0.508) (uvia_drill 0.127) (uvias_allowed no) @@ -66,7 +78,7 @@ (grid_origin 60 100) (visible_elements FFFEFFFF) (pcbplotparams - (layerselection 0x00030_80000001) + (layerselection 0x011fc_80000007) (usegerberextensions true) (excludeedgelayer true) (linewidth 0.152400) @@ -105,123 +117,139 @@ (net 10 /audio/I2S0_WS) (net 11 /audio/I2S0_WS_R) (net 12 /audio/LHPOUT) - (net 13 /audio/LLINEIN) - (net 14 /audio/LOUT) - (net 15 /audio/MICBIAS) - (net 16 /audio/MICIN) - (net 17 /audio/RHPOUT) - (net 18 /audio/RLINEIN) - (net 19 /audio/ROUT) - (net 20 /audio/SCL) - (net 21 /audio/SDA) - (net 22 /audio/VMID) - (net 23 /hackrf_if/CPLD_TCK) - (net 24 /hackrf_if/CPLD_TDI) - (net 25 /hackrf_if/GPIO3_10) - (net 26 /hackrf_if/GPIO3_10_R) - (net 27 /hackrf_if/GPIO3_11) - (net 28 /hackrf_if/GPIO3_11_R) - (net 29 /hackrf_if/GPIO3_12) - (net 30 /hackrf_if/GPIO3_12_R) - (net 31 /hackrf_if/GPIO3_13) - (net 32 /hackrf_if/GPIO3_13_R) - (net 33 /hackrf_if/GPIO3_14) - (net 34 /hackrf_if/GPIO3_14_R) - (net 35 /hackrf_if/GPIO3_15) - (net 36 /hackrf_if/GPIO3_15_R) - (net 37 /hackrf_if/GPIO3_8) - (net 38 /hackrf_if/GPIO3_8_R) - (net 39 /hackrf_if/GPIO3_9) - (net 40 /hackrf_if/GPIO3_9_R) - (net 41 /hackrf_if/LCD_BACKLIGHT) - (net 42 /hackrf_if/LCD_DB0) - (net 43 /hackrf_if/LCD_DB1) - (net 44 /hackrf_if/LCD_DB10) - (net 45 /hackrf_if/LCD_DB11) - (net 46 /hackrf_if/LCD_DB12) - (net 47 /hackrf_if/LCD_DB13) - (net 48 /hackrf_if/LCD_DB14) - (net 49 /hackrf_if/LCD_DB15) - (net 50 /hackrf_if/LCD_DB2) - (net 51 /hackrf_if/LCD_DB3) - (net 52 /hackrf_if/LCD_DB4) - (net 53 /hackrf_if/LCD_DB5) - (net 54 /hackrf_if/LCD_DB6) - (net 55 /hackrf_if/LCD_DB7) - (net 56 /hackrf_if/LCD_DB8) - (net 57 /hackrf_if/LCD_DB9) - (net 58 /hackrf_if/LCD_RD#) - (net 59 /hackrf_if/LCD_RESET#) - (net 60 /hackrf_if/LCD_RS) - (net 61 /hackrf_if/LCD_TE) - (net 62 /hackrf_if/LCD_WR#) - (net 63 /hackrf_if/P1_5) - (net 64 /hackrf_if/P1_8) - (net 65 /hackrf_if/P2_0) - (net 66 /hackrf_if/P2_0_R) - (net 67 /hackrf_if/P2_1) - (net 68 /hackrf_if/P2_13) - (net 69 /hackrf_if/P2_13_R) - (net 70 /hackrf_if/P2_1_R) - (net 71 /hackrf_if/P2_3) - (net 72 /hackrf_if/P2_3_R) - (net 73 /hackrf_if/P2_4) - (net 74 /hackrf_if/P2_4_R) - (net 75 /hackrf_if/P2_8) - (net 76 /hackrf_if/P2_8_R) - (net 77 /hackrf_if/P2_9) - (net 78 /hackrf_if/P2_9_R) - (net 79 /hackrf_if/RESET#) - (net 80 /hackrf_if/SD_CD) - (net 81 /hackrf_if/SD_CLK) - (net 82 /hackrf_if/SD_CMD) - (net 83 /hackrf_if/SD_DAT0) - (net 84 /hackrf_if/SD_DAT1) - (net 85 /hackrf_if/SD_DAT2) - (net 86 /hackrf_if/SD_DAT3) - (net 87 /hackrf_if/SW_D) - (net 88 /hackrf_if/SW_L) - (net 89 /hackrf_if/SW_R) - (net 90 /hackrf_if/SW_ROT_A) - (net 91 /hackrf_if/SW_ROT_B) - (net 92 /hackrf_if/SW_SEL) - (net 93 /hackrf_if/SW_U) - (net 94 /hackrf_if/TP_D) - (net 95 /hackrf_if/TP_L) - (net 96 /hackrf_if/TP_R) - (net 97 /hackrf_if/TP_U) - (net 98 /hackrf_if/VBAT) - (net 99 GND) - (net 100 "Net-(C14-Pad2)") - (net 101 "Net-(C15-Pad1)") - (net 102 "Net-(C18-Pad2)") - (net 103 "Net-(C19-Pad2)") - (net 104 "Net-(C20-Pad2)") - (net 105 "Net-(C21-Pad2)") - (net 106 "Net-(C24-Pad1)") - (net 107 "Net-(C24-Pad2)") - (net 108 "Net-(C39-Pad1)") - (net 109 "Net-(J3-Pad1)") - (net 110 "Net-(L1-Pad1)") - (net 111 "Net-(L10-Pad1)") - (net 112 "Net-(L2-Pad1)") - (net 113 "Net-(L2-Pad2)") - (net 114 "Net-(L3-Pad1)") - (net 115 "Net-(L3-Pad2)") - (net 116 "Net-(L4-Pad1)") - (net 117 "Net-(L5-Pad1)") - (net 118 "Net-(L6-Pad1)") - (net 119 "Net-(L7-Pad1)") - (net 120 "Net-(L7-Pad2)") - (net 121 "Net-(L8-Pad1)") - (net 122 "Net-(L8-Pad2)") - (net 123 "Net-(L9-Pad1)") + (net 13 /audio/MICBIAS) + (net 14 /audio/MICIN) + (net 15 /audio/RHPOUT) + (net 16 /audio/SCL) + (net 17 /audio/SDA) + (net 18 /audio/VMID) + (net 19 /hackrf_if/LCD_BACKLIGHT) + (net 20 /hackrf_if/LCD_DB0) + (net 21 /hackrf_if/LCD_DB1) + (net 22 /hackrf_if/LCD_DB10) + (net 23 /hackrf_if/LCD_DB11) + (net 24 /hackrf_if/LCD_DB12) + (net 25 /hackrf_if/LCD_DB13) + (net 26 /hackrf_if/LCD_DB14) + (net 27 /hackrf_if/LCD_DB15) + (net 28 /hackrf_if/LCD_DB2) + (net 29 /hackrf_if/LCD_DB3) + (net 30 /hackrf_if/LCD_DB4) + (net 31 /hackrf_if/LCD_DB5) + (net 32 /hackrf_if/LCD_DB6) + (net 33 /hackrf_if/LCD_DB7) + (net 34 /hackrf_if/LCD_DB8) + (net 35 /hackrf_if/LCD_DB9) + (net 36 /hackrf_if/LCD_RD#) + (net 37 /hackrf_if/LCD_RESET#) + (net 38 /hackrf_if/LCD_RS) + (net 39 /hackrf_if/LCD_TE) + (net 40 /hackrf_if/LCD_WR#) + (net 41 /hackrf_if/P2_8) + (net 42 /hackrf_if/P2_8_R) + (net 43 /hackrf_if/RESET#) + (net 44 /hackrf_if/SD_CD) + (net 45 /hackrf_if/SD_CLK) + (net 46 /hackrf_if/SD_CMD) + (net 47 /hackrf_if/SD_DAT0) + (net 48 /hackrf_if/SD_DAT1) + (net 49 /hackrf_if/SD_DAT2) + (net 50 /hackrf_if/SD_DAT3) + (net 51 /hackrf_if/SW_D) + (net 52 /hackrf_if/SW_L) + (net 53 /hackrf_if/SW_R) + (net 54 /hackrf_if/SW_ROT_A) + (net 55 /hackrf_if/SW_ROT_B) + (net 56 /hackrf_if/SW_SEL) + (net 57 /hackrf_if/SW_U) + (net 58 /hackrf_if/TP_D) + (net 59 /hackrf_if/TP_L) + (net 60 /hackrf_if/TP_R) + (net 61 /hackrf_if/TP_U) + (net 62 /hackrf_if/VBAT) + (net 63 GND) + (net 64 "Net-(C18-Pad2)") + (net 65 "Net-(C19-Pad2)") + (net 66 "Net-(C24-Pad1)") + (net 67 "Net-(C24-Pad2)") + (net 68 "Net-(C39-Pad1)") + (net 69 "Net-(J3-Pad1)") + (net 70 "Net-(L4-Pad1)") + (net 71 "Net-(L5-Pad1)") + (net 72 "Net-(L6-Pad1)") + (net 73 "Net-(L9-Pad1)") + (net 74 "Net-(P2-Pad5)") + (net 75 "Net-(P2-Pad6)") + (net 76 "Net-(P20-Pad2)") + (net 77 "Net-(P20-Pad4)") + (net 78 /hackrf_if/MCU_D1) + (net 79 /hackrf_if/MCU_D0) + (net 80 /hackrf_if/MCU_D3) + (net 81 /hackrf_if/MCU_D2) + (net 82 /hackrf_if/MCU_D5) + (net 83 /hackrf_if/MCU_D4) + (net 84 /hackrf_if/MCU_D7) + (net 85 /hackrf_if/MCU_D6) + (net 86 "Net-(P20-Pad17)") + (net 87 "Net-(P20-Pad22)") + (net 88 "Net-(P20-Pad21)") + (net 89 "Net-(P22-Pad2)") + (net 90 "Net-(P22-Pad1)") + (net 91 /hackrf_if/MCU_LCD_TE) + (net 92 /hackrf_if/MCU_LCD_RD) + (net 93 "Net-(P22-Pad8)") + (net 94 "Net-(P22-Pad7)") + (net 95 "Net-(P22-Pad9)") + (net 96 "Net-(P22-Pad12)") + (net 97 "Net-(P22-Pad14)") + (net 98 /hackrf_if/MCU_IO_STBX) + (net 99 /hackrf_if/MCU_ADDR) + (net 100 /hackrf_if/MCU_DIR) + (net 101 /hackrf_if/MCU_LCD_WR) + (net 102 "Net-(P22-Pad25)") + (net 103 /hackrf_if/PP_CPLD_TMS) + (net 104 /hackrf_if/PP_CPLD_TDO) + (net 105 "Net-(P28-Pad14)") + (net 106 "Net-(P28-Pad13)") + (net 107 "Net-(P28-Pad16)") + (net 108 "Net-(P28-Pad15)") + (net 109 "Net-(P28-Pad18)") + (net 110 /hackrf_if/H1_CPLD_TCK) + (net 111 "Net-(P28-Pad20)") + (net 112 /hackrf_if/H1_CPLD_TDI) + (net 113 "Net-(P28-Pad22)") + (net 114 "Net-(P28-Pad21)") + (net 115 /hackrf_if/MCU_LCD_RD_R) + (net 116 /hackrf_if/MCU_LCD_TE_R) + (net 117 /hackrf_if/MCU_IO_STBX_R) + (net 118 /hackrf_if/MCU_DIR_R) + (net 119 /hackrf_if/MCU_LCD_WR_R) + (net 120 /hackrf_if/MCU_ADDR_R) + (net 121 /hackrf_if/MCU_D5_R) + (net 122 /hackrf_if/MCU_D4_R) + (net 123 /hackrf_if/MCU_D6_R) + (net 124 /hackrf_if/MCU_D7_R) + (net 125 /hackrf_if/MCU_D1_R) + (net 126 /hackrf_if/MCU_D0_R) + (net 127 /hackrf_if/MCU_D2_R) + (net 128 /hackrf_if/MCU_D3_R) + (net 129 "Net-(U1-Pad2)") + (net 130 "Net-(U1-Pad12)") + (net 131 "Net-(U1-Pad13)") + (net 132 "Net-(U1-Pad19)") + (net 133 "Net-(U1-Pad20)") + (net 134 "Net-(U1-Pad26)") + (net 135 "Net-(U3-Pad5)") + (net 136 "Net-(U3-Pad7)") + (net 137 "Net-(U3-Pad35)") + (net 138 "Net-(U3-Pad36)") + (net 139 "Net-(U3-Pad37)") (net_class Default "This is the default net class." (clearance 0.198) (trace_width 0.2) - (via_dia 0.6985) - (via_drill 0.3429) + (via_dia 0.6858) + (via_drill 0.3302) (uvia_dia 0.508) (uvia_drill 0.127) (add_net +1.8V) @@ -236,34 +264,14 @@ (add_net /audio/I2S0_WS) (add_net /audio/I2S0_WS_R) (add_net /audio/LHPOUT) - (add_net /audio/LLINEIN) - (add_net /audio/LOUT) (add_net /audio/MICBIAS) (add_net /audio/MICIN) (add_net /audio/RHPOUT) - (add_net /audio/RLINEIN) - (add_net /audio/ROUT) (add_net /audio/SCL) (add_net /audio/SDA) (add_net /audio/VMID) - (add_net /hackrf_if/CPLD_TCK) - (add_net /hackrf_if/CPLD_TDI) - (add_net /hackrf_if/GPIO3_10) - (add_net /hackrf_if/GPIO3_10_R) - (add_net /hackrf_if/GPIO3_11) - (add_net /hackrf_if/GPIO3_11_R) - (add_net /hackrf_if/GPIO3_12) - (add_net /hackrf_if/GPIO3_12_R) - (add_net /hackrf_if/GPIO3_13) - (add_net /hackrf_if/GPIO3_13_R) - (add_net /hackrf_if/GPIO3_14) - (add_net /hackrf_if/GPIO3_14_R) - (add_net /hackrf_if/GPIO3_15) - (add_net /hackrf_if/GPIO3_15_R) - (add_net /hackrf_if/GPIO3_8) - (add_net /hackrf_if/GPIO3_8_R) - (add_net /hackrf_if/GPIO3_9) - (add_net /hackrf_if/GPIO3_9_R) + (add_net /hackrf_if/H1_CPLD_TCK) + (add_net /hackrf_if/H1_CPLD_TDI) (add_net /hackrf_if/LCD_BACKLIGHT) (add_net /hackrf_if/LCD_DB0) (add_net /hackrf_if/LCD_DB1) @@ -286,22 +294,38 @@ (add_net /hackrf_if/LCD_RS) (add_net /hackrf_if/LCD_TE) (add_net /hackrf_if/LCD_WR#) - (add_net /hackrf_if/P1_5) - (add_net /hackrf_if/P1_8) - (add_net /hackrf_if/P2_0) - (add_net /hackrf_if/P2_0_R) - (add_net /hackrf_if/P2_1) - (add_net /hackrf_if/P2_13) - (add_net /hackrf_if/P2_13_R) - (add_net /hackrf_if/P2_1_R) - (add_net /hackrf_if/P2_3) - (add_net /hackrf_if/P2_3_R) - (add_net /hackrf_if/P2_4) - (add_net /hackrf_if/P2_4_R) + (add_net /hackrf_if/MCU_ADDR) + (add_net /hackrf_if/MCU_ADDR_R) + (add_net /hackrf_if/MCU_D0) + (add_net /hackrf_if/MCU_D0_R) + (add_net /hackrf_if/MCU_D1) + (add_net /hackrf_if/MCU_D1_R) + (add_net /hackrf_if/MCU_D2) + (add_net /hackrf_if/MCU_D2_R) + (add_net /hackrf_if/MCU_D3) + (add_net /hackrf_if/MCU_D3_R) + (add_net /hackrf_if/MCU_D4) + (add_net /hackrf_if/MCU_D4_R) + (add_net /hackrf_if/MCU_D5) + (add_net /hackrf_if/MCU_D5_R) + (add_net /hackrf_if/MCU_D6) + (add_net /hackrf_if/MCU_D6_R) + (add_net /hackrf_if/MCU_D7) + (add_net /hackrf_if/MCU_D7_R) + (add_net /hackrf_if/MCU_DIR) + (add_net /hackrf_if/MCU_DIR_R) + (add_net /hackrf_if/MCU_IO_STBX) + (add_net /hackrf_if/MCU_IO_STBX_R) + (add_net /hackrf_if/MCU_LCD_RD) + (add_net /hackrf_if/MCU_LCD_RD_R) + (add_net /hackrf_if/MCU_LCD_TE) + (add_net /hackrf_if/MCU_LCD_TE_R) + (add_net /hackrf_if/MCU_LCD_WR) + (add_net /hackrf_if/MCU_LCD_WR_R) (add_net /hackrf_if/P2_8) (add_net /hackrf_if/P2_8_R) - (add_net /hackrf_if/P2_9) - (add_net /hackrf_if/P2_9_R) + (add_net /hackrf_if/PP_CPLD_TDO) + (add_net /hackrf_if/PP_CPLD_TMS) (add_net /hackrf_if/RESET#) (add_net /hackrf_if/SD_CD) (add_net /hackrf_if/SD_CLK) @@ -323,30 +347,50 @@ (add_net /hackrf_if/TP_U) (add_net /hackrf_if/VBAT) (add_net GND) - (add_net "Net-(C14-Pad2)") - (add_net "Net-(C15-Pad1)") (add_net "Net-(C18-Pad2)") (add_net "Net-(C19-Pad2)") - (add_net "Net-(C20-Pad2)") - (add_net "Net-(C21-Pad2)") (add_net "Net-(C24-Pad1)") (add_net "Net-(C24-Pad2)") (add_net "Net-(C39-Pad1)") (add_net "Net-(J3-Pad1)") - (add_net "Net-(L1-Pad1)") - (add_net "Net-(L10-Pad1)") - (add_net "Net-(L2-Pad1)") - (add_net "Net-(L2-Pad2)") - (add_net "Net-(L3-Pad1)") - (add_net "Net-(L3-Pad2)") (add_net "Net-(L4-Pad1)") (add_net "Net-(L5-Pad1)") (add_net "Net-(L6-Pad1)") - (add_net "Net-(L7-Pad1)") - (add_net "Net-(L7-Pad2)") - (add_net "Net-(L8-Pad1)") - (add_net "Net-(L8-Pad2)") (add_net "Net-(L9-Pad1)") + (add_net "Net-(P2-Pad5)") + (add_net "Net-(P2-Pad6)") + (add_net "Net-(P20-Pad17)") + (add_net "Net-(P20-Pad2)") + (add_net "Net-(P20-Pad21)") + (add_net "Net-(P20-Pad22)") + (add_net "Net-(P20-Pad4)") + (add_net "Net-(P22-Pad1)") + (add_net "Net-(P22-Pad12)") + (add_net "Net-(P22-Pad14)") + (add_net "Net-(P22-Pad2)") + (add_net "Net-(P22-Pad25)") + (add_net "Net-(P22-Pad7)") + (add_net "Net-(P22-Pad8)") + (add_net "Net-(P22-Pad9)") + (add_net "Net-(P28-Pad13)") + (add_net "Net-(P28-Pad14)") + (add_net "Net-(P28-Pad15)") + (add_net "Net-(P28-Pad16)") + (add_net "Net-(P28-Pad18)") + (add_net "Net-(P28-Pad20)") + (add_net "Net-(P28-Pad21)") + (add_net "Net-(P28-Pad22)") + (add_net "Net-(U1-Pad12)") + (add_net "Net-(U1-Pad13)") + (add_net "Net-(U1-Pad19)") + (add_net "Net-(U1-Pad2)") + (add_net "Net-(U1-Pad20)") + (add_net "Net-(U1-Pad26)") + (add_net "Net-(U3-Pad35)") + (add_net "Net-(U3-Pad36)") + (add_net "Net-(U3-Pad37)") + (add_net "Net-(U3-Pad5)") + (add_net "Net-(U3-Pad7)") ) (module bat_coin:MPD_BU2032SM-BT-G locked (layer 4_bot) (tedit 53B09B28) (tstamp 53AA25F0) @@ -373,9 +417,9 @@ (fp_line (start -14.3 3.5) (end -14.3 -3.5) (layer B.SilkS) (width 0.1524)) (fp_line (start -14.3 -3.5) (end -10.639 -3.5) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -14.65 0 180) (size 3.2 4.2) (layers 4_bot B.Paste B.Mask) - (net 98 /hackrf_if/VBAT)) + (net 62 /hackrf_if/VBAT)) (pad 2 smd rect (at 14.65 0 180) (size 3.2 4.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B0991D) (tstamp 53AA2604) @@ -395,7 +439,7 @@ (pad 1 smd rect (at -0.44958 0 180) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.44958 0 180) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53BC270F) (tstamp 53AA260E) @@ -415,7 +459,7 @@ (pad 1 smd rect (at -0.44958 0 180) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.44958 0 180) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53BC2708) (tstamp 53AA2618) @@ -435,7 +479,7 @@ (pad 1 smd rect (at -0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B09A42) (tstamp 53AA2622) @@ -455,7 +499,7 @@ (pad 1 smd rect (at -0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B09A37) (tstamp 53B0A490) @@ -473,9 +517,9 @@ (fp_line (start -0.90932 -0.45974) (end -0.90932 0.45974) (layer B.SilkS) (width 0.1524)) (fp_line (start -0.90932 0.45974) (end 0.90932 0.45974) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.44958 0 180) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 22 /audio/VMID)) + (net 18 /audio/VMID)) (pad 2 smd rect (at 0.44958 0 180) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B09A3C) (tstamp 53B0A4A6) @@ -493,65 +537,63 @@ (fp_line (start -0.90932 -0.45974) (end -0.90932 0.45974) (layer B.SilkS) (width 0.1524)) (fp_line (start -0.90932 0.45974) (end 0.90932 0.45974) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 15 /audio/MICBIAS)) + (net 13 /audio/MICBIAS)) (pad 2 smd rect (at 0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) - (module ipc_capae:IPC_CAPAE830X620N (layer 4_bot) (tedit 53B09A6A) (tstamp 53AA43B4) + (module ipc_capae:IPC_CAPAE830X620N (layer 4_bot) (tedit 55E24037) (tstamp 53AA43B4) (at 154.2 120) (tags "CASE E") (path /53A8BFC3/53A8C256) - (attr smd) (fp_text reference C18 (at -4.4 -4) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value 220U (at 0 0) (layer B.SilkS) (effects (font (thickness 0.3048)) (justify mirror)) ) - (fp_line (start -4.20116 2.4003) (end -4.20116 -2.4003) (layer B.SilkS) (width 0.1524)) - (fp_line (start 4.20116 4.20116) (end -2.4003 4.20116) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.4003 -4.20116) (end 4.20116 -4.20116) (layer B.SilkS) (width 0.1524)) - (fp_line (start -4.20116 -2.4003) (end -2.4003 -4.20116) (layer B.SilkS) (width 0.1524)) - (fp_line (start -4.20116 2.4003) (end -2.4003 4.20116) (layer B.SilkS) (width 0.1524)) - (fp_line (start 4.20116 -4.20116) (end 4.20116 4.20116) (layer B.SilkS) (width 0.1524)) - (fp_circle (center 0 0) (end 4.0005 0) (layer B.SilkS) (width 0.1524)) - (fp_line (start -5.72516 4.7498) (end 5.72516 4.7498) (layer B.SilkS) (width 0.1524)) - (fp_line (start 5.72516 4.7498) (end 5.72516 -4.7498) (layer B.SilkS) (width 0.1524)) - (fp_line (start 5.72516 -4.7498) (end -5.72516 -4.7498) (layer B.SilkS) (width 0.1524)) - (fp_line (start -5.72516 -4.7498) (end -5.72516 4.7498) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -3.1496 0) (size 4.15036 1.6002) (layers 4_bot B.Paste B.Mask) + (fp_line (start -4.2 2.4) (end -4.2 -2.4) (layer B.SilkS) (width 0.1524)) + (fp_line (start 4.2 4.2) (end -2.4 4.2) (layer B.SilkS) (width 0.1524)) + (fp_line (start -2.4 -4.2) (end 4.2 -4.2) (layer B.SilkS) (width 0.1524)) + (fp_line (start -4.2 -2.4) (end -2.4 -4.2) (layer B.SilkS) (width 0.1524)) + (fp_line (start -4.2 2.4) (end -2.4 4.2) (layer B.SilkS) (width 0.1524)) + (fp_line (start 4.2 -4.2) (end 4.2 4.2) (layer B.SilkS) (width 0.1524)) + (fp_circle (center 0 0) (end 4 0) (layer B.SilkS) (width 0.1524)) + (fp_line (start -5.725 4.75) (end 5.725 4.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 5.725 4.75) (end 5.725 -4.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 5.725 -4.75) (end -5.725 -4.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -5.725 -4.75) (end -5.725 4.75) (layer B.CrtYd) (width 0.1524)) + (pad 1 smd rect (at -3.15 0) (size 4.15 1.6) (layers 4_bot B.Paste B.Mask) (net 12 /audio/LHPOUT)) - (pad 2 smd rect (at 3.1496 0) (size 4.15036 1.6002) (layers 4_bot B.Paste B.Mask) - (net 102 "Net-(C18-Pad2)")) + (pad 2 smd rect (at 3.15 0) (size 4.15 1.6) (layers 4_bot B.Paste B.Mask) + (net 64 "Net-(C18-Pad2)")) ) - (module ipc_capae:IPC_CAPAE830X620N (layer 4_bot) (tedit 53B09A65) (tstamp 53AA26CA) + (module ipc_capae:IPC_CAPAE830X620N (layer 4_bot) (tedit 55E24037) (tstamp 53AA26CA) (at 154.2 110) (tags "CASE E") (path /53A8BFC3/53A8C25E) - (attr smd) (fp_text reference C19 (at -4.4 4) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value 220U (at 0 0) (layer B.SilkS) (effects (font (thickness 0.3048)) (justify mirror)) ) - (fp_line (start -4.20116 2.4003) (end -4.20116 -2.4003) (layer B.SilkS) (width 0.1524)) - (fp_line (start 4.20116 4.20116) (end -2.4003 4.20116) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.4003 -4.20116) (end 4.20116 -4.20116) (layer B.SilkS) (width 0.1524)) - (fp_line (start -4.20116 -2.4003) (end -2.4003 -4.20116) (layer B.SilkS) (width 0.1524)) - (fp_line (start -4.20116 2.4003) (end -2.4003 4.20116) (layer B.SilkS) (width 0.1524)) - (fp_line (start 4.20116 -4.20116) (end 4.20116 4.20116) (layer B.SilkS) (width 0.1524)) - (fp_circle (center 0 0) (end 4.0005 0) (layer B.SilkS) (width 0.1524)) - (fp_line (start -5.72516 4.7498) (end 5.72516 4.7498) (layer B.SilkS) (width 0.1524)) - (fp_line (start 5.72516 4.7498) (end 5.72516 -4.7498) (layer B.SilkS) (width 0.1524)) - (fp_line (start 5.72516 -4.7498) (end -5.72516 -4.7498) (layer B.SilkS) (width 0.1524)) - (fp_line (start -5.72516 -4.7498) (end -5.72516 4.7498) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -3.1496 0) (size 4.15036 1.6002) (layers 4_bot B.Paste B.Mask) - (net 17 /audio/RHPOUT)) - (pad 2 smd rect (at 3.1496 0) (size 4.15036 1.6002) (layers 4_bot B.Paste B.Mask) - (net 103 "Net-(C19-Pad2)")) + (fp_line (start -4.2 2.4) (end -4.2 -2.4) (layer B.SilkS) (width 0.1524)) + (fp_line (start 4.2 4.2) (end -2.4 4.2) (layer B.SilkS) (width 0.1524)) + (fp_line (start -2.4 -4.2) (end 4.2 -4.2) (layer B.SilkS) (width 0.1524)) + (fp_line (start -4.2 -2.4) (end -2.4 -4.2) (layer B.SilkS) (width 0.1524)) + (fp_line (start -4.2 2.4) (end -2.4 4.2) (layer B.SilkS) (width 0.1524)) + (fp_line (start 4.2 -4.2) (end 4.2 4.2) (layer B.SilkS) (width 0.1524)) + (fp_circle (center 0 0) (end 4 0) (layer B.SilkS) (width 0.1524)) + (fp_line (start -5.725 4.75) (end 5.725 4.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 5.725 4.75) (end 5.725 -4.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 5.725 -4.75) (end -5.725 -4.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -5.725 -4.75) (end -5.725 4.75) (layer B.CrtYd) (width 0.1524)) + (pad 1 smd rect (at -3.15 0) (size 4.15 1.6) (layers 4_bot B.Paste B.Mask) + (net 15 /audio/RHPOUT)) + (pad 2 smd rect (at 3.15 0) (size 4.15 1.6) (layers 4_bot B.Paste B.Mask) + (net 65 "Net-(C19-Pad2)")) ) (module ipc_capc:IPC_CAPC1608X95N (layer 4_bot) (tedit 53B09A86) (tstamp 53AA26F6) @@ -570,9 +612,9 @@ (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 90) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 2 smd rect (at 0.8001 0 90) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 102 "Net-(C18-Pad2)")) + (net 64 "Net-(C18-Pad2)")) ) (module ipc_capc:IPC_CAPC1608X95N (layer 4_bot) (tedit 53B09A77) (tstamp 53AA2700) @@ -591,37 +633,36 @@ (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 90) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 103 "Net-(C19-Pad2)")) + (net 65 "Net-(C19-Pad2)")) (pad 2 smd rect (at 0.8001 0 90) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) - (module ipc_capae:IPC_CAPAE430X540N (layer 4_bot) (tedit 53B0993F) (tstamp 53ADFB14) + (module ipc_capae:IPC_CAPAE430X540N (layer 4_bot) (tedit 55E23F71) (tstamp 53ADFB14) (at 141.8 104.4 180) (tags "CASE B") (path /53A8BFC3/53A8C2AA) - (attr smd) (fp_text reference C24 (at -2.6 2.2 180) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value 1U (at 0 0 180) (layer B.SilkS) (effects (font (thickness 0.3048)) (justify mirror)) ) - (fp_line (start 3.52552 -2.75082) (end -3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 -2.75082) (end -3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 2.75082) (end 3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 3.52552 2.75082) (end 3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -2.14884 1.24968) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.24968 -2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -1.24968 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 1.24968) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_circle (center 0 0) (end 1.99898 0) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 106 "Net-(C24-Pad1)")) - (pad 2 smd rect (at 1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 107 "Net-(C24-Pad2)")) + (fp_line (start 3.525 -2.75) (end -3.525 -2.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -3.525 -2.75) (end -3.525 2.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -3.525 2.75) (end 3.525 2.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 3.525 2.75) (end 3.525 -2.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 2.15 2.15) (end -1.25 2.15) (layer B.SilkS) (width 0.1524)) + (fp_line (start -2.15 -1.25) (end -2.15 1.25) (layer B.SilkS) (width 0.1524)) + (fp_line (start -1.25 -2.15) (end 2.15 -2.15) (layer B.SilkS) (width 0.1524)) + (fp_line (start -2.15 -1.25) (end -1.25 -2.15) (layer B.SilkS) (width 0.1524)) + (fp_line (start -2.15 1.25) (end -1.25 2.15) (layer B.SilkS) (width 0.1524)) + (fp_circle (center 0 0) (end 2 0) (layer B.SilkS) (width 0.1524)) + (fp_line (start 2.15 2.15) (end 2.15 -2.15) (layer B.SilkS) (width 0.1524)) + (pad 1 smd rect (at -1.75 0 180) (size 2.55 1.6) (layers 4_bot B.Paste B.Mask) + (net 66 "Net-(C24-Pad1)")) + (pad 2 smd rect (at 1.75 0 180) (size 2.55 1.6) (layers 4_bot B.Paste B.Mask) + (net 67 "Net-(C24-Pad2)")) ) (module ipc_capc:IPC_CAPC1608X95N (layer 4_bot) (tedit 53B09AB4) (tstamp 53AA271B) @@ -640,9 +681,9 @@ (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 180) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 107 "Net-(C24-Pad2)")) + (net 67 "Net-(C24-Pad2)")) (pad 2 smd rect (at 0.8001 0 180) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B0979B) (tstamp 53AA272F) @@ -662,7 +703,7 @@ (pad 1 smd rect (at -0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53C5B500) (tstamp 53AA2739) @@ -682,7 +723,7 @@ (pad 1 smd rect (at -0.44958 0 90) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.44958 0 90) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B097F7) (tstamp 53AB74CF) @@ -702,7 +743,7 @@ (pad 1 smd rect (at -0.44958 0 90) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 2 smd rect (at 0.44958 0 90) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B09B39) (tstamp 53AA274D) @@ -722,7 +763,7 @@ (pad 1 smd rect (at -0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.44958 0) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B09B82) (tstamp 53AA2757) @@ -742,7 +783,7 @@ (pad 1 smd rect (at -0.44958 0 270) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 2 smd rect (at 0.44958 0 270) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B09B7D) (tstamp 53AA276B) @@ -762,7 +803,7 @@ (pad 1 smd rect (at -0.44958 0 270) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 2 smd rect (at 0.44958 0 270) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1005X55N (layer 4_bot) (tedit 53B097B0) (tstamp 53B30722) @@ -782,7 +823,7 @@ (pad 1 smd rect (at -0.44958 0 180) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 2 smd rect (at 0.44958 0 180) (size 0.61976 0.61976) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC1608X90N (layer 4_bot) (tedit 53B09B4A) (tstamp 53AA27A7) @@ -800,9 +841,9 @@ (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.2032)) (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.2032)) (pad 1 smd rect (at -0.8001 0) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 108 "Net-(C39-Pad1)")) + (net 68 "Net-(C39-Pad1)")) (pad 2 smd rect (at 0.8001 0) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module hole:HOLE_3200UM_VIAS (layer 1_top) (tedit 53AA3E1E) (tstamp 53AA27C8) @@ -815,23 +856,23 @@ (effects (font (size 1 1) (thickness 0.1524))) ) (pad 1 thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 -2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) ) (module hole:HOLE_3200UM_VIAS (layer 1_top) (tedit 53AA3E1E) (tstamp 53AA27D5) @@ -844,23 +885,23 @@ (effects (font (size 1 1) (thickness 0.1524))) ) (pad 1 thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 -2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) ) (module hole:HOLE_3200UM_VIAS (layer 1_top) (tedit 53AA3E1E) (tstamp 53AA27E2) @@ -873,23 +914,23 @@ (effects (font (size 1 1) (thickness 0.1524))) ) (pad 1 thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 -2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) ) (module hole:HOLE_3200UM_VIAS (layer 1_top) (tedit 53AA3E1E) (tstamp 53AA27EF) @@ -902,23 +943,23 @@ (effects (font (size 1 1) (thickness 0.1524))) ) (pad 1 thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 -2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) ) (module hole:HOLE_3200UM_VIAS (layer 1_top) (tedit 53AA3E1E) (tstamp 53AA27FC) @@ -931,28 +972,29 @@ (effects (font (size 1 1) (thickness 0.1524))) ) (pad 1 thru_hole circle (at 0 0) (size 5.6 5.6) (drill 3.2) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 -2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 0 2.2) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 2.2 0) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 -1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at -1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 thru_hole circle (at 1.55 1.55) (size 0.6 0.6) (drill 0.381) (layers *.Cu *.Mask) - (net 99 GND)) + (net 63 GND)) ) (module molex:MOLEX_54132-40XX_LR locked (layer 4_bot) (tedit 53B09BB0) (tstamp 53AA2868) (at 82.5 137.5 90) (path /53A9129D/53A91651) + (solder_mask_margin 0.0492) (attr smd) (fp_text reference J3 (at -13.1 2.1 90) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) @@ -981,93 +1023,93 @@ (fp_line (start 12.15 -4.2) (end -12.15 -4.2) (layer Eco1.User) (width 0.1524)) (fp_line (start -12.15 2.5) (end 12.15 2.5) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -9.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 109 "Net-(J3-Pad1)")) + (net 69 "Net-(J3-Pad1)")) (pad 2 smd rect (at -9.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 3 smd rect (at -8.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 4 smd rect (at -8.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 5 smd rect (at -7.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 59 /hackrf_if/LCD_RESET#)) + (net 37 /hackrf_if/LCD_RESET#)) (pad 6 smd rect (at -7.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 60 /hackrf_if/LCD_RS)) + (net 38 /hackrf_if/LCD_RS)) (pad 7 smd rect (at -6.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 58 /hackrf_if/LCD_RD#)) + (net 36 /hackrf_if/LCD_RD#)) (pad 8 smd rect (at -6.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 9 smd rect (at -5.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 10 smd rect (at -5.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 62 /hackrf_if/LCD_WR#)) + (net 40 /hackrf_if/LCD_WR#)) (pad 11 smd rect (at -4.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 12 smd rect (at -4.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 13 smd rect (at -3.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 14 smd rect (at -3.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 15 smd rect (at -2.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 16 smd rect (at -2.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 17 smd rect (at -1.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 18 smd rect (at -1.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 49 /hackrf_if/LCD_DB15)) + (net 27 /hackrf_if/LCD_DB15)) (pad 19 smd rect (at -0.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 48 /hackrf_if/LCD_DB14)) + (net 26 /hackrf_if/LCD_DB14)) (pad 20 smd rect (at -0.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 47 /hackrf_if/LCD_DB13)) + (net 25 /hackrf_if/LCD_DB13)) (pad 21 smd rect (at 0.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 46 /hackrf_if/LCD_DB12)) + (net 24 /hackrf_if/LCD_DB12)) (pad 22 smd rect (at 0.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 45 /hackrf_if/LCD_DB11)) + (net 23 /hackrf_if/LCD_DB11)) (pad 23 smd rect (at 1.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 44 /hackrf_if/LCD_DB10)) + (net 22 /hackrf_if/LCD_DB10)) (pad 24 smd rect (at 1.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 57 /hackrf_if/LCD_DB9)) + (net 35 /hackrf_if/LCD_DB9)) (pad 25 smd rect (at 2.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 56 /hackrf_if/LCD_DB8)) + (net 34 /hackrf_if/LCD_DB8)) (pad 26 smd rect (at 2.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 55 /hackrf_if/LCD_DB7)) + (net 33 /hackrf_if/LCD_DB7)) (pad 27 smd rect (at 3.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 54 /hackrf_if/LCD_DB6)) + (net 32 /hackrf_if/LCD_DB6)) (pad 28 smd rect (at 3.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 53 /hackrf_if/LCD_DB5)) + (net 31 /hackrf_if/LCD_DB5)) (pad 29 smd rect (at 4.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 52 /hackrf_if/LCD_DB4)) + (net 30 /hackrf_if/LCD_DB4)) (pad 30 smd rect (at 4.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 51 /hackrf_if/LCD_DB3)) + (net 29 /hackrf_if/LCD_DB3)) (pad 31 smd rect (at 5.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 50 /hackrf_if/LCD_DB2)) + (net 28 /hackrf_if/LCD_DB2)) (pad 32 smd rect (at 5.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 43 /hackrf_if/LCD_DB1)) + (net 21 /hackrf_if/LCD_DB1)) (pad 33 smd rect (at 6.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 42 /hackrf_if/LCD_DB0)) + (net 20 /hackrf_if/LCD_DB0)) (pad 34 smd rect (at 6.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 61 /hackrf_if/LCD_TE)) + (net 39 /hackrf_if/LCD_TE)) (pad 35 smd rect (at 7.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 36 smd rect (at 7.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 37 smd rect (at 8.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 96 /hackrf_if/TP_R)) + (net 60 /hackrf_if/TP_R)) (pad 38 smd rect (at 8.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 94 /hackrf_if/TP_D)) + (net 58 /hackrf_if/TP_D)) (pad 39 smd rect (at 9.25 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 95 /hackrf_if/TP_L)) + (net 59 /hackrf_if/TP_L)) (pad 40 smd rect (at 9.75 2.8 90) (size 0.3 1.2) (layers 4_bot B.Paste B.Mask) - (net 97 /hackrf_if/TP_U)) + (net 61 /hackrf_if/TP_U)) (pad SHLD smd rect (at -11.45 0.9 90) (size 1.6 0.8) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad SHLD smd rect (at -11.85 -0.3 90) (size 2.4 1.6) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad SHLD smd rect (at 11.85 -0.3 90) (size 2.4 1.6) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad SHLD smd rect (at 11.45 0.9 90) (size 1.6 0.8) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B30A63) (tstamp 53AA28A2) @@ -1085,9 +1127,9 @@ (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 180) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 116 "Net-(L4-Pad1)")) + (net 70 "Net-(L4-Pad1)")) (pad 2 smd rect (at 0.8001 0 180) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 102 "Net-(C18-Pad2)")) + (net 64 "Net-(C18-Pad2)")) ) (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B09A7D) (tstamp 53AA28AC) @@ -1105,9 +1147,9 @@ (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 180) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 117 "Net-(L5-Pad1)")) + (net 71 "Net-(L5-Pad1)")) (pad 2 smd rect (at 0.8001 0 180) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 103 "Net-(C19-Pad2)")) + (net 65 "Net-(C19-Pad2)")) ) (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B09AA3) (tstamp 53AA28B6) @@ -1125,9 +1167,9 @@ (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 180) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 118 "Net-(L6-Pad1)")) + (net 72 "Net-(L6-Pad1)")) (pad 2 smd rect (at 0.8001 0 180) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B09AA7) (tstamp 53AA28D4) @@ -1145,9 +1187,9 @@ (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 180) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 123 "Net-(L9-Pad1)")) + (net 73 "Net-(L9-Pad1)")) (pad 2 smd rect (at 0.8001 0 180) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 107 "Net-(C24-Pad2)")) + (net 67 "Net-(C24-Pad2)")) ) (module lcd_kingtech:KINGTECH_DW0240A2BZ_PANEL locked (layer 1_top) (tedit 53C5BC95) (tstamp 53AA2904) @@ -1204,7 +1246,7 @@ (fp_text reference R10 (at 11 -0.6 180) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) - (fp_text value 47K (at 0 0 180) (layer B.SilkS) + (fp_text value 0R (at 0 0 180) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_line (start -1.50114 0.7493) (end 1.50114 0.7493) (layer B.SilkS) (width 0.1524)) @@ -1212,9 +1254,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 180) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 106 "Net-(C24-Pad1)")) + (net 66 "Net-(C24-Pad1)")) (pad 2 smd rect (at 0.8001 0 180) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 16 /audio/MICIN)) + (net 14 /audio/MICIN)) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B09A8C) (tstamp 53AA2A28) @@ -1233,9 +1275,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 2 smd rect (at 0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 102 "Net-(C18-Pad2)")) + (net 64 "Net-(C18-Pad2)")) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B09A73) (tstamp 53AA2A32) @@ -1254,9 +1296,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 103 "Net-(C19-Pad2)")) + (net 65 "Net-(C19-Pad2)")) (pad 2 smd rect (at 0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B09AAF) (tstamp 53AE455C) @@ -1275,9 +1317,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 180) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 107 "Net-(C24-Pad2)")) + (net 67 "Net-(C24-Pad2)")) (pad 2 smd rect (at 0.8001 0 180) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B09A2B) (tstamp 53B0A485) @@ -1296,9 +1338,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 15 /audio/MICBIAS)) + (net 13 /audio/MICBIAS)) (pad 2 smd rect (at 0.8001 0) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 107 "Net-(C24-Pad2)")) + (net 67 "Net-(C24-Pad2)")) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B09B9B) (tstamp 53AA2A78) @@ -1317,9 +1359,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 59 /hackrf_if/LCD_RESET#)) + (net 37 /hackrf_if/LCD_RESET#)) (pad 2 smd rect (at 0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B09B8D) (tstamp 53AA2A82) @@ -1338,9 +1380,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 2 smd rect (at 0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 41 /hackrf_if/LCD_BACKLIGHT)) + (net 19 /hackrf_if/LCD_BACKLIGHT)) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B30AF0) (tstamp 53AE033F) @@ -1359,44 +1401,24 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 24 /hackrf_if/CPLD_TDI)) + (net 112 /hackrf_if/H1_CPLD_TDI)) (pad 2 smd rect (at 0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) (net 5 /audio/I2S0_RX_SDA)) ) - (module cui:CUI_CMA-4544PF-W locked (layer 1_top) (tedit 53B09C41) (tstamp 53AA2B41) - (at 145.8 110.4 270) - (path /53A8BFC3/53A8C2D6) - (fp_text reference X1 (at 0 -1.6 270) (layer F.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524))) - ) - (fp_text value MIC_ELECTRET (at 0 0 270) (layer F.SilkS) - (effects (font (size 1 1) (thickness 0.15))) - ) - (fp_line (start 3.464102 2) (end 4.200223 2.425) (layer F.SilkS) (width 0.1524)) - (fp_line (start 0 4) (end 0 4.85) (layer F.SilkS) (width 0.1524)) - (fp_arc (start 0 0) (end 3.464102 2) (angle 60) (layer F.SilkS) (width 0.1524)) - (fp_circle (center 0 0) (end 4.85 0) (layer F.SilkS) (width 0.1524)) - (pad 1 thru_hole circle (at -2 -1.27 270) (size 1.4 1.4) (drill 0.8) (layers *.Cu *.Mask F.SilkS) - (net 107 "Net-(C24-Pad2)")) - (pad 2 thru_hole circle (at -2 1.27 270) (size 1.4 1.4) (drill 0.8) (layers *.Cu *.Mask F.SilkS) - (net 99 GND)) - ) - - (module ipc_resc:IPC_RESCAXS80P160X320X60-8N (layer 4_bot) (tedit 53B09AF9) (tstamp 53AB0D66) + (module ipc_resc:IPC_RESCAXS80P160X320X60-8N (layer 4_bot) (tedit 55E240E2) (tstamp 53AB0D66) (at 149.3 158.5 90) (path /53A8BFC3/53AB09AD) - (attr smd) (fp_text reference RP1 (at -0.1 2.7 90) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value 220R (at 0 0 90) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -1.6 1.95) (end 1.6 1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.6 1.95) (end 1.6 -1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.6 -1.95) (end -1.6 -1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.6 -1.95) (end -1.6 1.95) (layer B.SilkS) (width 0.1524)) + (fp_line (start -1.6 1.95) (end 1.6 1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.6 1.95) (end 1.6 -1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.6 -1.95) (end -1.6 -1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -1.6 -1.95) (end -1.6 1.95) (layer B.CrtYd) (width 0.1524)) (fp_line (start -0.1 1.7) (end 0.1 1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start 0.1 1.7) (end 0.1 -1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start 0.1 -1.7) (end -0.1 -1.7) (layer B.SilkS) (width 0.1524)) @@ -1419,112 +1441,109 @@ (net 9 /audio/I2S0_TX_SDA_R)) ) - (module ipc_resc:IPC_RESCAXS80P160X320X60-8N (layer 4_bot) (tedit 53B09B05) (tstamp 53ACCB45) + (module ipc_resc:IPC_RESCAXS80P160X320X60-8N (layer 4_bot) (tedit 55E240E2) (tstamp 53ACCB45) (at 133.6 164 180) (path /53A8C780/53AB047A) - (attr smd) (fp_text reference RP4 (at -0.8 -2.6 180) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value 220R (at 0 0 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -1.6 1.95) (end 1.6 1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.6 1.95) (end 1.6 -1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.6 -1.95) (end -1.6 -1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.6 -1.95) (end -1.6 1.95) (layer B.SilkS) (width 0.1524)) + (fp_line (start -1.6 1.95) (end 1.6 1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.6 1.95) (end 1.6 -1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.6 -1.95) (end -1.6 -1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -1.6 -1.95) (end -1.6 1.95) (layer B.CrtYd) (width 0.1524)) (fp_line (start -0.1 1.7) (end 0.1 1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start 0.1 1.7) (end 0.1 -1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start 0.1 -1.7) (end -0.1 -1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start -0.1 -1.7) (end -0.1 1.7) (layer B.SilkS) (width 0.1524)) (pad 2 smd rect (at -0.85 0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 75 /hackrf_if/P2_8)) + (net 41 /hackrf_if/P2_8)) (pad 3 smd rect (at -0.85 -0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 77 /hackrf_if/P2_9)) + (net 101 /hackrf_if/MCU_LCD_WR)) (pad 1 smd rect (at -0.85 1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 67 /hackrf_if/P2_1)) + (net 99 /hackrf_if/MCU_ADDR)) (pad 4 smd rect (at -0.85 -1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 68 /hackrf_if/P2_13)) + (net 100 /hackrf_if/MCU_DIR)) (pad 5 smd rect (at 0.85 -1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 69 /hackrf_if/P2_13_R)) + (net 118 /hackrf_if/MCU_DIR_R)) (pad 6 smd rect (at 0.85 -0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 78 /hackrf_if/P2_9_R)) + (net 119 /hackrf_if/MCU_LCD_WR_R)) (pad 7 smd rect (at 0.85 0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 76 /hackrf_if/P2_8_R)) + (net 42 /hackrf_if/P2_8_R)) (pad 8 smd rect (at 0.85 1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 70 /hackrf_if/P2_1_R)) + (net 120 /hackrf_if/MCU_ADDR_R)) ) - (module ipc_resc:IPC_RESCAXS80P160X320X60-8N (layer 4_bot) (tedit 53B09AD4) (tstamp 53AB0DCA) + (module ipc_resc:IPC_RESCAXS80P160X320X60-8N (layer 4_bot) (tedit 55E240E2) (tstamp 53AB0DCA) (at 164.6 144.5 180) (path /53A8C780/53AB04B9) - (attr smd) (fp_text reference RP6 (at -1.6 2.5 180) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value 220R (at 0 0 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -1.6 1.95) (end 1.6 1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.6 1.95) (end 1.6 -1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.6 -1.95) (end -1.6 -1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.6 -1.95) (end -1.6 1.95) (layer B.SilkS) (width 0.1524)) + (fp_line (start -1.6 1.95) (end 1.6 1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.6 1.95) (end 1.6 -1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.6 -1.95) (end -1.6 -1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -1.6 -1.95) (end -1.6 1.95) (layer B.CrtYd) (width 0.1524)) (fp_line (start -0.1 1.7) (end 0.1 1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start 0.1 1.7) (end 0.1 -1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start 0.1 -1.7) (end -0.1 -1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start -0.1 -1.7) (end -0.1 1.7) (layer B.SilkS) (width 0.1524)) (pad 2 smd rect (at -0.85 0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 33 /hackrf_if/GPIO3_14)) + (net 85 /hackrf_if/MCU_D6)) (pad 3 smd rect (at -0.85 -0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 29 /hackrf_if/GPIO3_12)) + (net 83 /hackrf_if/MCU_D4)) (pad 1 smd rect (at -0.85 1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 35 /hackrf_if/GPIO3_15)) + (net 84 /hackrf_if/MCU_D7)) (pad 4 smd rect (at -0.85 -1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 31 /hackrf_if/GPIO3_13)) + (net 82 /hackrf_if/MCU_D5)) (pad 5 smd rect (at 0.85 -1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 32 /hackrf_if/GPIO3_13_R)) + (net 121 /hackrf_if/MCU_D5_R)) (pad 6 smd rect (at 0.85 -0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 30 /hackrf_if/GPIO3_12_R)) + (net 122 /hackrf_if/MCU_D4_R)) (pad 7 smd rect (at 0.85 0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 34 /hackrf_if/GPIO3_14_R)) + (net 123 /hackrf_if/MCU_D6_R)) (pad 8 smd rect (at 0.85 1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 36 /hackrf_if/GPIO3_15_R)) + (net 124 /hackrf_if/MCU_D7_R)) ) - (module ipc_resc:IPC_RESCAXS80P160X320X60-8N (layer 4_bot) (tedit 53B193EC) (tstamp 53AB17FF) + (module ipc_resc:IPC_RESCAXS80P160X320X60-8N (layer 4_bot) (tedit 55E240E2) (tstamp 53AB17FF) (at 164.6 149.6 180) (path /53A8C780/53AB04D6) - (attr smd) (fp_text reference RP7 (at 1.8 -2.6 180) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value 220R (at 0 0 180) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) - (fp_line (start -1.6 1.95) (end 1.6 1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.6 1.95) (end 1.6 -1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.6 -1.95) (end -1.6 -1.95) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.6 -1.95) (end -1.6 1.95) (layer B.SilkS) (width 0.1524)) + (fp_line (start -1.6 1.95) (end 1.6 1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.6 1.95) (end 1.6 -1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.6 -1.95) (end -1.6 -1.95) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -1.6 -1.95) (end -1.6 1.95) (layer B.CrtYd) (width 0.1524)) (fp_line (start -0.1 1.7) (end 0.1 1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start 0.1 1.7) (end 0.1 -1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start 0.1 -1.7) (end -0.1 -1.7) (layer B.SilkS) (width 0.1524)) (fp_line (start -0.1 -1.7) (end -0.1 1.7) (layer B.SilkS) (width 0.1524)) (pad 2 smd rect (at -0.85 0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 25 /hackrf_if/GPIO3_10)) + (net 81 /hackrf_if/MCU_D2)) (pad 3 smd rect (at -0.85 -0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 37 /hackrf_if/GPIO3_8)) + (net 79 /hackrf_if/MCU_D0)) (pad 1 smd rect (at -0.85 1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 27 /hackrf_if/GPIO3_11)) + (net 80 /hackrf_if/MCU_D3)) (pad 4 smd rect (at -0.85 -1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 39 /hackrf_if/GPIO3_9)) + (net 78 /hackrf_if/MCU_D1)) (pad 5 smd rect (at 0.85 -1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 40 /hackrf_if/GPIO3_9_R)) + (net 125 /hackrf_if/MCU_D1_R)) (pad 6 smd rect (at 0.85 -0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 38 /hackrf_if/GPIO3_8_R)) + (net 126 /hackrf_if/MCU_D0_R)) (pad 7 smd rect (at 0.85 0.4 180) (size 1 0.5) (layers 4_bot B.Paste B.Mask) - (net 26 /hackrf_if/GPIO3_10_R)) + (net 127 /hackrf_if/MCU_D2_R)) (pad 8 smd rect (at 0.85 1.3 180) (size 1 0.7) (layers 4_bot B.Paste B.Mask) - (net 28 /hackrf_if/GPIO3_11_R)) + (net 128 /hackrf_if/MCU_D3_R)) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B09AE6) (tstamp 53AB16DA) @@ -1543,9 +1562,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 74 /hackrf_if/P2_4_R)) + (net 115 /hackrf_if/MCU_LCD_RD_R)) (pad 2 smd rect (at 0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 73 /hackrf_if/P2_4)) + (net 92 /hackrf_if/MCU_LCD_RD)) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B09AEA) (tstamp 53AB2F99) @@ -1564,9 +1583,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 72 /hackrf_if/P2_3_R)) + (net 116 /hackrf_if/MCU_LCD_TE_R)) (pad 2 smd rect (at 0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 71 /hackrf_if/P2_3)) + (net 91 /hackrf_if/MCU_LCD_TE)) ) (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B09AFE) (tstamp 53AB2FA3) @@ -1585,451 +1604,9 @@ (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.8001 0) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 66 /hackrf_if/P2_0_R)) + (net 117 /hackrf_if/MCU_IO_STBX_R)) (pad 2 smd rect (at 0.8001 0) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 65 /hackrf_if/P2_0)) - ) - - (module ipc_capc:IPC_CAPC1608X95N (layer 4_bot) (tedit 53B098BE) (tstamp 53B07AAF) - (at 114.8 114.8 270) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF1137) - (attr smd) - (fp_text reference C14 (at 5.2 0.2 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 220P (at 0 0 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 0.7493) (end 1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 270) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 2 smd rect (at 0.8001 0 270) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 100 "Net-(C14-Pad2)")) - ) - - (module ipc_capc:IPC_CAPC1608X95N (layer 4_bot) (tedit 53B0989A) (tstamp 53B07AB9) - (at 114.8 110.6 270) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF112C) - (attr smd) - (fp_text reference C15 (at -1.6 3.8 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 220P (at 0 0 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 0.7493) (end 1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 270) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 101 "Net-(C15-Pad1)")) - (pad 2 smd rect (at 0.8001 0 270) (size 0.94996 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - ) - - (module ipc_capae:IPC_CAPAE430X540N (layer 4_bot) (tedit 53B09853) (tstamp 53B07ACA) - (at 119.4 115.6 180) - (tags "CASE B") - (path /53A8BFC3/53AF15D9) - (attr smd) - (fp_text reference C16 (at -2.6 2.2 180) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 1U (at 0 0 180) (layer B.SilkS) - (effects (font (thickness 0.3048)) (justify mirror)) - ) - (fp_line (start 3.52552 -2.75082) (end -3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 -2.75082) (end -3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 2.75082) (end 3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 3.52552 2.75082) (end 3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -2.14884 1.24968) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.24968 -2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -1.24968 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 1.24968) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_circle (center 0 0) (end 1.99898 0) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 13 /audio/LLINEIN)) - (pad 2 smd rect (at 1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 100 "Net-(C14-Pad2)")) - ) - - (module ipc_capae:IPC_CAPAE430X540N (layer 4_bot) (tedit 53B0984B) (tstamp 53B07F9B) - (at 119.4 109.8 180) - (tags "CASE B") - (path /53A8BFC3/53AF15E8) - (attr smd) - (fp_text reference C17 (at -2.6 -2.2 180) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 1U (at 0 0 180) (layer B.SilkS) - (effects (font (thickness 0.3048)) (justify mirror)) - ) - (fp_line (start 3.52552 -2.75082) (end -3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 -2.75082) (end -3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 2.75082) (end 3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 3.52552 2.75082) (end 3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -2.14884 1.24968) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.24968 -2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -1.24968 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 1.24968) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_circle (center 0 0) (end 1.99898 0) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 18 /audio/RLINEIN)) - (pad 2 smd rect (at 1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 101 "Net-(C15-Pad1)")) - ) - - (module ipc_capae:IPC_CAPAE430X540N (layer 4_bot) (tedit 53B098CA) (tstamp 53B07AEC) - (at 96.4 109.8 180) - (tags "CASE B") - (path /53A8BFC3/53AF2762) - (attr smd) - (fp_text reference C20 (at -2.6 -2.2 180) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 10U (at 0 0 180) (layer B.SilkS) - (effects (font (thickness 0.3048)) (justify mirror)) - ) - (fp_line (start 3.52552 -2.75082) (end -3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 -2.75082) (end -3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 2.75082) (end 3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 3.52552 2.75082) (end 3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -2.14884 1.24968) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.24968 -2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -1.24968 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 1.24968) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_circle (center 0 0) (end 1.99898 0) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 14 /audio/LOUT)) - (pad 2 smd rect (at 1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 104 "Net-(C20-Pad2)")) - ) - - (module ipc_capae:IPC_CAPAE430X540N (layer 4_bot) (tedit 53B098D1) (tstamp 53B07AFD) - (at 96.4 115.6 180) - (tags "CASE B") - (path /53A8BFC3/53AF2753) - (attr smd) - (fp_text reference C21 (at -2.6 2.2 180) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 10U (at 0 0 180) (layer B.SilkS) - (effects (font (thickness 0.3048)) (justify mirror)) - ) - (fp_line (start 3.52552 -2.75082) (end -3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 -2.75082) (end -3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start -3.52552 2.75082) (end 3.52552 2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 3.52552 2.75082) (end 3.52552 -2.75082) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -2.14884 1.24968) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.24968 -2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.24968) (end -1.24968 -2.14884) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 1.24968) (end -1.24968 2.14884) (layer B.SilkS) (width 0.1524)) - (fp_circle (center 0 0) (end 1.99898 0) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 2.14884) (end 2.14884 -2.14884) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 19 /audio/ROUT)) - (pad 2 smd rect (at 1.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) - (net 105 "Net-(C21-Pad2)")) - ) - - (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B300CD) (tstamp 53B07B07) - (at 111.4 104.8) - (path /53A8BFC3/53AF093C) - (attr smd) - (fp_text reference L1 (at -1 1.4) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value L (at 0 0) (layer B.SilkS) hide - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start 1.524 0.7493) (end 1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 110 "Net-(L1-Pad1)")) - (pad 2 smd rect (at 0.8001 0) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - ) - - (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B09839) (tstamp 53B0860B) - (at 110.6 116.6 90) - (path /53A8BFC3/53AF20F3) - (attr smd) - (fp_text reference L2 (at -1 -1.4 90) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value L (at 0 0 90) (layer B.SilkS) hide - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start 1.524 0.7493) (end 1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 90) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 112 "Net-(L2-Pad1)")) - (pad 2 smd rect (at 0.8001 0 90) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 113 "Net-(L2-Pad2)")) - ) - - (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B0982D) (tstamp 53B07B1B) - (at 101.6 108.8 90) - (path /53A8BFC3/53AF20FE) - (attr smd) - (fp_text reference L3 (at -2.4 0 90) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value L (at 0 0 90) (layer B.SilkS) hide - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start 1.524 0.7493) (end 1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 90) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 114 "Net-(L3-Pad1)")) - (pad 2 smd rect (at 0.8001 0 90) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 115 "Net-(L3-Pad2)")) - ) - - (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B097BB) (tstamp 53B07B25) - (at 90 110.6 90) - (path /53A8BFC3/53AF25CC) - (attr smd) - (fp_text reference L7 (at -2.2 0 90) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value L (at 0 0 90) (layer B.SilkS) hide - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start 1.524 0.7493) (end 1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 90) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 119 "Net-(L7-Pad1)")) - (pad 2 smd rect (at 0.8001 0 90) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 120 "Net-(L7-Pad2)")) - ) - - (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B09804) (tstamp 53B07B2F) - (at 78.6 108.8 270) - (path /53A8BFC3/53AF25D7) - (attr smd) - (fp_text reference L8 (at 2.4 -0.4 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value L (at 0 0 270) (layer B.SilkS) hide - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start 1.524 0.7493) (end 1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 270) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 121 "Net-(L8-Pad1)")) - (pad 2 smd rect (at 0.8001 0 270) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 122 "Net-(L8-Pad2)")) - ) - - (module ipc_indc:IPC_INDC1608X95N (layer 4_bot) (tedit 53B300D4) (tstamp 53B07B39) - (at 88.4 104.8) - (path /53A8BFC3/53AF0931) - (attr smd) - (fp_text reference L10 (at -1 1.4) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value L (at 0 0) (layer B.SilkS) hide - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start 1.524 0.7493) (end 1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.524 -0.7493) (end -1.524 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 -0.7493) (end -1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.524 0.7493) (end 1.524 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 111 "Net-(L10-Pad1)")) - (pad 2 smd rect (at 0.8001 0) (size 0.94996 0.94996) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - ) - - (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B098AE) (tstamp 53B07B65) - (at 114 117.4 180) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF0B7F) - (attr smd) - (fp_text reference R6 (at 0 -4.2 180) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 5K6 (at 0 0 180) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.50114 0.7493) (end 1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 0.7493) (end 1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 180) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 100 "Net-(C14-Pad2)")) - (pad 2 smd rect (at 0.8001 0 180) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 112 "Net-(L2-Pad1)")) - ) - - (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B098A1) (tstamp 53B07B6F) - (at 114 108 180) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF0B74) - (attr smd) - (fp_text reference R7 (at 1 1.4 180) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 5K6 (at 0 0 180) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.50114 0.7493) (end 1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 0.7493) (end 1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 180) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 101 "Net-(C15-Pad1)")) - (pad 2 smd rect (at 0.8001 0 180) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 114 "Net-(L3-Pad1)")) - ) - - (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B098BC) (tstamp 53B07B79) - (at 113 114.8 270) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF0B8A) - (attr smd) - (fp_text reference R8 (at 5.2 -0.4 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 5K6 (at 0 0 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.50114 0.7493) (end 1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 0.7493) (end 1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 2 smd rect (at 0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 100 "Net-(C14-Pad2)")) - ) - - (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B0989D) (tstamp 53B07B83) - (at 113 110.6 270) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF0B95) - (attr smd) - (fp_text reference R9 (at -1.6 3 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 5K6 (at 0 0 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.50114 0.7493) (end 1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 0.7493) (end 1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 101 "Net-(C15-Pad1)")) - (pad 2 smd rect (at 0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - ) - - (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B097BD) (tstamp 53B07B8D) - (at 91.8 110.6 90) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF2746) - (attr smd) - (fp_text reference R13 (at -2.6 0 90) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 47K (at 0 0 90) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.50114 0.7493) (end 1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 0.7493) (end 1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 2 smd rect (at 0.8001 0 90) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 104 "Net-(C20-Pad2)")) - ) - - (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B097B5) (tstamp 53B07B97) - (at 91.8 116.4 270) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF273B) - (attr smd) - (fp_text reference R14 (at 2.6 0 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 47K (at 0 0 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.50114 0.7493) (end 1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 0.7493) (end 1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 105 "Net-(C21-Pad2)")) - (pad 2 smd rect (at 0.8001 0 270) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - ) - - (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B097C6) (tstamp 53B07BA1) - (at 91 108) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF2725) - (attr smd) - (fp_text reference R15 (at -2.6 0) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 100R (at 0 0) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.50114 0.7493) (end 1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 0.7493) (end 1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 120 "Net-(L7-Pad2)")) - (pad 2 smd rect (at 0.8001 0) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 104 "Net-(C20-Pad2)")) - ) - - (module ipc_resc:IPC_RESC1608X55N (layer 4_bot) (tedit 53B097BA) (tstamp 53B07BAB) - (at 89.2 115.6) - (tags "1608 metric, 0603 imperial") - (path /53A8BFC3/53AF2730) - (attr smd) - (fp_text reference R16 (at -0.6 1.4) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value 100R (at 0 0) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_line (start -1.50114 0.7493) (end 1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 0.7493) (end 1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.50114 -0.7493) (end -1.50114 -0.7493) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.50114 -0.7493) (end -1.50114 0.7493) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -0.8001 0) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 122 "Net-(L8-Pad2)")) - (pad 2 smd rect (at 0.8001 0) (size 0.89916 1.00076) (layers 4_bot B.Paste B.Mask) - (net 105 "Net-(C21-Pad2)")) + (net 98 /hackrf_if/MCU_IO_STBX)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B108E0) (tstamp 53AA27BB) @@ -2039,7 +1616,7 @@ (fp_text reference C41 (at -2.8 0 180) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) - (fp_text value 10U (at 0 0 180) (layer B.SilkS) + (fp_text value DNI (at 0 0 180) (layer B.SilkS) (effects (font (thickness 0.3048)) (justify mirror)) ) (fp_line (start -1.72466 0.97536) (end 1.72466 0.97536) (layer B.SilkS) (width 0.1524)) @@ -2047,9 +1624,9 @@ (fp_line (start 1.72466 -0.97536) (end -1.72466 -0.97536) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.72466 -0.97536) (end -1.72466 0.97536) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 98 /hackrf_if/VBAT)) + (net 62 /hackrf_if/VBAT)) (pad 2 smd rect (at 0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B1092C) (tstamp 53AA27B1) @@ -2069,7 +1646,7 @@ (pad 1 smd rect (at -0.89916 0) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 2 smd rect (at 0.89916 0) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B108F5) (tstamp 53AA279D) @@ -2089,7 +1666,7 @@ (pad 1 smd rect (at -0.89916 0 270) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0 270) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B108FA) (tstamp 53AB408E) @@ -2109,7 +1686,7 @@ (pad 1 smd rect (at -0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 2 smd rect (at 0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B1089D) (tstamp 53AA2789) @@ -2129,7 +1706,7 @@ (pad 1 smd rect (at -0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 2 smd rect (at 0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B10916) (tstamp 53AA2775) @@ -2149,7 +1726,7 @@ (pad 1 smd rect (at -0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B108EA) (tstamp 53AB19ED) @@ -2169,7 +1746,7 @@ (pad 1 smd rect (at -0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B1089A) (tstamp 53AA2725) @@ -2189,7 +1766,7 @@ (pad 1 smd rect (at -0.89916 0) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B108C2) (tstamp 53AA2672) @@ -2209,7 +1786,7 @@ (pad 1 smd rect (at -0.89916 0 270) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0 270) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B108D2) (tstamp 53B0A47A) @@ -2227,9 +1804,9 @@ (fp_line (start 1.72466 -0.97536) (end -1.72466 -0.97536) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.72466 -0.97536) (end -1.72466 0.97536) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.89916 0) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 15 /audio/MICBIAS)) + (net 13 /audio/MICBIAS)) (pad 2 smd rect (at 0.89916 0) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B108AF) (tstamp 53AA265E) @@ -2249,7 +1826,7 @@ (pad 1 smd rect (at -0.89916 0 90) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0 90) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53BC2715) (tstamp 53AA264A) @@ -2269,7 +1846,7 @@ (pad 1 smd rect (at -0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B108CA) (tstamp 53AE5118) @@ -2287,9 +1864,9 @@ (fp_line (start 1.72466 -0.97536) (end -1.72466 -0.97536) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.72466 -0.97536) (end -1.72466 0.97536) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 22 /audio/VMID)) + (net 18 /audio/VMID)) (pad 2 smd rect (at 0.89916 0 180) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B108BE) (tstamp 53AA2636) @@ -2309,7 +1886,7 @@ (pad 1 smd rect (at -0.89916 0 90) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0 90) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B19259) (tstamp 53B19350) @@ -2329,7 +1906,7 @@ (pad 1 smd rect (at -0.89916 0) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module ipc_capc:IPC_CAPC2012X140N (layer 4_bot) (tedit 53B193EF) (tstamp 53B19576) @@ -2349,7 +1926,7 @@ (pad 1 smd rect (at -0.89916 0 270) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 2 smd rect (at 0.89916 0 270) (size 1.15062 1.45034) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) ) (module fiducial:FIDUCIAL_65MIL (layer 4_bot) (tedit 53B2E496) (tstamp 53B2EF36) @@ -2430,9 +2007,9 @@ (pad "" np_thru_hole circle (at 3.182 3.182 90) (size 1.6 1.6) (drill 1.6) (layers *.Cu *.Mask) (clearance 0.4)) (pad CA thru_hole circle (at -6.548 -6.548 90) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask F.SilkS) - (net 99 GND)) + (net 63 GND)) (pad A thru_hole circle (at 6.548 6.548 90) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask F.SilkS) - (net 90 /hackrf_if/SW_ROT_A)) + (net 54 /hackrf_if/SW_ROT_A)) (pad "" np_thru_hole circle (at -10.607 -10.607 90) (size 4 4) (drill 4) (layers *.Cu *.Mask) (clearance 0.4)) (pad "" np_thru_hole circle (at 10.607 -10.607 90) (size 4 4) (drill 4) (layers *.Cu *.Mask) @@ -2442,79 +2019,19 @@ (pad "" np_thru_hole circle (at -10.607 10.607 90) (size 4 4) (drill 4) (layers *.Cu *.Mask) (clearance 0.4)) (pad S1 thru_hole circle (at -1.11 1.11 90) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask F.SilkS) - (net 92 /hackrf_if/SW_SEL)) + (net 56 /hackrf_if/SW_SEL)) (pad B thru_hole circle (at 6.548 -6.548 90) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask F.SilkS) - (net 91 /hackrf_if/SW_ROT_B)) + (net 55 /hackrf_if/SW_ROT_B)) (pad S3 thru_hole circle (at 16.15 -3.606 90) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask F.SilkS) - (net 89 /hackrf_if/SW_R)) + (net 53 /hackrf_if/SW_R)) (pad S2 thru_hole circle (at 7.75 15.104 90) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask F.SilkS) - (net 87 /hackrf_if/SW_D)) + (net 51 /hackrf_if/SW_D)) (pad CB thru_hole circle (at -3.253 16.08 90) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask F.SilkS) - (net 99 GND)) + (net 63 GND)) (pad S5 thru_hole circle (at -16.15 3.606 90) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask F.SilkS) - (net 88 /hackrf_if/SW_L)) + (net 52 /hackrf_if/SW_L)) (pad S4 thru_hole circle (at -7.75 -15.104 90) (size 2.1 2.1) (drill 1.4) (layers *.Cu *.Mask F.SilkS) - (net 93 /hackrf_if/SW_U)) - ) - - (module cui:CUI_SJ-3524-SMT (layer 4_bot) (tedit 53B30009) (tstamp 53B07B5B) - (at 83 106 270) - (path /53A8BFC3/53AF0926) - (attr smd) - (fp_text reference P3 (at 8 3.8 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value TRS_JACK (at 0 0 270) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_line (start -6 3) (end 8.5 3) (layer B.SilkS) (width 0.1524)) - (fp_line (start 8.5 3) (end 8.5 -3) (layer B.SilkS) (width 0.1524)) - (fp_line (start 8.5 -3) (end -6 -3) (layer B.SilkS) (width 0.1524)) - (fp_line (start -6 -3) (end -6 3) (layer B.SilkS) (width 0.1524)) - (fp_line (start -6 2.5) (end -8.5 2.5) (layer B.SilkS) (width 0.1524)) - (fp_line (start -8.5 2.5) (end -8.5 -2.5) (layer B.SilkS) (width 0.1524)) - (fp_line (start -8.5 -2.5) (end -6 -2.5) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -3.6 -3.7 270) (size 2.2 2.8) (layers 4_bot B.Paste B.Mask) - (net 111 "Net-(L10-Pad1)")) - (pad 2 smd rect (at 5.8 -3.7 270) (size 2.8 2.8) (layers 4_bot B.Paste B.Mask) - (net 119 "Net-(L7-Pad1)")) - (pad 4 smd rect (at 9.7 1.075 270) (size 2.8 2.8) (layers 4_bot B.Paste B.Mask)) - (pad 3 smd rect (at -1.6 3.7 270) (size 2.2 2.8) (layers 4_bot B.Paste B.Mask) - (net 121 "Net-(L8-Pad1)")) - (pad "" np_thru_hole circle (at -2.5 0 270) (size 1.7 1.7) (drill 1.7) (layers *.Cu *.Mask B.SilkS) - (clearance 0.4)) - (pad "" np_thru_hole circle (at 4.5 0 270) (size 1.7 1.7) (drill 1.7) (layers *.Cu *.Mask B.SilkS) - (clearance 0.4)) - ) - - (module cui:CUI_SJ-3524-SMT (layer 4_bot) (tedit 53B30010) (tstamp 53B07B4A) - (at 106 106 270) - (path /53A8BFC3/53AF0914) - (attr smd) - (fp_text reference P1 (at 8 3.8 270) (layer B.SilkS) - (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) - ) - (fp_text value TRS_JACK (at 0 0 270) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) - ) - (fp_line (start -6 3) (end 8.5 3) (layer B.SilkS) (width 0.1524)) - (fp_line (start 8.5 3) (end 8.5 -3) (layer B.SilkS) (width 0.1524)) - (fp_line (start 8.5 -3) (end -6 -3) (layer B.SilkS) (width 0.1524)) - (fp_line (start -6 -3) (end -6 3) (layer B.SilkS) (width 0.1524)) - (fp_line (start -6 2.5) (end -8.5 2.5) (layer B.SilkS) (width 0.1524)) - (fp_line (start -8.5 2.5) (end -8.5 -2.5) (layer B.SilkS) (width 0.1524)) - (fp_line (start -8.5 -2.5) (end -6 -2.5) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -3.6 -3.7 270) (size 2.2 2.8) (layers 4_bot B.Paste B.Mask) - (net 110 "Net-(L1-Pad1)")) - (pad 2 smd rect (at 5.8 -3.7 270) (size 2.8 2.8) (layers 4_bot B.Paste B.Mask) - (net 113 "Net-(L2-Pad2)")) - (pad 4 smd rect (at 9.7 1.075 270) (size 2.8 2.8) (layers 4_bot B.Paste B.Mask)) - (pad 3 smd rect (at -1.6 3.7 270) (size 2.2 2.8) (layers 4_bot B.Paste B.Mask) - (net 115 "Net-(L3-Pad2)")) - (pad "" np_thru_hole circle (at -2.5 0 270) (size 1.7 1.7) (drill 1.7) (layers *.Cu *.Mask B.SilkS) - (clearance 0.4)) - (pad "" np_thru_hole circle (at 4.5 0 270) (size 1.7 1.7) (drill 1.7) (layers *.Cu *.Mask B.SilkS) - (clearance 0.4)) + (net 57 /hackrf_if/SW_U)) ) (module cui:CUI_SJ-43516-SMT (layer 4_bot) (tedit 53B3001C) (tstamp 53AA3C96) @@ -2537,26 +2054,28 @@ (fp_line (start -8.5 2.5) (end -8.5 -2.5) (layer B.SilkS) (width 0.1524)) (fp_line (start -8.5 -2.5) (end -7 -2.5) (layer B.SilkS) (width 0.1524)) (pad 1 smd rect (at -6.4 -3.7 180) (size 2.2 2.8) (layers 4_bot B.Paste B.Mask) - (net 123 "Net-(L9-Pad1)")) + (net 73 "Net-(L9-Pad1)")) (pad 4 smd rect (at -3.6 -3.7 180) (size 2.2 2.8) (layers 4_bot B.Paste B.Mask) - (net 118 "Net-(L6-Pad1)")) + (net 72 "Net-(L6-Pad1)")) (pad 2 smd rect (at 5.8 -3.7 180) (size 2.8 2.8) (layers 4_bot B.Paste B.Mask) - (net 116 "Net-(L4-Pad1)")) - (pad 5 smd rect (at 9.9 0.75 180) (size 2.8 2.8) (layers 4_bot B.Paste B.Mask)) + (net 70 "Net-(L4-Pad1)")) + (pad 5 smd rect (at 9.9 0.75 180) (size 2.8 2.8) (layers 4_bot B.Paste B.Mask) + (net 74 "Net-(P2-Pad5)")) (pad 3 smd rect (at -1.7 3.7 180) (size 2 2.8) (layers 4_bot B.Paste B.Mask) - (net 117 "Net-(L5-Pad1)")) - (pad 6 smd rect (at -4.5 3.7 180) (size 2 2.8) (layers 4_bot B.Paste B.Mask)) + (net 71 "Net-(L5-Pad1)")) + (pad 6 smd rect (at -4.5 3.7 180) (size 2 2.8) (layers 4_bot B.Paste B.Mask) + (net 75 "Net-(P2-Pad6)")) (pad "" np_thru_hole circle (at -2.5 0 180) (size 1.7 1.7) (drill 1.7) (layers *.Cu *.Mask B.SilkS) (clearance 0.4)) (pad "" np_thru_hole circle (at 4.5 0 180) (size 1.7 1.7) (drill 1.7) (layers *.Cu *.Mask B.SilkS) (clearance 0.4)) ) - (module ipc_sop:IPC_SOP65P780X200-28N (layer 4_bot) (tedit 53B30ABE) (tstamp 53AA2AD7) + (module ipc_sop:IPC_SOP65P780X200-28N (layer 4_bot) (tedit 55E2538C) (tstamp 53AA2AD7) (at 137.4 114 90) (tags "JEDEC MO-150AH") (path /53A8BFC3/53A8C66D) - (attr smd) + (solder_mask_margin 0.0492) (fp_text reference U1 (at -5.2 6.2 90) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) @@ -2565,98 +2084,99 @@ ) (fp_circle (center -4.184 4.98602) (end -4.084 4.98602) (layer B.SilkS) (width 0.1524)) (fp_line (start -1.8 5.1) (end -1.8 -5.1) (layer B.SilkS) (width 0.1524)) - (fp_line (start -4.67614 5.4991) (end 4.67614 5.4991) (layer B.SilkS) (width 0.1524)) - (fp_line (start 4.67614 5.4991) (end 4.67614 -5.4991) (layer B.SilkS) (width 0.1524)) - (fp_line (start 4.67614 -5.4991) (end -4.67614 -5.4991) (layer B.SilkS) (width 0.1524)) - (fp_line (start -4.67614 -5.4991) (end -4.67614 5.4991) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.25044 5.10032) (end 2.25044 5.10032) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.25044 5.10032) (end 2.25044 -5.10032) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.25044 -5.10032) (end -2.25044 -5.10032) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.25044 -5.10032) (end -2.25044 5.10032) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -3.50012 4.22402 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (fp_line (start -4.675 5.5) (end 4.675 5.5) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 4.675 5.5) (end 4.675 -5.5) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 4.675 -5.5) (end -4.675 -5.5) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -4.675 -5.5) (end -4.675 5.5) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -2.25 5.1) (end 2.25 5.1) (layer B.SilkS) (width 0.1524)) + (fp_line (start 2.25 5.1) (end 2.25 -5.1) (layer B.SilkS) (width 0.1524)) + (fp_line (start 2.25 -5.1) (end -2.25 -5.1) (layer B.SilkS) (width 0.1524)) + (fp_line (start -2.25 -5.1) (end -2.25 5.1) (layer B.SilkS) (width 0.1524)) + (pad 1 smd rect (at -3.5 4.225 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) - (pad 2 smd rect (at -3.50012 3.57378 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask)) - (pad 3 smd rect (at -3.50012 2.92608 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 2 smd rect (at -3.5 3.575 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 129 "Net-(U1-Pad2)")) + (pad 3 smd rect (at -3.5 2.925 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 7 /audio/I2S0_SCK_R)) - (pad 4 smd rect (at -3.50012 2.27584 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 4 smd rect (at -3.5 2.275 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 9 /audio/I2S0_TX_SDA_R)) - (pad 5 smd rect (at -3.50012 1.6256 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 5 smd rect (at -3.5 1.625 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 11 /audio/I2S0_WS_R)) - (pad 6 smd rect (at -3.50012 0.97536 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 6 smd rect (at -3.5 0.975 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 5 /audio/I2S0_RX_SDA)) - (pad 7 smd rect (at -3.50012 0.32512 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 7 smd rect (at -3.5 0.325 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 11 /audio/I2S0_WS_R)) - (pad 8 smd rect (at -3.50012 -0.32512 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 8 smd rect (at -3.5 -0.325 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) - (pad 9 smd rect (at -3.50012 -0.97536 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 9 smd rect (at -3.5 -0.975 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 12 /audio/LHPOUT)) - (pad 10 smd rect (at -3.50012 -1.6256 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 17 /audio/RHPOUT)) - (pad 11 smd rect (at -3.50012 -2.27584 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 12 smd rect (at -3.50012 -2.92608 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 14 /audio/LOUT)) - (pad 13 smd rect (at -3.50012 -3.57378 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 19 /audio/ROUT)) - (pad 14 smd rect (at -3.50012 -4.22402 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 10 smd rect (at -3.5 -1.625 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 15 /audio/RHPOUT)) + (pad 11 smd rect (at -3.5 -2.275 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 63 GND)) + (pad 12 smd rect (at -3.5 -2.925 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 130 "Net-(U1-Pad12)")) + (pad 13 smd rect (at -3.5 -3.575 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 131 "Net-(U1-Pad13)")) + (pad 14 smd rect (at -3.5 -4.225 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) - (pad 15 smd rect (at 3.50012 -4.22402 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 16 smd rect (at 3.50012 -3.57378 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 22 /audio/VMID)) - (pad 17 smd rect (at 3.50012 -2.92608 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 15 /audio/MICBIAS)) - (pad 18 smd rect (at 3.50012 -2.27584 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 16 /audio/MICIN)) - (pad 19 smd rect (at 3.50012 -1.6256 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 18 /audio/RLINEIN)) - (pad 20 smd rect (at 3.50012 -0.97536 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 13 /audio/LLINEIN)) - (pad 21 smd rect (at 3.50012 -0.32512 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 22 smd rect (at 3.50012 0.32512 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 23 smd rect (at 3.50012 0.97536 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 21 /audio/SDA)) - (pad 24 smd rect (at 3.50012 1.6256 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 20 /audio/SCL)) - (pad 25 smd rect (at 3.50012 2.27584 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 15 smd rect (at 3.5 -4.225 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 63 GND)) + (pad 16 smd rect (at 3.5 -3.575 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 18 /audio/VMID)) + (pad 17 smd rect (at 3.5 -2.925 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 13 /audio/MICBIAS)) + (pad 18 smd rect (at 3.5 -2.275 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 14 /audio/MICIN)) + (pad 19 smd rect (at 3.5 -1.625 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 132 "Net-(U1-Pad19)")) + (pad 20 smd rect (at 3.5 -0.975 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 133 "Net-(U1-Pad20)")) + (pad 21 smd rect (at 3.5 -0.325 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 63 GND)) + (pad 22 smd rect (at 3.5 0.325 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 63 GND)) + (pad 23 smd rect (at 3.5 0.975 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 17 /audio/SDA)) + (pad 24 smd rect (at 3.5 1.625 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 16 /audio/SCL)) + (pad 25 smd rect (at 3.5 2.275 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 4 /audio/I2S0_MCLK_R)) - (pad 26 smd rect (at 3.50012 2.92608 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask)) - (pad 27 smd rect (at 3.50012 3.57378 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (pad 26 smd rect (at 3.5 2.925 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 134 "Net-(U1-Pad26)")) + (pad 27 smd rect (at 3.5 3.575 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) - (pad 28 smd rect (at 3.50012 4.22402 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (pad 28 smd rect (at 3.5 4.225 90) (size 1.85 0.45) (layers 4_bot B.Paste B.Mask) + (net 63 GND)) ) - (module ipc_sot:IPC_SOT95P280X110-5N (layer 4_bot) (tedit 53B30B6B) (tstamp 53AA2AE9) + (module ipc_sot:IPC_SOT95P280X110-5N (layer 4_bot) (tedit 55E242AA) (tstamp 53AA2AE9) (at 98 147.8 180) (path /53A8C780/53A8D586) - (attr smd) (fp_text reference U2 (at -2.8 2.8 180) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value REGULATOR_SOT23_5 (at 0 0 180) (layer B.SilkS) (effects (font (thickness 0.3048)) (justify mirror)) ) - (fp_line (start -0.47498 1.45034) (end 0.47498 1.45034) (layer B.SilkS) (width 0.1524)) - (fp_line (start 0.47498 1.45034) (end 0.47498 -1.45034) (layer B.SilkS) (width 0.1524)) - (fp_line (start 0.47498 -1.45034) (end -0.47498 -1.45034) (layer B.SilkS) (width 0.1524)) - (fp_line (start -0.47498 -1.45034) (end -0.47498 1.45034) (layer B.SilkS) (width 0.1524)) - (fp_circle (center -1.97866 2.21996) (end -1.8796 2.21996) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 1.77546) (end 2.14884 1.77546) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 1.77546) (end 2.14884 -1.77546) (layer B.SilkS) (width 0.1524)) - (fp_line (start 2.14884 -1.77546) (end -2.14884 -1.77546) (layer B.SilkS) (width 0.1524)) - (fp_line (start -2.14884 -1.77546) (end -2.14884 1.77546) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -1.34874 0.94996 180) (size 1.09982 0.59944) (layers 4_bot B.Paste B.Mask) + (fp_line (start -0.475 1.45) (end 0.475 1.45) (layer B.SilkS) (width 0.1524)) + (fp_line (start 0.475 1.45) (end 0.475 -1.45) (layer B.SilkS) (width 0.1524)) + (fp_line (start 0.475 -1.45) (end -0.475 -1.45) (layer B.SilkS) (width 0.1524)) + (fp_line (start -0.475 -1.45) (end -0.475 1.45) (layer B.SilkS) (width 0.1524)) + (fp_circle (center -1.98 2.22) (end -1.88 2.22) (layer B.SilkS) (width 0.1524)) + (fp_line (start -2.15 1.775) (end 2.15 1.775) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 2.15 1.775) (end 2.15 -1.775) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 2.15 -1.775) (end -2.15 -1.775) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -2.15 -1.775) (end -2.15 1.775) (layer B.CrtYd) (width 0.1524)) + (pad 1 smd rect (at -1.35 0.95 180) (size 1.1 0.6) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) - (pad 2 smd rect (at -1.34874 0 180) (size 1.09982 0.59944) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 3 smd rect (at -1.34874 -0.94996 180) (size 1.09982 0.59944) (layers 4_bot B.Paste B.Mask) + (pad 2 smd rect (at -1.35 0 180) (size 1.1 0.6) (layers 4_bot B.Paste B.Mask) + (net 63 GND)) + (pad 3 smd rect (at -1.35 -0.95 180) (size 1.1 0.6) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) - (pad 4 smd rect (at 1.34874 -0.94996 180) (size 1.09982 0.59944) (layers 4_bot B.Paste B.Mask) - (net 108 "Net-(C39-Pad1)")) - (pad 5 smd rect (at 1.34874 0.94996 180) (size 1.09982 0.59944) (layers 4_bot B.Paste B.Mask) + (pad 4 smd rect (at 1.35 -0.95 180) (size 1.1 0.6) (layers 4_bot B.Paste B.Mask) + (net 68 "Net-(C39-Pad1)")) + (pad 5 smd rect (at 1.35 0.95 180) (size 1.1 0.6) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) ) @@ -2688,63 +2208,62 @@ (fp_line (start 6.9 7.6) (end 6.9 -7.6) (layer B.SilkS) (width 0.1524)) (fp_line (start -6.9 7.6) (end 6.9 7.6) (layer B.SilkS) (width 0.1524)) (pad SH smd rect (at -4.725 7.425 90) (size 1.2 0.85) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad A smd rect (at -3.475 7.475 90) (size 0.65 0.75) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad B smd rect (at 2.875 7.475 90) (size 0.65 0.75) (layers 4_bot B.Paste B.Mask) - (net 80 /hackrf_if/SD_CD)) + (net 44 /hackrf_if/SD_CD)) (pad SH smd rect (at 6.025 7.425 90) (size 1.3 0.85) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad SH smd rect (at -6.575 -7.15 90) (size 0.95 1.1) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad SH smd rect (at 6.575 -7.25 90) (size 0.95 0.9) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 0 smd rect (at -3.275 -5.825 90) (size 0.7 0.95) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 0 smd rect (at 0.725 -5.825 90) (size 0.7 0.95) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 smd rect (at 2.225 -4.325 90) (size 0.7 1.05) (layers 4_bot B.Paste B.Mask) - (net 85 /hackrf_if/SD_DAT2)) + (net 49 /hackrf_if/SD_DAT2)) (pad 2 smd rect (at 1.225 -4.325 90) (size 0.7 1.05) (layers 4_bot B.Paste B.Mask) - (net 86 /hackrf_if/SD_DAT3)) + (net 50 /hackrf_if/SD_DAT3)) (pad 3 smd rect (at 0.225 -4.325 90) (size 0.7 1.05) (layers 4_bot B.Paste B.Mask) - (net 82 /hackrf_if/SD_CMD)) + (net 46 /hackrf_if/SD_CMD)) (pad 4 smd rect (at -0.775 -4.325 90) (size 0.7 1.05) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 5 smd rect (at -1.775 -4.325 90) (size 0.7 1.05) (layers 4_bot B.Paste B.Mask) - (net 81 /hackrf_if/SD_CLK)) + (net 45 /hackrf_if/SD_CLK)) (pad 6 smd rect (at -2.775 -4.325 90) (size 0.7 1.05) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 7 smd rect (at -3.775 -4.325 90) (size 0.7 1.05) (layers 4_bot B.Paste B.Mask) - (net 83 /hackrf_if/SD_DAT0)) + (net 47 /hackrf_if/SD_DAT0)) (pad 8 smd rect (at -4.775 -4.325 90) (size 0.7 1.05) (layers 4_bot B.Paste B.Mask) - (net 84 /hackrf_if/SD_DAT1)) + (net 48 /hackrf_if/SD_DAT1)) ) - (module ipc_sot:IPC_SOT95P230X110-3N (layer 4_bot) (tedit 53C5B3D1) (tstamp 53C5B8DC) + (module ipc_sot:IPC_SOT95P230X110-3N (layer 4_bot) (tedit 55E241DF) (tstamp 53C5B8DC) (at 91.6 148.4 180) (path /53A9129D/53C5B6EB) - (attr smd) (fp_text reference Q1 (at -1.4 2.4 180) (layer B.SilkS) (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value MOSFET_N (at 0 0 180) (layer B.SilkS) (effects (font (thickness 0.3048)) (justify mirror)) ) - (fp_line (start -1.89992 1.75006) (end 1.89992 1.75006) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.89992 1.75006) (end 1.89992 -1.75006) (layer B.SilkS) (width 0.1524)) - (fp_line (start 1.89992 -1.75006) (end -1.89992 -1.75006) (layer B.SilkS) (width 0.1524)) - (fp_line (start -1.89992 -1.75006) (end -1.89992 1.75006) (layer B.SilkS) (width 0.1524)) - (fp_line (start -0.32512 1.45034) (end 0.32512 1.45034) (layer B.SilkS) (width 0.1524)) - (fp_line (start 0.32512 1.45034) (end 0.32512 -1.45034) (layer B.SilkS) (width 0.1524)) - (fp_line (start 0.32512 -1.45034) (end -0.32512 -1.45034) (layer B.SilkS) (width 0.1524)) - (fp_line (start -0.32512 -1.45034) (end -0.32512 1.45034) (layer B.SilkS) (width 0.1524)) - (pad 1 smd rect (at -1.15062 0.94996 180) (size 1.00076 0.59944) (layers 4_bot B.Paste B.Mask) - (net 41 /hackrf_if/LCD_BACKLIGHT)) - (pad 2 smd rect (at -1.15062 -0.94996 180) (size 1.00076 0.59944) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 3 smd rect (at 1.15062 0 180) (size 1.00076 0.59944) (layers 4_bot B.Paste B.Mask) - (net 109 "Net-(J3-Pad1)")) + (fp_line (start -1.9 1.75) (end 1.9 1.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.9 1.75) (end 1.9 -1.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 1.9 -1.75) (end -1.9 -1.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -1.9 -1.75) (end -1.9 1.75) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -0.325 1.45) (end 0.325 1.45) (layer B.SilkS) (width 0.1524)) + (fp_line (start 0.325 1.45) (end 0.325 -1.45) (layer B.SilkS) (width 0.1524)) + (fp_line (start 0.325 -1.45) (end -0.325 -1.45) (layer B.SilkS) (width 0.1524)) + (fp_line (start -0.325 -1.45) (end -0.325 1.45) (layer B.SilkS) (width 0.1524)) + (pad 1 smd rect (at -1.15 0.95 180) (size 1 0.6) (layers 4_bot B.Paste B.Mask) + (net 19 /hackrf_if/LCD_BACKLIGHT)) + (pad 2 smd rect (at -1.15 -0.95 180) (size 1 0.6) (layers 4_bot B.Paste B.Mask) + (net 63 GND)) + (pad 3 smd rect (at 1.15 0 180) (size 1 0.6) (layers 4_bot B.Paste B.Mask) + (net 69 "Net-(J3-Pad1)")) ) (module header:HEADER_13X2_REV_SM_254_AP (layer 4_bot) (tedit 53F39BE9) (tstamp 53AA297D) @@ -2763,25 +2282,32 @@ (fp_line (start 2.5 16.51) (end 2.5 -16.51) (layer B.SilkS) (width 0.1524)) (fp_line (start 2.5 -16.51) (end -2.5 -16.51) (layer B.SilkS) (width 0.1524)) (fp_line (start -2.5 -16.51) (end -2.5 16.51) (layer B.SilkS) (width 0.1524)) - (pad 2 smd rect (at -2.73 15.24 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) - (pad 1 smd rect (at 2.73 15.24 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (pad 2 smd rect (at -2.73 15.24 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 89 "Net-(P22-Pad2)")) + (pad 1 smd rect (at 2.73 15.24 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 90 "Net-(P22-Pad1)")) (pad 4 smd rect (at -2.73 12.7 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 3 smd rect (at 2.73 12.7 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 79 /hackrf_if/RESET#)) + (net 43 /hackrf_if/RESET#)) (pad 6 smd rect (at -2.73 10.16 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 71 /hackrf_if/P2_3)) + (net 91 /hackrf_if/MCU_LCD_TE)) (pad 5 smd rect (at 2.73 10.16 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 73 /hackrf_if/P2_4)) - (pad 8 smd rect (at -2.73 7.62 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) - (pad 7 smd rect (at 2.73 7.62 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (net 92 /hackrf_if/MCU_LCD_RD)) + (pad 8 smd rect (at -2.73 7.62 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 93 "Net-(P22-Pad8)")) + (pad 7 smd rect (at 2.73 7.62 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 94 "Net-(P22-Pad7)")) (pad 10 smd rect (at -2.73 5.08 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 9 smd rect (at 2.73 5.08 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) - (pad 12 smd rect (at -2.73 2.54 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (net 63 GND)) + (pad 9 smd rect (at 2.73 5.08 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 95 "Net-(P22-Pad9)")) + (pad 12 smd rect (at -2.73 2.54 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 96 "Net-(P22-Pad12)")) (pad 11 smd rect (at 2.73 2.54 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) - (pad 14 smd rect (at -2.73 0 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (pad 14 smd rect (at -2.73 0 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 97 "Net-(P22-Pad14)")) (pad 13 smd rect (at 2.73 0 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) (net 8 /audio/I2S0_TX_SDA)) (pad 16 smd rect (at -2.73 -2.54 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) @@ -2789,24 +2315,25 @@ (pad 15 smd rect (at 2.73 -2.54 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) (net 10 /audio/I2S0_WS)) (pad 18 smd rect (at -2.73 -5.08 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 17 smd rect (at 2.73 -5.08 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) (net 3 /audio/I2S0_MCLK)) (pad 20 smd rect (at -2.73 -7.62 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 65 /hackrf_if/P2_0)) + (net 98 /hackrf_if/MCU_IO_STBX)) (pad 19 smd rect (at 2.73 -7.62 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 67 /hackrf_if/P2_1)) + (net 99 /hackrf_if/MCU_ADDR)) (pad 22 smd rect (at -2.73 -10.16 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 68 /hackrf_if/P2_13)) + (net 100 /hackrf_if/MCU_DIR)) (pad 21 smd rect (at 2.73 -10.16 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 77 /hackrf_if/P2_9)) + (net 101 /hackrf_if/MCU_LCD_WR)) (pad 24 smd rect (at -2.73 -12.7 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 21 /audio/SDA)) + (net 17 /audio/SDA)) (pad 23 smd rect (at 2.73 -12.7 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 75 /hackrf_if/P2_8)) + (net 41 /hackrf_if/P2_8)) (pad 26 smd rect (at -2.73 -15.24 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 20 /audio/SCL)) - (pad 25 smd rect (at 2.73 -15.24 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (net 16 /audio/SCL)) + (pad 25 smd rect (at 2.73 -15.24 90) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 102 "Net-(P22-Pad25)")) (pad "" np_thru_hole circle (at 0 13.97 90) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask) (clearance 0.4)) (pad "" np_thru_hole circle (at 0 -13.97 90) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask) @@ -2830,41 +2357,49 @@ (fp_line (start 2.5 -13.97) (end -2.5 -13.97) (layer B.SilkS) (width 0.1524)) (fp_line (start -2.5 -13.97) (end -2.5 13.97) (layer B.SilkS) (width 0.1524)) (pad 2 smd rect (at -2.73 12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 1 smd rect (at 2.73 12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 4 smd rect (at -2.73 10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 86 /hackrf_if/SD_DAT3)) + (net 50 /hackrf_if/SD_DAT3)) (pad 3 smd rect (at 2.73 10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 80 /hackrf_if/SD_CD)) + (net 44 /hackrf_if/SD_CD)) (pad 6 smd rect (at -2.73 7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 84 /hackrf_if/SD_DAT1)) + (net 48 /hackrf_if/SD_DAT1)) (pad 5 smd rect (at 2.73 7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 85 /hackrf_if/SD_DAT2)) + (net 49 /hackrf_if/SD_DAT2)) (pad 8 smd rect (at -2.73 5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 64 /hackrf_if/P1_8)) + (net 103 /hackrf_if/PP_CPLD_TMS)) (pad 7 smd rect (at 2.73 5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 83 /hackrf_if/SD_DAT0)) + (net 47 /hackrf_if/SD_DAT0)) (pad 10 smd rect (at -2.73 2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 63 /hackrf_if/P1_5)) + (net 104 /hackrf_if/PP_CPLD_TDO)) (pad 9 smd rect (at 2.73 2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 82 /hackrf_if/SD_CMD)) + (net 46 /hackrf_if/SD_CMD)) (pad 12 smd rect (at -2.73 0) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 11 smd rect (at 2.73 0) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 81 /hackrf_if/SD_CLK)) - (pad 14 smd rect (at -2.73 -2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) - (pad 13 smd rect (at 2.73 -2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) - (pad 16 smd rect (at -2.73 -5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) - (pad 15 smd rect (at 2.73 -5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) - (pad 18 smd rect (at -2.73 -7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (net 45 /hackrf_if/SD_CLK)) + (pad 14 smd rect (at -2.73 -2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 105 "Net-(P28-Pad14)")) + (pad 13 smd rect (at 2.73 -2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 106 "Net-(P28-Pad13)")) + (pad 16 smd rect (at -2.73 -5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 107 "Net-(P28-Pad16)")) + (pad 15 smd rect (at 2.73 -5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 108 "Net-(P28-Pad15)")) + (pad 18 smd rect (at -2.73 -7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 109 "Net-(P28-Pad18)")) (pad 17 smd rect (at 2.73 -7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 23 /hackrf_if/CPLD_TCK)) - (pad 20 smd rect (at -2.73 -10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (net 110 /hackrf_if/H1_CPLD_TCK)) + (pad 20 smd rect (at -2.73 -10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 111 "Net-(P28-Pad20)")) (pad 19 smd rect (at 2.73 -10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 24 /hackrf_if/CPLD_TDI)) - (pad 22 smd rect (at -2.73 -12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) - (pad 21 smd rect (at 2.73 -12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (net 112 /hackrf_if/H1_CPLD_TDI)) + (pad 22 smd rect (at -2.73 -12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 113 "Net-(P28-Pad22)")) + (pad 21 smd rect (at 2.73 -12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 114 "Net-(P28-Pad21)")) (pad "" np_thru_hole circle (at 0 11.43) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask) (clearance 0.4)) (pad "" np_thru_hole circle (at 0 -11.43) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask) @@ -2887,214 +2422,350 @@ (fp_line (start 2.5 13.97) (end 2.5 -13.97) (layer B.SilkS) (width 0.1524)) (fp_line (start 2.5 -13.97) (end -2.5 -13.97) (layer B.SilkS) (width 0.1524)) (fp_line (start -2.5 -13.97) (end -2.5 13.97) (layer B.SilkS) (width 0.1524)) - (pad 2 smd rect (at -2.73 12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (pad 2 smd rect (at -2.73 12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 76 "Net-(P20-Pad2)")) (pad 1 smd rect (at 2.73 12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 98 /hackrf_if/VBAT)) - (pad 4 smd rect (at -2.73 10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (net 62 /hackrf_if/VBAT)) + (pad 4 smd rect (at -2.73 10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 77 "Net-(P20-Pad4)")) (pad 3 smd rect (at 2.73 10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 6 smd rect (at -2.73 7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 39 /hackrf_if/GPIO3_9)) + (net 78 /hackrf_if/MCU_D1)) (pad 5 smd rect (at 2.73 7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 37 /hackrf_if/GPIO3_8)) + (net 79 /hackrf_if/MCU_D0)) (pad 8 smd rect (at -2.73 5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 27 /hackrf_if/GPIO3_11)) + (net 80 /hackrf_if/MCU_D3)) (pad 7 smd rect (at 2.73 5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 25 /hackrf_if/GPIO3_10)) + (net 81 /hackrf_if/MCU_D2)) (pad 10 smd rect (at -2.73 2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 31 /hackrf_if/GPIO3_13)) + (net 82 /hackrf_if/MCU_D5)) (pad 9 smd rect (at 2.73 2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 29 /hackrf_if/GPIO3_12)) + (net 83 /hackrf_if/MCU_D4)) (pad 12 smd rect (at -2.73 0) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 35 /hackrf_if/GPIO3_15)) + (net 84 /hackrf_if/MCU_D7)) (pad 11 smd rect (at 2.73 0) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 33 /hackrf_if/GPIO3_14)) + (net 85 /hackrf_if/MCU_D6)) (pad 14 smd rect (at -2.73 -2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 96 /hackrf_if/TP_R)) + (net 60 /hackrf_if/TP_R)) (pad 13 smd rect (at 2.73 -2.54) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 16 smd rect (at -2.73 -5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 94 /hackrf_if/TP_D)) + (net 58 /hackrf_if/TP_D)) (pad 15 smd rect (at 2.73 -5.08) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) + (net 63 GND)) (pad 18 smd rect (at -2.73 -7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 95 /hackrf_if/TP_L)) - (pad 17 smd rect (at 2.73 -7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (net 59 /hackrf_if/TP_L)) + (pad 17 smd rect (at 2.73 -7.62) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 86 "Net-(P20-Pad17)")) (pad 20 smd rect (at -2.73 -10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 97 /hackrf_if/TP_U)) + (net 61 /hackrf_if/TP_U)) (pad 19 smd rect (at 2.73 -10.16) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) - (net 99 GND)) - (pad 22 smd rect (at -2.73 -12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) - (pad 21 smd rect (at 2.73 -12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask)) + (net 63 GND)) + (pad 22 smd rect (at -2.73 -12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 87 "Net-(P20-Pad22)")) + (pad 21 smd rect (at 2.73 -12.7) (size 3.18 1.02) (layers 4_bot B.Paste B.Mask) + (net 88 "Net-(P20-Pad21)")) (pad "" np_thru_hole circle (at 0 11.43) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask) (clearance 0.4)) (pad "" np_thru_hole circle (at 0 -11.43) (size 1.8 1.8) (drill 1.8) (layers *.Cu *.Mask) (clearance 0.4)) ) - (module ipc_qfp:IPC_QFP40P900X900X120-65N (layer 4_bot) (tedit 53FCB39E) (tstamp 53AA699D) + (module ipc_qfp:IPC_QFP40P900X900X120-65N (layer 4_bot) (tedit 55E249FD) (tstamp 53AA699D) (at 97.6 132.8 270) (path /53A8C780/53A8D11B) - (attr smd) - (fp_text reference U3 (at 0 0 270) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (solder_mask_margin 0.0492) + (fp_text reference U3 (at -4.8 6 360) (layer B.SilkS) + (effects (font (size 0.6096 0.6096) (thickness 0.1524)) (justify mirror)) ) (fp_text value 5M40ZE64 (at 0 0 270) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) (fp_circle (center -5.6 3) (end -5.5 3) (layer B.SilkS) (width 0.15)) - (fp_line (start -5.2 5.2) (end -5.2 -5.2) (layer B.SilkS) (width 0.15)) - (fp_line (start -5.2 -5.2) (end 5.2 -5.2) (layer B.SilkS) (width 0.15)) - (fp_line (start 5.2 -5.2) (end 5.2 5.2) (layer B.SilkS) (width 0.15)) - (fp_line (start 5.2 5.2) (end -5.2 5.2) (layer B.SilkS) (width 0.15)) + (fp_line (start -5.2 5.2) (end -5.2 -5.2) (layer B.CrtYd) (width 0.15)) + (fp_line (start -5.2 -5.2) (end 5.2 -5.2) (layer B.CrtYd) (width 0.15)) + (fp_line (start 5.2 -5.2) (end 5.2 5.2) (layer B.CrtYd) (width 0.15)) + (fp_line (start 5.2 5.2) (end -5.2 5.2) (layer B.CrtYd) (width 0.15)) (fp_line (start -3.1 3.1) (end -3.1 -3.1) (layer B.SilkS) (width 0.15)) (fp_line (start -3.1 -3.1) (end 3.1 -3.1) (layer B.SilkS) (width 0.15)) (fp_line (start 3.1 -3.1) (end 3.1 3.1) (layer B.SilkS) (width 0.15)) (fp_line (start 3.1 3.1) (end -3.1 3.1) (layer B.SilkS) (width 0.15)) (pad 1 smd rect (at -4.2 3 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 94 /hackrf_if/TP_D)) + (net 58 /hackrf_if/TP_D)) (pad 2 smd rect (at -4.2 2.6 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 95 /hackrf_if/TP_L)) + (net 59 /hackrf_if/TP_L)) (pad 3 smd rect (at -4.2 2.2 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 97 /hackrf_if/TP_U)) + (net 61 /hackrf_if/TP_U)) (pad 4 smd rect (at -4.2 1.8 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 41 /hackrf_if/LCD_BACKLIGHT)) - (pad 5 smd rect (at -4.2 1.4 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask)) + (net 19 /hackrf_if/LCD_BACKLIGHT)) + (pad 5 smd rect (at -4.2 1.4 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) + (net 135 "Net-(U3-Pad5)")) (pad 6 smd rect (at -4.2 1 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) - (pad 7 smd rect (at -4.2 0.6 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask)) + (pad 7 smd rect (at -4.2 0.6 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) + (net 136 "Net-(U3-Pad7)")) (pad 8 smd rect (at -4.2 0.2 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 9 smd rect (at -4.2 -0.2 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 89 /hackrf_if/SW_R)) + (net 53 /hackrf_if/SW_R)) (pad 10 smd rect (at -4.2 -0.6 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 87 /hackrf_if/SW_D)) + (net 51 /hackrf_if/SW_D)) (pad 11 smd rect (at -4.2 -1 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 90 /hackrf_if/SW_ROT_A)) + (net 54 /hackrf_if/SW_ROT_A)) (pad 12 smd rect (at -4.2 -1.4 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 91 /hackrf_if/SW_ROT_B)) + (net 55 /hackrf_if/SW_ROT_B)) (pad 13 smd rect (at -4.2 -1.8 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 92 /hackrf_if/SW_SEL)) + (net 56 /hackrf_if/SW_SEL)) (pad 14 smd rect (at -4.2 -2.2 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 64 /hackrf_if/P1_8)) + (net 103 /hackrf_if/PP_CPLD_TMS)) (pad 15 smd rect (at -4.2 -2.6 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 24 /hackrf_if/CPLD_TDI)) + (net 112 /hackrf_if/H1_CPLD_TDI)) (pad 16 smd rect (at -4.2 -3 270) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 23 /hackrf_if/CPLD_TCK)) + (net 110 /hackrf_if/H1_CPLD_TCK)) (pad 17 smd rect (at -3 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 63 /hackrf_if/P1_5)) + (net 104 /hackrf_if/PP_CPLD_TDO)) (pad 18 smd rect (at -2.6 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 36 /hackrf_if/GPIO3_15_R)) + (net 124 /hackrf_if/MCU_D7_R)) (pad 19 smd rect (at -2.2 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 34 /hackrf_if/GPIO3_14_R)) + (net 123 /hackrf_if/MCU_D6_R)) (pad 20 smd rect (at -1.8 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 30 /hackrf_if/GPIO3_12_R)) + (net 122 /hackrf_if/MCU_D4_R)) (pad 21 smd rect (at -1.4 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 32 /hackrf_if/GPIO3_13_R)) + (net 121 /hackrf_if/MCU_D5_R)) (pad 22 smd rect (at -1 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 28 /hackrf_if/GPIO3_11_R)) + (net 128 /hackrf_if/MCU_D3_R)) (pad 23 smd rect (at -0.6 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) (net 2 +3.3V)) (pad 24 smd rect (at -0.2 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 26 /hackrf_if/GPIO3_10_R)) + (net 127 /hackrf_if/MCU_D2_R)) (pad 25 smd rect (at 0.2 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 93 /hackrf_if/SW_U)) + (net 57 /hackrf_if/SW_U)) (pad 26 smd rect (at 0.6 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 38 /hackrf_if/GPIO3_8_R)) + (net 126 /hackrf_if/MCU_D0_R)) (pad 27 smd rect (at 1 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 40 /hackrf_if/GPIO3_9_R)) + (net 125 /hackrf_if/MCU_D1_R)) (pad 28 smd rect (at 1.4 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 88 /hackrf_if/SW_L)) + (net 52 /hackrf_if/SW_L)) (pad 29 smd rect (at 1.8 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 79 /hackrf_if/RESET#)) + (net 43 /hackrf_if/RESET#)) (pad 30 smd rect (at 2.2 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 74 /hackrf_if/P2_4_R)) + (net 115 /hackrf_if/MCU_LCD_RD_R)) (pad 31 smd rect (at 2.6 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 72 /hackrf_if/P2_3_R)) + (net 116 /hackrf_if/MCU_LCD_TE_R)) (pad 32 smd rect (at 3 -4.2 180) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 66 /hackrf_if/P2_0_R)) + (net 117 /hackrf_if/MCU_IO_STBX_R)) (pad 33 smd rect (at 4.2 -3 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 70 /hackrf_if/P2_1_R)) + (net 120 /hackrf_if/MCU_ADDR_R)) (pad 34 smd rect (at 4.2 -2.6 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 76 /hackrf_if/P2_8_R)) - (pad 35 smd rect (at 4.2 -2.2 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask)) - (pad 36 smd rect (at 4.2 -1.8 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask)) - (pad 37 smd rect (at 4.2 -1.4 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask)) + (net 42 /hackrf_if/P2_8_R)) + (pad 35 smd rect (at 4.2 -2.2 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) + (net 137 "Net-(U3-Pad35)")) + (pad 36 smd rect (at 4.2 -1.8 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) + (net 138 "Net-(U3-Pad36)")) + (pad 37 smd rect (at 4.2 -1.4 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) + (net 139 "Net-(U3-Pad37)")) (pad 38 smd rect (at 4.2 -1 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 59 /hackrf_if/LCD_RESET#)) + (net 37 /hackrf_if/LCD_RESET#)) (pad 39 smd rect (at 4.2 -0.6 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 40 smd rect (at 4.2 -0.2 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 78 /hackrf_if/P2_9_R)) + (net 119 /hackrf_if/MCU_LCD_WR_R)) (pad 41 smd rect (at 4.2 0.2 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 42 smd rect (at 4.2 0.6 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 69 /hackrf_if/P2_13_R)) + (net 118 /hackrf_if/MCU_DIR_R)) (pad 43 smd rect (at 4.2 1 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 60 /hackrf_if/LCD_RS)) + (net 38 /hackrf_if/LCD_RS)) (pad 44 smd rect (at 4.2 1.4 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 58 /hackrf_if/LCD_RD#)) + (net 36 /hackrf_if/LCD_RD#)) (pad 45 smd rect (at 4.2 1.8 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 62 /hackrf_if/LCD_WR#)) + (net 40 /hackrf_if/LCD_WR#)) (pad 46 smd rect (at 4.2 2.2 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 49 /hackrf_if/LCD_DB15)) + (net 27 /hackrf_if/LCD_DB15)) (pad 47 smd rect (at 4.2 2.6 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 48 /hackrf_if/LCD_DB14)) + (net 26 /hackrf_if/LCD_DB14)) (pad 48 smd rect (at 4.2 3 90) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 47 /hackrf_if/LCD_DB13)) + (net 25 /hackrf_if/LCD_DB13)) (pad 49 smd rect (at 3 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 46 /hackrf_if/LCD_DB12)) + (net 24 /hackrf_if/LCD_DB12)) (pad 50 smd rect (at 2.6 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 45 /hackrf_if/LCD_DB11)) + (net 23 /hackrf_if/LCD_DB11)) (pad 51 smd rect (at 2.2 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 44 /hackrf_if/LCD_DB10)) + (net 22 /hackrf_if/LCD_DB10)) (pad 52 smd rect (at 1.8 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 57 /hackrf_if/LCD_DB9)) + (net 35 /hackrf_if/LCD_DB9)) (pad 53 smd rect (at 1.4 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 56 /hackrf_if/LCD_DB8)) + (net 34 /hackrf_if/LCD_DB8)) (pad 54 smd rect (at 1 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 55 /hackrf_if/LCD_DB7)) + (net 33 /hackrf_if/LCD_DB7)) (pad 55 smd rect (at 0.6 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 54 /hackrf_if/LCD_DB6)) + (net 32 /hackrf_if/LCD_DB6)) (pad 56 smd rect (at 0.2 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 53 /hackrf_if/LCD_DB5)) + (net 31 /hackrf_if/LCD_DB5)) (pad 57 smd rect (at -0.2 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) (net 1 +1.8V)) (pad 58 smd rect (at -0.6 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 52 /hackrf_if/LCD_DB4)) + (net 30 /hackrf_if/LCD_DB4)) (pad 59 smd rect (at -1 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 51 /hackrf_if/LCD_DB3)) + (net 29 /hackrf_if/LCD_DB3)) (pad 60 smd rect (at -1.4 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 50 /hackrf_if/LCD_DB2)) + (net 28 /hackrf_if/LCD_DB2)) (pad 61 smd rect (at -1.8 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 43 /hackrf_if/LCD_DB1)) + (net 21 /hackrf_if/LCD_DB1)) (pad 62 smd rect (at -2.2 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 42 /hackrf_if/LCD_DB0)) + (net 20 /hackrf_if/LCD_DB0)) (pad 63 smd rect (at -2.6 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 61 /hackrf_if/LCD_TE)) + (net 39 /hackrf_if/LCD_TE)) (pad 64 smd rect (at -3 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) - (net 96 /hackrf_if/TP_R)) + (net 60 /hackrf_if/TP_R)) (pad 65 smd rect (at -1.375 1.375 270) (size 2.75 2.75) (layers 4_bot B.Paste B.Mask) - (net 99 GND) (solder_paste_margin_ratio -0.1)) + (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) (pad 65 smd rect (at 1.375 1.375 270) (size 2.75 2.75) (layers 4_bot B.Paste B.Mask) - (net 99 GND) (solder_paste_margin_ratio -0.1)) + (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) (pad 65 smd rect (at -1.375 -1.375 270) (size 2.75 2.75) (layers 4_bot B.Paste B.Mask) - (net 99 GND) (solder_paste_margin_ratio -0.1)) + (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) (pad 65 smd rect (at 1.375 -1.375 270) (size 2.75 2.75) (layers 4_bot B.Paste B.Mask) - (net 99 GND) (solder_paste_margin_ratio -0.1)) + (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) ) - (gr_text 4 (at 77.8 167.4) (layer 4_bot) - (effects (font (size 1.5 1.5) (thickness 0.3))) + (gr_text "Drills are in two files, one for PTH, one for NPTH." (at 20 61) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) ) - (gr_text 3 (at 75.8 167.4) (layer 3_gnd) - (effects (font (size 1.5 1.5) (thickness 0.3))) + (gr_text "Dimensions in inches, unless otherwise specified." (at 205 168) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) ) - (gr_text 2 (at 73.8 167.4) (layer 2_pwr) (tstamp 53AE501D) - (effects (font (size 1.5 1.5) (thickness 0.3))) + (gr_text "Notes, unless otherwise specified:\n\n1. Corner radii, inside: .047 min, unless otherwise stated.\n Corner radii, outside: break all sharp edges and corners.\n\n2. Tolerances:\n Warpage: .010/inch max along longest diag.\n Etching: +/-20% of master pattern.\n\n PTH hole diameter:\n < .100 +/- .003\n > .100 +/- .005\n < .016 + .003, -(hole diameter)\n NPTH hole diameter:\n < .100 +/- .002\n > .100 +/- .003\n\n Front-to-back reg: .005 max.\n (Do not use top-to-bottom pad alignment.)\n Hole plating: .001 min, .003 max.\n Hole diameters are finished sizes.\n\n3. Material: glass-epoxy resin sheet. Refer to board\n stackup for weight of Cu. 2 sides, flame-retardant.\n NEMA grade high temp FR4, TG requirement >= 170C.\n\n4. Finish: Soldermask over bare copper using LPI mask.\n Mask thickness: .0004 min, .0013 max.\n Color: Black\n\n5. Silkscreen legend to board using non-conductive,\n epoxy paint. Remove silkscreen from pads.\n Color: White\n\n6. Acceptability based on IPC-A-600 class 2 (latest revision).\n\n7. Test all boards for opens and shorts.\n\n8. No silkscreen on pads or test points.\n\n9. Do not block mask fine pitch SMD pads.\n\n10. No solder mask on fiducials.\n\n11. No solder mask may cover any gold fingers, if applicable.\n\n12. Do not use top-to-bottom pad alignment.\n Via alignment is recommended.\n\n13. Do not modify solder mask via flooding design.\n Do not modify solder mask chimney designs for test points.\n\n14. No Gerber modifications allowed without prior written\n approval, except for impedance trace width modifications\n to meet requirements, and the addition of tear drops where\n required.\n\n15. Raw material and finished PCB must be RoHS-compliant." (at 200 90) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) ) - (gr_text 1 (at 71.8 167.4) (layer 1_top) (tstamp 53AE4FEC) - (effects (font (size 1.5 1.5) (thickness 0.3072))) + (dimension 75 (width 0.1) (layer Dwgs.User) + (gr_text "75.000 mm" (at 53.65 137.5 90) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.1))) + ) + (feature1 (pts (xy 60 100) (xy 52.3 100))) + (feature2 (pts (xy 60 175) (xy 52.3 175))) + (crossbar (pts (xy 55 175) (xy 55 100))) + (arrow1a (pts (xy 55 100) (xy 55.586421 101.126504))) + (arrow1b (pts (xy 55 100) (xy 54.413579 101.126504))) + (arrow2a (pts (xy 55 175) (xy 55.586421 173.873496))) + (arrow2b (pts (xy 55 175) (xy 54.413579 173.873496))) + ) + (dimension 120 (width 0.1) (layer Dwgs.User) + (gr_text "120.000 mm" (at 120 93.65) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.1))) + ) + (feature1 (pts (xy 180 100) (xy 180 92.3))) + (feature2 (pts (xy 60 100) (xy 60 92.3))) + (crossbar (pts (xy 60 95) (xy 180 95))) + (arrow1a (pts (xy 180 95) (xy 178.873496 95.586421))) + (arrow1b (pts (xy 180 95) (xy 178.873496 94.413579))) + (arrow2a (pts (xy 60 95) (xy 61.126504 95.586421))) + (arrow2b (pts (xy 60 95) (xy 61.126504 94.413579))) + ) + (gr_line (start 90.5 25) (end 101.5 25) (layer Dwgs.User) (width 0.1)) + (gr_line (start 45 25) (end 54 25) (layer Dwgs.User) (width 0.1)) + (gr_line (start 28 25) (end 33 25) (layer Dwgs.User) (width 0.1)) + (gr_line (start 20 25) (end 24 25) (layer Dwgs.User) (width 0.1)) + (gr_text "62 mil +/- 10%\nBoard Thickness" (at 107.5 41) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) + ) + (gr_line (start 105 49) (end 105.5 47.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 105 49) (end 104.5 47.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 105 33) (end 105.5 34.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 105 33) (end 104.5 34.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 105 33) (end 105 49) (layer Dwgs.User) (width 0.1)) + (gr_line (start 102.5 49) (end 107.5 49) (layer Dwgs.User) (width 0.1)) + (gr_line (start 102.5 33) (end 107.5 33) (layer Dwgs.User) (width 0.1)) + (gr_line (start 72.5 39.7) (end 72.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A17)) + (gr_line (start 72.5 38.7) (end 73.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A16)) + (gr_line (start 72.5 39.7) (end 74.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A15)) + (gr_line (start 73.5 39.7) (end 75.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A14)) + (gr_line (start 76.5 39.7) (end 78.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A13)) + (gr_line (start 75.5 39.7) (end 77.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A12)) + (gr_line (start 74.5 39.7) (end 76.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A11)) + (gr_line (start 72.5 39.7) (end 87.5 39.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A10)) + (gr_line (start 72.5 37.7) (end 87.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0F)) + (gr_line (start 81.5 39.7) (end 83.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0E)) + (gr_line (start 80.5 39.7) (end 82.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0D)) + (gr_line (start 79.5 39.7) (end 81.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0C)) + (gr_line (start 78.5 39.7) (end 80.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0B)) + (gr_line (start 77.5 39.7) (end 79.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0A)) + (gr_line (start 87.5 39.7) (end 87.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A09)) + (gr_line (start 86.5 39.7) (end 87.5 38.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A08)) + (gr_line (start 85.5 39.7) (end 87.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A07)) + (gr_line (start 84.5 39.7) (end 86.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A06)) + (gr_line (start 83.5 39.7) (end 85.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A05)) + (gr_line (start 82.5 39.7) (end 84.5 37.7) (layer Dwgs.User) (width 0.1) (tstamp 55E38A04)) + (gr_line (start 86.5 44.3) (end 87.5 43.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 85.5 44.3) (end 87.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 84.5 44.3) (end 86.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 83.5 44.3) (end 85.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 82.5 44.3) (end 84.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 81.5 44.3) (end 83.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80.5 44.3) (end 82.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 79.5 44.3) (end 81.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 78.5 44.3) (end 80.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 77.5 44.3) (end 79.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 76.5 44.3) (end 78.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 75.5 44.3) (end 77.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 74.5 44.3) (end 76.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 73.5 44.3) (end 75.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 72.5 44.3) (end 72.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 87.5 44.3) (end 87.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 82 35.2) (end 82.5 34.7) (layer Dwgs.User) (width 0.1)) + (gr_line (start 81 35.2) (end 82.5 33.7) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80 35.2) (end 81.5 33.7) (layer Dwgs.User) (width 0.1)) + (gr_line (start 79 35.2) (end 80.5 33.7) (layer Dwgs.User) (width 0.1)) + (gr_line (start 78 35.2) (end 79.5 33.7) (layer Dwgs.User) (width 0.1)) + (gr_line (start 77.5 34.7) (end 78.5 33.7) (layer Dwgs.User) (width 0.1)) + (gr_line (start 82 48.3) (end 82.5 47.8) (layer Dwgs.User) (width 0.1)) + (gr_line (start 81 48.3) (end 82.5 46.8) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80 48.3) (end 81.5 46.8) (layer Dwgs.User) (width 0.1)) + (gr_line (start 79 48.3) (end 80.5 46.8) (layer Dwgs.User) (width 0.1)) + (gr_line (start 78 48.3) (end 79.5 46.8) (layer Dwgs.User) (width 0.1)) + (gr_line (start 77.5 47.8) (end 78.5 46.8) (layer Dwgs.User) (width 0.1)) + (gr_line (start 72.5 44.3) (end 74.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 72.5 43.3) (end 73.5 42.3) (layer Dwgs.User) (width 0.1)) + (gr_line (start 72.5 51.2) (end 87.5 51.2) (layer Dwgs.User) (width 0.1) (tstamp 55E38631)) + (gr_line (start 72.5 30.8) (end 87.5 30.8) (layer Dwgs.User) (width 0.1) (tstamp 55E385FB)) + (gr_line (start 72.5 49) (end 87.5 49) (layer Dwgs.User) (width 0.1) (tstamp 55E38573)) + (gr_line (start 77.5 48.3) (end 82.5 48.3) (layer Dwgs.User) (width 0.1) (tstamp 55E3856C)) + (gr_line (start 77.5 46.8) (end 77.5 48.3) (layer Dwgs.User) (width 0.1) (tstamp 55E38565)) + (gr_line (start 82.5 46.8) (end 82.5 48.3) (layer Dwgs.User) (width 0.1) (tstamp 55E38563)) + (gr_line (start 72.5 46.8) (end 87.5 46.8) (layer Dwgs.User) (width 0.1) (tstamp 55E3855C)) + (gr_line (start 72.5 44.3) (end 87.5 44.3) (layer Dwgs.User) (width 0.1) (tstamp 55E38536)) + (gr_line (start 72.5 42.3) (end 87.5 42.3) (layer Dwgs.User) (width 0.1) (tstamp 55E38531)) + (gr_line (start 72.5 33) (end 87.5 33) (layer Dwgs.User) (width 0.1) (tstamp 55E384EF)) + (gr_line (start 82.5 33.7) (end 82.5 35.2) (layer Dwgs.User) (width 0.1)) + (gr_line (start 77.5 33.7) (end 82.5 33.7) (layer Dwgs.User) (width 0.1)) + (gr_line (start 77.5 35.2) (end 77.5 33.7) (layer Dwgs.User) (width 0.1)) + (gr_line (start 72.5 35.2) (end 87.5 35.2) (layer Dwgs.User) (width 0.1)) + (gr_text "Material\n\n\nWhite\nBlack\n0.5 oz Copper + ENIG\nFR-4 TG170\n1 oz Copper\nFR-4 TG170\n1 oz Copper\nFR-4 TG170\n0.5 oz Copper + ENIG\nBlack\nWhite\n\nCenter line is finished edge\n" (at 45 40) (layer Dwgs.User) (tstamp 55E3838A) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) + ) + (gr_text "Thickness\n\n\n\n0.8 mil\n1.7 mil\n8.0 mil\n1.4 mil\n\n1.4 mil\n8.0 mil\n1.7 mil\n0.8 mil\n\n\n\n" (at 90.5 40) (layer Dwgs.User) (tstamp 55E381F6) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) + ) + (gr_text "Type\n\nSolder paste\nSilkscreen\nSolder mask\nSignal\nPrepreg\nPower\nCore\nPower\nPrepreg\nSignal\nSolder mask\nSilkscreen\nSolder paste\nBoard outline" (at 28 40) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) + ) + (gr_text "File\n\n.GTP\n.GTO\n.GTS\n.GTL\n\n.G1\n\n.G2\n\n.GBL\n.GBS\n.GBO\n.GBP\n.GKO\n" (at 20 40) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) + ) + (gr_text 20150901 (at 75 164 180) (layer F.SilkS) + (effects (font (size 1.524 0.762) (thickness 0.1524))) + ) + (gr_text 4 (at 76.5 139 90) (layer 4_bot) + (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) + ) + (gr_text 3 (at 76.5 138 90) (layer 3_gnd) + (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) + ) + (gr_text 2 (at 76.5 137 90) (layer 2_pwr) (tstamp 53AE501D) + (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) + ) + (gr_text 1 (at 76.5 136 90) (layer 1_top) (tstamp 53AE4FEC) + (effects (font (size 1.016 1.016) (thickness 0.2032)) (justify mirror)) ) (gr_line (start 60 104) (end 60 121.5) (angle 90) (layer Edge.Cuts) (width 0.381)) (gr_line (start 60 171) (end 60 159) (angle 90) (layer Edge.Cuts) (width 0.381)) @@ -3118,190 +2789,190 @@ (gr_line (start 87.94 131.82) (end 87.94 126.74) (layer Eco2.User) (width 0.1)) (segment (start 89.94958 132.6) (end 90.6 132.6) (width 0.4) (layer 4_bot) (net 1) (status 10)) - (via (at 90.6 132.6) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 90.6 132.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 90.6 132.6) (end 93.4 132.6) (width 0.2) (layer 4_bot) (net 1) (status 20)) (segment (start 90.89916 125.7) (end 92 125.7) (width 0.4) (layer 4_bot) (net 1) (status 10)) - (via (at 92 125.7) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 92 125.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 90.89916 125.7) (end 90.6 125.99916) (width 0.4) (layer 4_bot) (net 1) (status 30)) - (via (at 90.6 126.9) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 90.6 126.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 90.6 125.99916) (end 90.6 126.9) (width 0.4) (layer 4_bot) (net 1) (tstamp 53B307A4) (status 10)) (segment (start 90.89916 125.7) (end 90.6 125.40084) (width 0.4) (layer 4_bot) (net 1) (status 30)) - (via (at 90.6 124.5) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 90.6 124.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 90.6 125.40084) (end 90.6 124.5) (width 0.4) (layer 4_bot) (net 1) (tstamp 53B307A0) (status 10)) (segment (start 90.89916 140.7) (end 90.6 140.99916) (width 0.4) (layer 4_bot) (net 1) (status 30)) - (via (at 90.6 141.9) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 90.6 141.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 90.6 140.99916) (end 90.6 141.9) (width 0.4) (layer 4_bot) (net 1) (tstamp 53B30742) (status 10)) (segment (start 90.89916 140.7) (end 92 140.7) (width 0.4) (layer 4_bot) (net 1) (status 10)) - (via (at 92 140.7) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 92 140.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 90.89916 140.7) (end 90.6 140.40084) (width 0.4) (layer 4_bot) (net 1) (status 30)) - (via (at 90.6 139.5) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 90.6 139.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 90.6 140.40084) (end 90.6 139.5) (width 0.4) (layer 4_bot) (net 1) (tstamp 53B30737) (status 10)) (segment (start 96.70084 144.8) (end 96.20084 145.3) (width 0.4) (layer 4_bot) (net 1) (status 30)) - (via (at 95.7 145.3) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 95.7 145.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 96.20084 145.3) (end 95.7 145.3) (width 0.4) (layer 4_bot) (net 1) (tstamp 53B305D4) (status 10)) (segment (start 96.70084 144.8) (end 96.20084 144.3) (width 0.4) (layer 4_bot) (net 1) (status 30)) - (via (at 95.7 144.3) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 95.7 144.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 96.20084 144.3) (end 95.7 144.3) (width 0.4) (layer 4_bot) (net 1) (tstamp 53B305CD) (status 10)) (segment (start 96.65126 146.85004) (end 96.65126 144.84958) (width 0.4) (layer 4_bot) (net 1) (status 30)) (segment (start 96.65126 144.84958) (end 96.70084 144.8) (width 0.4) (layer 4_bot) (net 1) (tstamp 53AE1EC8) (status 30)) (segment (start 97 126.4) (end 97 125.84958) (width 0.4) (layer 4_bot) (net 1) (status 20)) (segment (start 97 125.84958) (end 97.2 125.64958) (width 0.4) (layer 4_bot) (net 1) (tstamp 53AB75C2) (status 30)) (segment (start 97.4 128.6) (end 97.4 126.8) (width 0.2) (layer 4_bot) (net 1) (status 10)) - (via (at 97 126.4) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 97 126.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 97.4 126.8) (end 97 126.4) (width 0.2) (layer 4_bot) (net 1) (tstamp 53AB75B4)) (segment (start 85.3 129.75) (end 84.45 129.75) (width 0.3) (layer 4_bot) (net 1) (status 10)) (segment (start 84.45 129.75) (end 84.15 129.45) (width 0.3) (layer 4_bot) (net 1) (tstamp 53AA6CE3)) - (via (at 84.15 129.45) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 84.15 129.45) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 97 140.75042) (end 97 140) (width 0.4) (layer 4_bot) (net 1) (status 10)) (segment (start 97.4 139.6) (end 97.4 137) (width 0.2) (layer 4_bot) (net 1) (status 20)) - (via (at 97 140) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 97 140) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 97.4 139.6) (end 97 140) (width 0.2) (layer 4_bot) (net 1) (tstamp 53AA6BB0)) (segment (start 98.6 140.75042) (end 98.6 140) (width 0.4) (layer 4_bot) (net 1) (status 10)) (segment (start 98.2 139.6) (end 98.6 140) (width 0.2) (layer 4_bot) (net 1) (tstamp 53AA6BFB)) - (via (at 98.6 140) (size 0.6985) (layers 1_top 4_bot) (net 1)) + (via (at 98.6 140) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 1)) (segment (start 98.2 139.6) (end 98.2 137) (width 0.2) (layer 4_bot) (net 1) (status 20)) (segment (start 126.23 155.95) (end 126.23 156.98) (width 0.4) (layer 4_bot) (net 2)) - (via (at 126.25 157) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 126.25 157) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 126.23 156.98) (end 126.25 157) (width 0.4) (layer 4_bot) (net 2) (tstamp 53F39EBA)) (segment (start 126.23 155.95) (end 128.4 155.95) (width 0.4) (layer 4_bot) (net 2)) - (via (at 128.4 155.95) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 128.4 155.95) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 126.23 155.95) (end 126.23 154.92) (width 0.4) (layer 4_bot) (net 2)) - (via (at 126.25 154.9) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 126.25 154.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 126.23 154.92) (end 126.25 154.9) (width 0.4) (layer 4_bot) (net 2) (tstamp 53F39EB2)) (segment (start 174.49 153.41) (end 174.5 153.42) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 174.5 154.5) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 174.5 154.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 174.5 153.42) (end 174.5 154.5) (width 0.4) (layer 4_bot) (net 2) (tstamp 53F39D02) (status 10)) (segment (start 174.49 153.41) (end 174.5 153.4) (width 0.4) (layer 4_bot) (net 2) (status 30)) (segment (start 174.5 153.4) (end 176.7 153.4) (width 0.4) (layer 4_bot) (net 2) (tstamp 53F39CFE) (status 10)) - (via (at 176.7 153.4) (size 0.6985) (layers 1_top 4_bot) (net 2)) - (via (at 174.5 152.3) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 176.7 153.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) + (via (at 174.5 152.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 174.5 153.4) (end 174.5 152.3) (width 0.4) (layer 4_bot) (net 2) (tstamp 53F39CFA) (status 10)) (segment (start 155.25 162.11) (end 156.39 162.11) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 156.4 162.1) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 156.4 162.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 156.39 162.11) (end 156.4 162.1) (width 0.4) (layer 4_bot) (net 2) (tstamp 53F39C36)) (segment (start 155.25 162.11) (end 154.11 162.11) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 154.1 162.1) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 154.1 162.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 154.11 162.11) (end 154.1 162.1) (width 0.4) (layer 4_bot) (net 2) (tstamp 53F39C32)) (segment (start 155.25 162.11) (end 155.25 159.95) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 155.2 159.9) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 155.2 159.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 155.25 159.95) (end 155.2 159.9) (width 0.4) (layer 4_bot) (net 2) (tstamp 53F39C2E)) (segment (start 85.3 146.75) (end 84.15 146.75) (width 0.3) (layer 4_bot) (net 2) (status 10)) - (via (at 84.15 146.75) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 84.15 146.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 64.075 115.375) (end 64.1 115.4) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 65 115.4) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 65 115.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 64.1 115.4) (end 65 115.4) (width 0.4) (layer 4_bot) (net 2) (tstamp 53BC7166) (status 10)) (segment (start 64.075 115.375) (end 64.05 115.4) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 63.1 115.4) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 63.1 115.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 64.05 115.4) (end 63.1 115.4) (width 0.4) (layer 4_bot) (net 2) (tstamp 53BC7164) (status 10)) (segment (start 97.89916 121.3) (end 99 121.3) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 99 121.3) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 99 121.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 97.89916 121.3) (end 97.6 121.59916) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 97.6 122.5) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 97.6 122.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 97.6 121.59916) (end 97.6 122.5) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B3081C) (status 10)) (segment (start 97.89916 121.3) (end 97.6 121.00084) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 97.6 120.1) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 97.6 120.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 97.6 121.00084) (end 97.6 120.1) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B30818) (status 10)) (segment (start 99.34874 148.74996) (end 99.4 148.80122) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 99.4 149.5) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 99.4 149.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 99.4 148.80122) (end 99.4 149.5) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B30626) (status 10)) (segment (start 99.34874 146.85004) (end 99.39954 146.90084) (width 0.4) (layer 4_bot) (net 2) (status 30)) (segment (start 99.39954 146.90084) (end 101.4 146.90084) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B3060D) (status 30)) (segment (start 101.4 146.90084) (end 101.69916 147.2) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 102.6 147.2) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 102.6 147.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 101.69916 147.2) (end 102.6 147.2) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B30601) (status 10)) (segment (start 101.4 146.90084) (end 101.4 145.9) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 101.4 145.9) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 101.4 145.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 124.39916 158.9) (end 124.1 159.19916) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 124.1 160.1) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 124.1 160.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 124.1 159.19916) (end 124.1 160.1) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B304F6) (status 10)) (segment (start 124.39916 158.9) (end 125.5 158.9) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 125.5 158.9) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 125.5 158.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 124.39916 158.9) (end 124.1 158.60084) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 124.1 157.7) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 124.1 157.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 124.1 158.60084) (end 124.1 157.7) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B304EC) (status 10)) (segment (start 75.30084 123.2) (end 75.6 123.49916) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 75.6 124.4) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 75.6 124.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 75.6 123.49916) (end 75.6 124.4) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B30349) (status 10)) (segment (start 75.30084 123.2) (end 75.6 122.90084) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 75.6 122) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 75.6 122) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 75.6 122.90084) (end 75.6 122) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B30345) (status 10)) (segment (start 165.2 153.50084) (end 165.2 152.4) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 165.2 152.4) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 165.2 152.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 165.2 153.50084) (end 165.49916 153.8) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 166.4 153.8) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 166.4 153.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 165.49916 153.8) (end 166.4 153.8) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B195B1) (status 10)) (segment (start 165.2 153.50084) (end 164.90084 153.8) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 164 153.8) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 164 153.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 164.90084 153.8) (end 164 153.8) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B195AD) (status 10)) (segment (start 154.30084 157.8) (end 153.1 157.8) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 153.1 157.8) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 153.1 157.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 154.30084 157.8) (end 154.6 157.50084) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 154.6 156.5) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 154.6 156.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 154.6 157.50084) (end 154.6 156.5) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B193C8) (status 10)) (segment (start 154.30084 157.8) (end 154.6 158.09916) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 154.6 159.1) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 154.6 159.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 154.6 158.09916) (end 154.6 159.1) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B193B8) (status 10)) (segment (start 105.55042 132.2) (end 104.8 132.2) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 104.8 132.2) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 104.8 132.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 104.8 132.2) (end 102.4 132.2) (width 0.2) (layer 4_bot) (net 2) (status 20)) (segment (start 71.75042 122.8) (end 71.75042 123.54958) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 71.7 123.6) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 71.7 123.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 71.75042 123.54958) (end 71.7 123.6) (width 0.4) (layer 4_bot) (net 2) (tstamp 53AE3577)) (segment (start 71.75042 122.8) (end 71.75042 122.05042) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 71.7 122) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 71.7 122) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 71.75042 122.05042) (end 71.7 122) (width 0.4) (layer 4_bot) (net 2) (tstamp 53AE3563)) (segment (start 71.75042 122.8) (end 70.9 122.8) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 70.9 122.8) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 70.9 122.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 75.30084 123.2) (end 74.2 123.2) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 74.2 123.2) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 74.2 123.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 96 125.64958) (end 96 126.4) (width 0.4) (layer 4_bot) (net 2) (status 10)) (segment (start 96.6 127) (end 96.6 128.6) (width 0.2) (layer 4_bot) (net 2) (status 20)) - (via (at 96 126.4) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 96 126.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 96.6 127) (end 96 126.4) (width 0.2) (layer 4_bot) (net 2) (tstamp 53AB759B)) (segment (start 85.3 145.75) (end 84.15 145.75) (width 0.3) (layer 4_bot) (net 2) (status 10)) - (via (at 84.15 145.75) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 84.15 145.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 135.89916 122) (end 137 122) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 137 122) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 137 122) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 135.89916 122) (end 135.6 121.70084) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 135.6 120.8) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 135.6 120.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 135.6 121.70084) (end 135.6 120.8) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B30424) (status 10)) (segment (start 133.15042 119.8) (end 133 119.64958) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 133 119) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 133 119) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 133 119.64958) (end 133 119) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B3041C) (status 10)) (segment (start 142.44958 119.8) (end 142.4 119.75042) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 142.4 119) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 142.4 119) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 142.4 119.75042) (end 142.4 119) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B30401) (status 10)) (segment (start 144.6 117.49916) (end 144.30084 117.2) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 143.4 117.2) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 143.4 117.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 144.30084 117.2) (end 143.4 117.2) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B303F7) (status 10)) (segment (start 144.6 117.49916) (end 144.89916 117.2) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 145.8 117.2) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 145.8 117.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 144.89916 117.2) (end 145.8 117.2) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B303F3) (status 10)) (segment (start 144.6 110.50084) (end 144.30084 110.8) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 143.4 110.8) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 143.4 110.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 144.30084 110.8) (end 143.4 110.8) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B303DF) (status 10)) (segment (start 144.6 110.50084) (end 144.89916 110.8) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 145.8 110.8) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 145.8 110.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 144.89916 110.8) (end 145.8 110.8) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B303DB) (status 10)) (segment (start 141.55042 108.2) (end 141.4 108.35042) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 141.4 109) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 141.4 109) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 141.4 108.35042) (end 141.4 109) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B303D0) (status 10)) (segment (start 130.2 117.49916) (end 130.49916 117.2) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 131.4 117.2) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 131.4 117.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 130.49916 117.2) (end 131.4 117.2) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B2F3E6) (status 10)) (segment (start 130.2 117.49916) (end 129.90084 117.2) (width 0.4) (layer 4_bot) (net 2) (status 30)) - (via (at 129 117.2) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 129 117.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 129.90084 117.2) (end 129 117.2) (width 0.4) (layer 4_bot) (net 2) (tstamp 53B2F3E0) (status 10)) (segment (start 130.2 117.49916) (end 130.2 118.6) (width 0.4) (layer 4_bot) (net 2) (status 10)) - (via (at 130.2 118.6) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 130.2 118.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 137.07488 117.50012) (end 137.07488 118.97488) (width 0.4) (layer 4_bot) (net 2) (status 10)) (segment (start 137.07488 118.97488) (end 137.1 119) (width 0.4) (layer 4_bot) (net 2) (tstamp 53AE215A)) - (via (at 137.1 119) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 137.1 119) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 137.04958 119.05042) (end 137.04958 119.8) (width 0.4) (layer 4_bot) (net 2) (status 20)) (segment (start 137.04958 119.05042) (end 137.1 119) (width 0.4) (layer 4_bot) (net 2) (tstamp 53ADF367)) - (via (at 141 112) (size 0.6985) (layers 1_top 4_bot) (net 2)) - (via (at 132.4 117.5) (size 0.6985) (layers 1_top 4_bot) (net 2)) - (via (at 142.4 117.5) (size 0.6985) (layers 1_top 4_bot) (net 2)) + (via (at 141 112) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) + (via (at 132.4 117.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) + (via (at 142.4 117.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 2)) (segment (start 140.97378 110.49988) (end 140.97378 111.97378) (width 0.4) (layer 4_bot) (net 2) (status 10)) (segment (start 140.97378 111.97378) (end 141 112) (width 0.4) (layer 4_bot) (net 2) (tstamp 53ADF184)) (segment (start 133.17598 117.50012) (end 132.40012 117.50012) (width 0.4) (layer 4_bot) (net 2) (status 10)) @@ -3315,11 +2986,11 @@ (segment (start 140 114.5) (end 138.9 115.6) (width 0.2) (layer 1_top) (net 4) (tstamp 53AE06E3)) (segment (start 147.1 156.5) (end 142.8 152.2) (width 0.2) (layer 1_top) (net 4)) (segment (start 148 157.65) (end 147.35 157.65) (width 0.2) (layer 4_bot) (net 4) (status 10)) - (via (at 147.1 156.5) (size 0.6985) (layers 1_top 4_bot) (net 4)) + (via (at 147.1 156.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 4)) (segment (start 147.1 157.4) (end 147.1 156.5) (width 0.2) (layer 4_bot) (net 4) (tstamp 53ADE1E0)) (segment (start 147.35 157.65) (end 147.1 157.4) (width 0.2) (layer 4_bot) (net 4) (tstamp 53ADE1D6)) (segment (start 139.67584 111.67584) (end 140 112) (width 0.2) (layer 4_bot) (net 4) (tstamp 53AE03F8)) - (via (at 140 112) (size 0.6985) (layers 1_top 4_bot) (net 4)) + (via (at 140 112) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 4)) (segment (start 138.9 115.6) (end 138.9 122.6) (width 0.2) (layer 1_top) (net 4) (tstamp 53AE06F0)) (segment (start 139.67584 111.67584) (end 139.67584 110.49988) (width 0.2) (layer 4_bot) (net 4) (status 20)) (segment (start 142.8 126.5) (end 138.9 122.6) (width 0.2) (layer 1_top) (net 4) (tstamp 53AE0612)) @@ -3332,14 +3003,14 @@ (segment (start 140.3 116) (end 139.5 116.8) (width 0.2) (layer 1_top) (net 7)) (segment (start 139.5 116.8) (end 139.5 122.1) (width 0.2) (layer 1_top) (net 7) (tstamp 53AE08D2)) (segment (start 140.32608 117.50012) (end 140.32608 116.02608) (width 0.2) (layer 4_bot) (net 7) (status 10)) - (via (at 140.3 116) (size 0.6985) (layers 1_top 4_bot) (net 7)) + (via (at 140.3 116) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 7)) (segment (start 140.32608 116.02608) (end 140.3 116) (width 0.2) (layer 4_bot) (net 7) (tstamp 53AE0508)) (segment (start 145.8 153.8) (end 148.5 156.5) (width 0.2) (layer 1_top) (net 7) (tstamp 53AE0607)) (segment (start 145.8 128.4) (end 145.8 153.8) (width 0.2) (layer 1_top) (net 7) (tstamp 53AE0601)) (segment (start 139.5 122.1) (end 145.8 128.4) (width 0.2) (layer 1_top) (net 7) (tstamp 53AE05FC)) (segment (start 148.5 156.5) (end 148.5 156.4) (width 0.2) (layer 1_top) (net 7)) (segment (start 148.9 156.9) (end 148.5 156.5) (width 0.2) (layer 4_bot) (net 7) (tstamp 53ACCC06)) - (via (at 148.5 156.5) (size 0.6985) (layers 1_top 4_bot) (net 7)) + (via (at 148.5 156.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 7)) (segment (start 148.9 157.65) (end 148.9 156.9) (width 0.2) (layer 4_bot) (net 7) (status 10)) (segment (start 150.6 159.35) (end 152.05 159.35) (width 0.2) (layer 4_bot) (net 8) (status 10)) (segment (start 152.71 160.01) (end 152.71 162.315) (width 0.2) (layer 4_bot) (net 8) (tstamp 53ACCBF5) (status 20)) @@ -3347,10 +3018,10 @@ (segment (start 140.3 119.3) (end 141.6 120.6) (width 0.2) (layer 1_top) (net 9)) (segment (start 151.25 157.65) (end 151.5 157.4) (width 0.2) (layer 4_bot) (net 9) (tstamp 53ADE1E6)) (segment (start 151.5 157.4) (end 151.5 156.5) (width 0.2) (layer 4_bot) (net 9) (tstamp 53ADE1EA)) - (via (at 151.5 156.5) (size 0.6985) (layers 1_top 4_bot) (net 9)) + (via (at 151.5 156.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 9)) (segment (start 150.6 157.65) (end 151.25 157.65) (width 0.2) (layer 4_bot) (net 9) (status 10)) (segment (start 139.67584 118.67584) (end 139.67584 117.50012) (width 0.2) (layer 4_bot) (net 9) (status 20)) - (via (at 140.3 119.3) (size 0.6985) (layers 1_top 4_bot) (net 9)) + (via (at 140.3 119.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 9)) (segment (start 139.67584 118.67584) (end 140.3 119.3) (width 0.2) (layer 4_bot) (net 9) (tstamp 53AE0538)) (segment (start 153.2 154.8) (end 153.2 133.6) (width 0.2) (layer 1_top) (net 9) (tstamp 53AE081F)) (segment (start 151.5 156.5) (end 153.2 154.8) (width 0.2) (layer 1_top) (net 9)) @@ -3365,7 +3036,7 @@ (segment (start 149 141.8) (end 146.4 139.2) (width 0.2) (layer 1_top) (net 11) (tstamp 53AE0866)) (segment (start 150.1 156.5) (end 149 155.4) (width 0.2) (layer 1_top) (net 11)) (segment (start 139.0256 119.0256) (end 139.0256 117.50012) (width 0.2) (layer 4_bot) (net 11) (status 20)) - (via (at 140.3 120.3) (size 0.6985) (layers 1_top 4_bot) (net 11)) + (via (at 140.3 120.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 11)) (segment (start 139.0256 119.0256) (end 140.3 120.3) (width 0.2) (layer 4_bot) (net 11) (tstamp 53AE054B)) (segment (start 140.3 121.8) (end 140.3 120.3) (width 0.2) (layer 1_top) (net 11)) (segment (start 146.4 127.9) (end 140.3 121.8) (width 0.2) (layer 1_top) (net 11) (tstamp 53AE05F4)) @@ -3377,7 +3048,7 @@ (segment (start 139.0256 116.3256) (end 139.0256 117.50012) (width 0.2) (layer 4_bot) (net 11) (tstamp 53AE0548) (status 20)) (segment (start 150.1 156.5) (end 150.1 156.4) (width 0.2) (layer 1_top) (net 11) (tstamp 53AE05F0)) (segment (start 149.7 156.9) (end 150.1 156.5) (width 0.2) (layer 4_bot) (net 11) (tstamp 53ACCC13)) - (via (at 150.1 156.5) (size 0.6985) (layers 1_top 4_bot) (net 11)) + (via (at 150.1 156.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 11)) (segment (start 149.7 157.65) (end 149.7 156.9) (width 0.2) (layer 4_bot) (net 11) (status 10)) (segment (start 151.0504 120) (end 149.8 120) (width 0.4) (layer 4_bot) (net 12) (status 30)) (segment (start 148.5 116.7) (end 146.2 114.4) (width 0.4) (layer 4_bot) (net 12) (tstamp 53AE0081)) @@ -3386,1452 +3057,1331 @@ (segment (start 136.42464 115.47536) (end 136.42464 117.50012) (width 0.4) (layer 4_bot) (net 12) (tstamp 53AE0052) (status 20)) (segment (start 149.8 120) (end 148.5 118.7) (width 0.4) (layer 4_bot) (net 12) (tstamp 53AE0078) (status 10)) (segment (start 148.5 118.7) (end 148.5 116.7) (width 0.4) (layer 4_bot) (net 12) (tstamp 53AE007C)) - (segment (start 136.42464 110.49988) (end 136.42464 111.97536) (width 0.4) (layer 4_bot) (net 13) (status 10)) - (segment (start 121.15006 114.04994) (end 121.15006 115.6) (width 0.4) (layer 4_bot) (net 13) (tstamp 53B08323) (status 20)) - (segment (start 122.2 113) (end 121.15006 114.04994) (width 0.4) (layer 4_bot) (net 13) (tstamp 53B08322)) - (segment (start 135.4 113) (end 122.2 113) (width 0.4) (layer 4_bot) (net 13) (tstamp 53B08321)) - (segment (start 136.42464 111.97536) (end 135.4 113) (width 0.4) (layer 4_bot) (net 13) (tstamp 53B08320)) - (segment (start 121.2 119.2) (end 103.4 119.2) (width 0.4) (layer 4_bot) (net 14)) - (segment (start 121.2 119.2) (end 126.601998 113.798002) (width 0.4) (layer 4_bot) (net 14) (tstamp 53B0857F)) - (segment (start 134.47392 117.50012) (end 134.47392 114.871922) (width 0.4) (layer 4_bot) (net 14) (status 10)) - (segment (start 133.4 113.798002) (end 126.601998 113.798002) (width 0.4) (layer 4_bot) (net 14) (tstamp 53B0834B)) - (segment (start 134.47392 114.871922) (end 133.4 113.798002) (width 0.4) (layer 4_bot) (net 14) (tstamp 53B0834A)) - (segment (start 98.15006 111.15006) (end 98.15006 109.8) (width 0.4) (layer 4_bot) (net 14) (tstamp 53B086D9) (status 20)) - (segment (start 99.2 112.2) (end 98.15006 111.15006) (width 0.4) (layer 4_bot) (net 14) (tstamp 53B086D8)) - (segment (start 100.8 112.2) (end 99.2 112.2) (width 0.4) (layer 4_bot) (net 14) (tstamp 53B086D7)) - (segment (start 101.8 113.2) (end 100.8 112.2) (width 0.4) (layer 4_bot) (net 14) (tstamp 53B086D6)) - (segment (start 101.8 117.6) (end 101.8 113.2) (width 0.4) (layer 4_bot) (net 14) (tstamp 53B086D4)) - (segment (start 103.4 119.2) (end 101.8 117.6) (width 0.4) (layer 4_bot) (net 14) (tstamp 53B086D2)) - (segment (start 135.5999 104.4) (end 135.5999 106.10094) (width 0.4) (layer 4_bot) (net 15) (status 30)) - (segment (start 135.5999 106.10094) (end 135.30084 106.4) (width 0.4) (layer 4_bot) (net 15) (tstamp 53AE01C9) (status 30)) - (segment (start 135.30084 106.4) (end 134.95042 106.75042) (width 0.4) (layer 4_bot) (net 15) (status 30)) - (segment (start 134.95042 106.75042) (end 134.95042 108.2) (width 0.4) (layer 4_bot) (net 15) (tstamp 53ADF19E) (status 30)) - (segment (start 134.95042 108.2) (end 134.47392 108.6765) (width 0.4) (layer 4_bot) (net 15) (status 10)) - (segment (start 134.47392 108.6765) (end 134.47392 110.49988) (width 0.4) (layer 4_bot) (net 15) (tstamp 53ADF192) (status 20)) - (segment (start 135.12416 110.49988) (end 135.12416 109.27584) (width 0.2) (layer 4_bot) (net 16) (status 10)) - (segment (start 137.7999 109) (end 138.5999 108.2) (width 0.2) (layer 4_bot) (net 16) (tstamp 53ADF668) (status 20)) - (segment (start 135.4 109) (end 137.7999 109) (width 0.2) (layer 4_bot) (net 16) (tstamp 53ADF667)) - (segment (start 135.12416 109.27584) (end 135.4 109) (width 0.2) (layer 4_bot) (net 16) (tstamp 53ADF664)) - (segment (start 151.0504 110) (end 149.8 110) (width 0.4) (layer 4_bot) (net 17) (status 30)) - (segment (start 149.8 110) (end 146.1 113.7) (width 0.4) (layer 4_bot) (net 17) (tstamp 53AE006E) (status 10)) - (segment (start 137.3 113.7) (end 135.7744 115.2256) (width 0.4) (layer 4_bot) (net 17) (tstamp 53AE0022)) - (segment (start 146.1 113.7) (end 137.3 113.7) (width 0.4) (layer 4_bot) (net 17) (tstamp 53AE0075)) - (segment (start 135.7744 117.50012) (end 135.7744 115.2256) (width 0.4) (layer 4_bot) (net 17) (status 10)) - (segment (start 135.7744 110.49988) (end 135.7744 111.6256) (width 0.4) (layer 4_bot) (net 18) (status 10)) - (segment (start 121.15006 111.15006) (end 121.15006 109.8) (width 0.4) (layer 4_bot) (net 18) (tstamp 53B0831E) (status 20)) - (segment (start 122.2 112.2) (end 121.15006 111.15006) (width 0.4) (layer 4_bot) (net 18) (tstamp 53B0831D)) - (segment (start 135.2 112.2) (end 122.2 112.2) (width 0.4) (layer 4_bot) (net 18) (tstamp 53B0831C)) - (segment (start 135.7744 111.6256) (end 135.2 112.2) (width 0.4) (layer 4_bot) (net 18) (tstamp 53B0831B)) - (segment (start 100.4 113.2) (end 101 113.8) (width 0.4) (layer 4_bot) (net 19)) - (segment (start 121.6 120) (end 103 120) (width 0.4) (layer 4_bot) (net 19)) - (segment (start 121.6 120) (end 127 114.6) (width 0.4) (layer 4_bot) (net 19) (tstamp 53B0858B)) - (segment (start 133.82622 117.50012) (end 133.82622 115.222224) (width 0.4) (layer 4_bot) (net 19) (status 10)) - (segment (start 133.203996 114.6) (end 127 114.6) (width 0.4) (layer 4_bot) (net 19) (tstamp 53B0834F)) - (segment (start 133.82622 115.222224) (end 133.203996 114.6) (width 0.4) (layer 4_bot) (net 19) (tstamp 53B0834E)) - (segment (start 101 118) (end 101 113.8) (width 0.4) (layer 4_bot) (net 19) (tstamp 53B086DD)) - (segment (start 103 120) (end 101 118) (width 0.4) (layer 4_bot) (net 19) (tstamp 53B086DB)) - (segment (start 98.15006 114.24994) (end 98.15006 115.6) (width 0.4) (layer 4_bot) (net 19) (tstamp 53B086E1) (status 20)) - (segment (start 99.2 113.2) (end 98.15006 114.24994) (width 0.4) (layer 4_bot) (net 19) (tstamp 53B086E0)) - (segment (start 100.4 113.2) (end 99.2 113.2) (width 0.4) (layer 4_bot) (net 19) (tstamp 53B086F3)) - (segment (start 138.8 166.8) (end 139.4 166.8) (width 0.2) (layer 1_top) (net 20)) - (segment (start 140.3 165.9) (end 140.3 146.2) (width 0.2) (layer 1_top) (net 20) (tstamp 53F39016)) - (segment (start 139.4 166.8) (end 140.3 165.9) (width 0.2) (layer 1_top) (net 20) (tstamp 53F39015)) - (segment (start 138.235 167.365) (end 138.8 166.8) (width 0.2) (layer 4_bot) (net 20) (tstamp 53ADEF58)) - (segment (start 137.47 167.365) (end 138.235 167.365) (width 0.2) (layer 4_bot) (net 20) (status 10)) - (segment (start 138.3 114.4) (end 138.3 123.1) (width 0.2) (layer 1_top) (net 20)) - (segment (start 138.9 144.8) (end 140.3 146.2) (width 0.2) (layer 1_top) (net 20) (tstamp 53AE075D)) - (segment (start 138.9 130.3) (end 138.9 144.8) (width 0.2) (layer 1_top) (net 20) (tstamp 53AE075B)) - (segment (start 140.5 128.7) (end 138.9 130.3) (width 0.2) (layer 1_top) (net 20) (tstamp 53AE0759)) - (segment (start 140.5 125.3) (end 140.5 128.7) (width 0.2) (layer 1_top) (net 20) (tstamp 53AE0757)) - (segment (start 138.3 123.1) (end 140.5 125.3) (width 0.2) (layer 1_top) (net 20) (tstamp 53AE0749)) - (segment (start 139.0256 110.49988) (end 139.0256 111.9256) (width 0.2) (layer 4_bot) (net 20) (status 10)) - (segment (start 139.1 113.6) (end 138.3 114.4) (width 0.2) (layer 1_top) (net 20) (tstamp 53AE0714)) - (segment (start 139.1 112) (end 139.1 113.6) (width 0.2) (layer 1_top) (net 20) (tstamp 53AE0713)) - (via (at 139.1 112) (size 0.6985) (layers 1_top 4_bot) (net 20)) - (segment (start 139.0256 111.9256) (end 139.1 112) (width 0.2) (layer 4_bot) (net 20) (tstamp 53AE0703)) - (via (at 138.8 166.8) (size 0.6985) (layers 1_top 4_bot) (net 20)) - (segment (start 138.8 167.8) (end 137.1 166.1) (width 0.2) (layer 1_top) (net 21)) - (segment (start 137.1 164.2) (end 139.6 161.7) (width 0.2) (layer 1_top) (net 21) (tstamp 53F3900F)) - (segment (start 137.1 166.1) (end 137.1 164.2) (width 0.2) (layer 1_top) (net 21) (tstamp 53F3900D)) - (segment (start 139.235 167.365) (end 140.01 167.365) (width 0.2) (layer 4_bot) (net 21) (status 20)) - (segment (start 139.235 167.365) (end 138.8 167.8) (width 0.2) (layer 4_bot) (net 21) (tstamp 53ADEF53)) - (segment (start 137.9 144.9) (end 137.9 130.1) (width 0.2) (layer 1_top) (net 21)) - (segment (start 139.6 146.6) (end 139.6 161.7) (width 0.2) (layer 1_top) (net 21) (tstamp 53AE07E2)) - (segment (start 137.9 144.9) (end 139.6 146.6) (width 0.2) (layer 1_top) (net 21) (tstamp 53AE2494)) - (segment (start 138.37536 112.32464) (end 137.8 112.9) (width 0.2) (layer 4_bot) (net 21) (tstamp 53AE08FF)) - (via (at 137.8 112.9) (size 0.6985) (layers 1_top 4_bot) (net 21)) - (segment (start 138.37536 110.49988) (end 138.37536 112.32464) (width 0.2) (layer 4_bot) (net 21) (status 10)) - (segment (start 137.9 130.1) (end 139.7 128.3) (width 0.2) (layer 1_top) (net 21) (tstamp 53AE2496)) - (segment (start 139.7 128.3) (end 139.7 125.6) (width 0.2) (layer 1_top) (net 21) (tstamp 53AE249C)) - (segment (start 139.7 125.6) (end 137.8 123.7) (width 0.2) (layer 1_top) (net 21) (tstamp 53AE249F)) - (segment (start 137.8 123.7) (end 137.8 112.9) (width 0.2) (layer 1_top) (net 21) (tstamp 53AE24A3)) - (via (at 138.8 167.8) (size 0.6985) (layers 1_top 4_bot) (net 21)) - (segment (start 133.82622 110.49988) (end 133.82622 109.22622) (width 0.4) (layer 4_bot) (net 22) (status 10)) - (segment (start 133.64958 109.04958) (end 133.64958 108.6) (width 0.4) (layer 4_bot) (net 22) (tstamp 53B303A3) (status 20)) - (segment (start 133.82622 109.22622) (end 133.64958 109.04958) (width 0.4) (layer 4_bot) (net 22) (tstamp 53B303A2)) - (segment (start 133.29916 106.8) (end 133.64958 107.15042) (width 0.4) (layer 4_bot) (net 22) (status 30)) - (segment (start 133.64958 107.15042) (end 133.64958 108.6) (width 0.4) (layer 4_bot) (net 22) (tstamp 53ADF19C) (status 30)) - (segment (start 126.025 135.63) (end 123.83 135.63) (width 0.2) (layer 4_bot) (net 23) (status 10)) - (segment (start 108.2 128.6) (end 100.6 128.6) (width 0.2) (layer 4_bot) (net 23) (tstamp 53AB7347) (status 20)) - (segment (start 114.25 134.65) (end 108.2 128.6) (width 0.2) (layer 4_bot) (net 23) (tstamp 53AB7345)) - (segment (start 122.85 134.65) (end 114.25 134.65) (width 0.2) (layer 4_bot) (net 23) (tstamp 53AB7343)) - (segment (start 123.83 135.63) (end 122.85 134.65) (width 0.2) (layer 4_bot) (net 23) (tstamp 53AB733F)) - (segment (start 126.23 133.09) (end 125.11 133.09) (width 0.2) (layer 4_bot) (net 24) (status 30)) - (segment (start 124.1 134.1) (end 114.3 134.1) (width 0.2) (layer 4_bot) (net 24) (tstamp 53AB7335)) - (segment (start 114.3 134.1) (end 107.6 127.4) (width 0.2) (layer 4_bot) (net 24) (tstamp 53AB7337)) - (segment (start 107.6 127.4) (end 100.4 127.4) (width 0.2) (layer 4_bot) (net 24) (tstamp 53AB7339)) - (segment (start 100.4 127.4) (end 100.2 127.6) (width 0.2) (layer 4_bot) (net 24) (tstamp 53AB733C)) - (segment (start 100.2 127.6) (end 100.2 128.6) (width 0.2) (layer 4_bot) (net 24) (tstamp 53AB733D) (status 20)) - (segment (start 125.11 133.09) (end 124.1 134.1) (width 0.2) (layer 4_bot) (net 24) (tstamp 53F39E10) (status 10)) - (segment (start 130.9 133.1) (end 126.2 133.1) (width 0.2) (layer 4_bot) (net 24) (status 20)) - (segment (start 138.5 121.7001) (end 138.5 122.6) (width 0.2) (layer 4_bot) (net 24) (status 10)) - (segment (start 138.3 123.2) (end 130.9 123.2) (width 0.2) (layer 4_bot) (net 24) (tstamp 53AE2874)) - (segment (start 138.5 122.6) (end 138.3 123.2) (width 0.2) (layer 4_bot) (net 24) (tstamp 53AE2871)) - (via (at 130.9 133.1) (size 0.6985) (layers 1_top 4_bot) (net 24)) - (segment (start 130.9 133.1) (end 130.9 123.2) (width 0.2) (layer 1_top) (net 24) (tstamp 53F39D68)) - (via (at 130.9 123.2) (size 0.6985) (layers 1_top 4_bot) (net 24)) - (segment (start 126.2 133.1) (end 126.23 133.09) (width 0.2) (layer 4_bot) (net 24) (tstamp 53F39D73) (status 30)) - (segment (start 165.45 149.2) (end 166.9 149.2) (width 0.2) (layer 4_bot) (net 25) (status 10)) - (segment (start 172.27 148.33) (end 174.285 148.33) (width 0.2) (layer 4_bot) (net 25) (tstamp 53AB182A) (status 20)) - (segment (start 171.3 149.3) (end 172.27 148.33) (width 0.2) (layer 4_bot) (net 25) (tstamp 53AB1828)) - (segment (start 167 149.3) (end 171.3 149.3) (width 0.2) (layer 4_bot) (net 25) (tstamp 53AB1827)) - (segment (start 166.9 149.2) (end 167 149.3) (width 0.2) (layer 4_bot) (net 25) (tstamp 53AB1826)) - (segment (start 140 147) (end 142.2 147) (width 0.2) (layer 4_bot) (net 26)) - (segment (start 163 149.2) (end 163.75 149.2) (width 0.2) (layer 4_bot) (net 26) (tstamp 53ACEC9C) (status 20)) - (segment (start 159.2 145.4) (end 163 149.2) (width 0.2) (layer 4_bot) (net 26) (tstamp 53ACEC8E)) - (segment (start 143.8 145.4) (end 159.2 145.4) (width 0.2) (layer 4_bot) (net 26) (tstamp 53ACEC8C)) - (segment (start 142.2 147) (end 143.8 145.4) (width 0.2) (layer 4_bot) (net 26) (tstamp 53ACEC89)) - (segment (start 135.25 142.25) (end 113.85 142.25) (width 0.2) (layer 4_bot) (net 26)) - (segment (start 104.2 132.6) (end 101.8 132.6) (width 0.2) (layer 4_bot) (net 26) (tstamp 53ACD0FF) (status 20)) - (segment (start 113.85 142.25) (end 104.2 132.6) (width 0.2) (layer 4_bot) (net 26) (tstamp 53ACD0FA)) - (segment (start 140 147) (end 135.25 142.25) (width 0.2) (layer 4_bot) (net 26) (tstamp 53ACEC87)) - (segment (start 165.45 148.3) (end 169.205 148.3) (width 0.2) (layer 4_bot) (net 27) (status 30)) - (segment (start 169.205 148.3) (end 169.235 148.33) (width 0.2) (layer 4_bot) (net 27) (tstamp 53AB1834) (status 30)) - (segment (start 135.9 141.7) (end 117.7 141.7) (width 0.2) (layer 4_bot) (net 28)) - (segment (start 163.1 148.3) (end 159.2 144.4) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACCFC4)) - (segment (start 159.2 144.4) (end 143.6 144.4) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACCFC6)) - (segment (start 143.6 144.4) (end 142 146) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACCFC8)) - (segment (start 142 146) (end 140.2 146) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACCFCE)) - (segment (start 140.2 146) (end 135.9 141.7) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACCFD0)) - (segment (start 163.75 148.3) (end 163.1 148.3) (width 0.2) (layer 4_bot) (net 28) (status 10)) - (segment (start 101.8 131.798002) (end 101.8 131.8) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACD04E) (status 30)) - (segment (start 103.603996 131.798002) (end 101.8 131.798002) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACD04B) (status 20)) - (segment (start 104.003996 131.398002) (end 103.603996 131.798002) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACD047)) - (segment (start 107.398002 131.398002) (end 104.003996 131.398002) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACD045)) - (segment (start 117.7 141.7) (end 107.398002 131.398002) (width 0.2) (layer 4_bot) (net 28) (tstamp 53ACD03B)) - (segment (start 165.45 144.9) (end 166.9 144.9) (width 0.2) (layer 4_bot) (net 29) (status 10)) - (segment (start 172.29 145.79) (end 174.285 145.79) (width 0.2) (layer 4_bot) (net 29) (tstamp 53AB181F) (status 20)) - (segment (start 171.3 144.8) (end 172.29 145.79) (width 0.2) (layer 4_bot) (net 29) (tstamp 53AB181D)) - (segment (start 167 144.8) (end 171.3 144.8) (width 0.2) (layer 4_bot) (net 29) (tstamp 53AB181C)) - (segment (start 166.9 144.9) (end 167 144.8) (width 0.2) (layer 4_bot) (net 29) (tstamp 53AB181B)) - (segment (start 139.95 139.15) (end 143.2 142.4) (width 0.2) (layer 4_bot) (net 30)) - (segment (start 101.8 131) (end 103.2 131) (width 0.2) (layer 4_bot) (net 30) (status 10)) - (segment (start 103.2 131) (end 103.6 130.6) (width 0.2) (layer 4_bot) (net 30) (tstamp 53AB662D)) - (segment (start 139.95 139.15) (end 116.35 139.15) (width 0.2) (layer 4_bot) (net 30) (tstamp 53AB199E)) - (segment (start 116.35 139.15) (end 107.8 130.6) (width 0.2) (layer 4_bot) (net 30) (tstamp 53AB19A1)) - (segment (start 103.6 130.6) (end 107.8 130.6) (width 0.2) (layer 4_bot) (net 30)) - (segment (start 162.1 144.9) (end 163.75 144.9) (width 0.2) (layer 4_bot) (net 30) (tstamp 53ACCFAB) (status 20)) - (segment (start 159.6 142.4) (end 162.1 144.9) (width 0.2) (layer 4_bot) (net 30) (tstamp 53ACCFA9)) - (segment (start 143.2 142.4) (end 159.6 142.4) (width 0.2) (layer 4_bot) (net 30) (tstamp 53ACCFA5)) - (segment (start 165.45 145.8) (end 169.225 145.8) (width 0.2) (layer 4_bot) (net 31) (status 30)) - (segment (start 169.225 145.8) (end 169.235 145.79) (width 0.2) (layer 4_bot) (net 31) (tstamp 53AB1824) (status 30)) - (segment (start 139.3 139.7) (end 143 143.4) (width 0.2) (layer 4_bot) (net 32)) - (segment (start 103.8 131) (end 107.6 131) (width 0.2) (layer 4_bot) (net 32) (tstamp 53AB6D30)) - (segment (start 101.8 131.4) (end 103.4 131.4) (width 0.2) (layer 4_bot) (net 32) (status 10)) - (segment (start 116.3 139.7) (end 107.6 131) (width 0.2) (layer 4_bot) (net 32) (tstamp 53AB198A)) - (segment (start 116.3 139.7) (end 139.3 139.7) (width 0.2) (layer 4_bot) (net 32)) - (segment (start 103.4 131.4) (end 103.8 131) (width 0.2) (layer 4_bot) (net 32)) - (segment (start 161.8 145.8) (end 163.75 145.8) (width 0.2) (layer 4_bot) (net 32) (tstamp 53ACCFBA) (status 20)) - (segment (start 159.4 143.4) (end 161.8 145.8) (width 0.2) (layer 4_bot) (net 32) (tstamp 53ACCFB8)) - (segment (start 143 143.4) (end 159.4 143.4) (width 0.2) (layer 4_bot) (net 32) (tstamp 53ACCFB3)) - (segment (start 101.8 131.398002) (end 101.8 131.4) (width 0.2) (layer 4_bot) (net 32) (tstamp 53AB250F) (status 30)) - (segment (start 101.801998 131.4) (end 101.8 131.398002) (width 0.2) (layer 4_bot) (net 32) (tstamp 53AB250E) (status 30)) - (segment (start 165.45 144.1) (end 166.9 144.1) (width 0.2) (layer 4_bot) (net 33) (status 10)) - (segment (start 172.25 143.25) (end 174.285 143.25) (width 0.2) (layer 4_bot) (net 33) (tstamp 53AB1818) (status 20)) - (segment (start 171.3 144.2) (end 172.25 143.25) (width 0.2) (layer 4_bot) (net 33) (tstamp 53AB1816)) - (segment (start 167 144.2) (end 171.3 144.2) (width 0.2) (layer 4_bot) (net 33) (tstamp 53AB1815)) - (segment (start 166.9 144.1) (end 167 144.2) (width 0.2) (layer 4_bot) (net 33) (tstamp 53AB1814)) - (segment (start 143.4 137.2) (end 147.6 141.4) (width 0.2) (layer 4_bot) (net 34)) - (segment (start 103.401998 130.198002) (end 107.998002 130.198002) (width 0.2) (layer 4_bot) (net 34) (tstamp 53AB6D23)) - (segment (start 101.8 130.6) (end 103 130.6) (width 0.2) (layer 4_bot) (net 34) (status 10)) - (segment (start 115 137.2) (end 143.4 137.2) (width 0.2) (layer 4_bot) (net 34) (tstamp 53AB6414)) - (segment (start 107.998002 130.198002) (end 115 137.2) (width 0.2) (layer 4_bot) (net 34) (tstamp 53AB6411)) - (segment (start 103 130.6) (end 103.401998 130.198002) (width 0.2) (layer 4_bot) (net 34)) - (segment (start 162.5 144.1) (end 163.75 144.1) (width 0.2) (layer 4_bot) (net 34) (tstamp 53ACCF98) (status 20)) - (segment (start 159.8 141.4) (end 162.5 144.1) (width 0.2) (layer 4_bot) (net 34) (tstamp 53ACCF96)) - (segment (start 147.6 141.4) (end 159.8 141.4) (width 0.2) (layer 4_bot) (net 34) (tstamp 53ACCF8F)) - (segment (start 101.8 130.598002) (end 101.8 130.6) (width 0.2) (layer 4_bot) (net 34) (tstamp 53AB2508) (status 30)) - (segment (start 101.801998 130.6) (end 101.8 130.598002) (width 0.2) (layer 4_bot) (net 34) (tstamp 53AB2507) (status 30)) - (segment (start 101.8 130.601998) (end 101.8 130.6) (width 0.2) (layer 4_bot) (net 34) (tstamp 53AB19B4) (status 30)) - (segment (start 165.45 143.2) (end 169.185 143.2) (width 0.2) (layer 4_bot) (net 35) (status 30)) - (segment (start 169.185 143.2) (end 169.235 143.25) (width 0.2) (layer 4_bot) (net 35) (tstamp 53AB1822) (status 30)) - (segment (start 147.8 140.4) (end 160 140.4) (width 0.2) (layer 4_bot) (net 36)) - (segment (start 160 140.4) (end 162.8 143.2) (width 0.2) (layer 4_bot) (net 36) (tstamp 53ACCF7E)) - (segment (start 102.8 130.2) (end 103.2 129.8) (width 0.2) (layer 4_bot) (net 36)) - (segment (start 147.8 140.4) (end 144.05 136.65) (width 0.2) (layer 4_bot) (net 36) (tstamp 53ACCF7C)) - (segment (start 144.05 136.65) (end 115.05 136.65) (width 0.2) (layer 4_bot) (net 36) (tstamp 53AB63D9)) - (segment (start 115.05 136.65) (end 108.2 129.8) (width 0.2) (layer 4_bot) (net 36) (tstamp 53AB63DE)) - (segment (start 163.75 143.2) (end 162.8 143.2) (width 0.2) (layer 4_bot) (net 36) (status 10)) - (segment (start 102.8 130.2) (end 101.8 130.2) (width 0.2) (layer 4_bot) (net 36) (status 20)) - (segment (start 103.2 129.8) (end 108.2 129.8) (width 0.2) (layer 4_bot) (net 36) (tstamp 53AB6D1D)) - (segment (start 165.45 150) (end 166.9 150) (width 0.2) (layer 4_bot) (net 37) (status 10)) - (segment (start 172.27 150.87) (end 174.285 150.87) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB1831) (status 20)) - (segment (start 171.3 149.9) (end 172.27 150.87) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB182F)) - (segment (start 167 149.9) (end 171.3 149.9) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB182E)) - (segment (start 166.9 150) (end 167 149.9) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB182D)) - (segment (start 101.8 133.4) (end 103.8 133.4) (width 0.2) (layer 4_bot) (net 38) (status 10)) - (segment (start 161.2 150) (end 163.75 150) (width 0.2) (layer 4_bot) (net 38) (tstamp 53ACD1A6) (status 20)) - (segment (start 160.4 150.8) (end 161.2 150) (width 0.2) (layer 4_bot) (net 38) (tstamp 53ACD1A4)) - (segment (start 135.2 150.8) (end 160.4 150.8) (width 0.2) (layer 4_bot) (net 38) (tstamp 53ACD19E)) - (segment (start 129.2 144.8) (end 135.2 150.8) (width 0.2) (layer 4_bot) (net 38) (tstamp 53ACD19B)) - (segment (start 115.2 144.8) (end 129.2 144.8) (width 0.2) (layer 4_bot) (net 38) (tstamp 53ACD198)) - (segment (start 103.8 133.4) (end 115.2 144.8) (width 0.2) (layer 4_bot) (net 38) (tstamp 53ACD192)) - (segment (start 165.45 150.9) (end 169.205 150.9) (width 0.2) (layer 4_bot) (net 39) (status 30)) - (segment (start 169.205 150.9) (end 169.235 150.87) (width 0.2) (layer 4_bot) (net 39) (tstamp 53AB1836) (status 30)) - (segment (start 101.8 133.8) (end 103.6 133.8) (width 0.2) (layer 4_bot) (net 40) (status 10)) - (segment (start 161.7 150.9) (end 163.75 150.9) (width 0.2) (layer 4_bot) (net 40) (tstamp 53ACEBB4) (status 20)) - (segment (start 161.2 151.4) (end 161.7 150.9) (width 0.2) (layer 4_bot) (net 40) (tstamp 53ACEBAE)) - (segment (start 134.6 151.4) (end 161.2 151.4) (width 0.2) (layer 4_bot) (net 40) (tstamp 53ACEBAC)) - (segment (start 130 146.8) (end 134.6 151.4) (width 0.2) (layer 4_bot) (net 40) (tstamp 53ACEBAA)) - (segment (start 116.6 146.8) (end 130 146.8) (width 0.2) (layer 4_bot) (net 40) (tstamp 53ACEBA8)) - (segment (start 103.6 133.8) (end 116.6 146.8) (width 0.2) (layer 4_bot) (net 40) (tstamp 53ACEBA3)) - (segment (start 94.6 147.4999) (end 94.6 142.8) (width 0.2) (layer 4_bot) (net 41) (status 10)) - (segment (start 95.8 127.2) (end 95.8 128.6) (width 0.2) (layer 4_bot) (net 41) (tstamp 53C5B96D) (status 20)) - (segment (start 95 126.4) (end 95.8 127.2) (width 0.2) (layer 4_bot) (net 41) (tstamp 53C5B96C)) - (segment (start 95 125.8) (end 95 126.4) (width 0.2) (layer 4_bot) (net 41) (tstamp 53C5B96B)) - (via (at 95 125.8) (size 0.6985) (layers 1_top 4_bot) (net 41)) - (segment (start 93 125.8) (end 95 125.8) (width 0.2) (layer 1_top) (net 41) (tstamp 53C5B968)) - (segment (start 92 126.8) (end 93 125.8) (width 0.2) (layer 1_top) (net 41) (tstamp 53C5B966)) - (segment (start 92 129) (end 92 126.8) (width 0.2) (layer 1_top) (net 41) (tstamp 53C5B964)) - (segment (start 94.6 131.6) (end 92 129) (width 0.2) (layer 1_top) (net 41) (tstamp 53C5B962)) - (segment (start 94.6 142.8) (end 94.6 131.6) (width 0.2) (layer 1_top) (net 41) (tstamp 53C5B961)) - (via (at 94.6 142.8) (size 0.6985) (layers 1_top 4_bot) (net 41)) - (segment (start 94.6 147.4999) (end 92.7999 147.4999) (width 0.2) (layer 4_bot) (net 41) (status 30)) - (segment (start 92.75 147.45) (end 92.75062 147.45004) (width 0.2) (layer 4_bot) (net 41) (tstamp 53C5B959) (status 30)) - (segment (start 92.7999 147.4999) (end 92.75 147.45) (width 0.2) (layer 4_bot) (net 41) (tstamp 53C5B958) (status 30)) - (segment (start 93.4 130.6) (end 92 130.6) (width 0.2) (layer 4_bot) (net 42) (status 10)) - (segment (start 86.15 131.25) (end 85.3 131.25) (width 0.2) (layer 4_bot) (net 42) (tstamp 53AA68F1) (status 20)) - (segment (start 87.198002 130.201998) (end 86.15 131.25) (width 0.2) (layer 4_bot) (net 42) (tstamp 53AA68EF)) - (segment (start 91.601998 130.201998) (end 87.198002 130.201998) (width 0.2) (layer 4_bot) (net 42) (tstamp 53AA68EE)) - (segment (start 92 130.6) (end 91.601998 130.201998) (width 0.2) (layer 4_bot) (net 42) (tstamp 53AA68ED)) - (segment (start 93.4 131) (end 91.8 131) (width 0.2) (layer 4_bot) (net 43) (status 10)) - (segment (start 86.25 131.75) (end 85.3 131.75) (width 0.2) (layer 4_bot) (net 43) (tstamp 53AA68EA) (status 20)) - (segment (start 87.4 130.6) (end 86.25 131.75) (width 0.2) (layer 4_bot) (net 43) (tstamp 53AA68E8)) - (segment (start 91.4 130.6) (end 87.4 130.6) (width 0.2) (layer 4_bot) (net 43) (tstamp 53AA68E7)) - (segment (start 91.8 131) (end 91.4 130.6) (width 0.2) (layer 4_bot) (net 43) (tstamp 53AA68E6)) - (segment (start 93.4 135) (end 92.2 135) (width 0.2) (layer 4_bot) (net 44) (status 10)) - (segment (start 90.95 136.25) (end 85.3 136.25) (width 0.2) (layer 4_bot) (net 44) (tstamp 53AA6AE9) (status 20)) - (segment (start 92.2 135) (end 90.95 136.25) (width 0.2) (layer 4_bot) (net 44) (tstamp 53AA6AE7)) - (segment (start 93.4 135.4) (end 92.4 135.4) (width 0.2) (layer 4_bot) (net 45) (status 10)) - (segment (start 91.05 136.75) (end 85.3 136.75) (width 0.2) (layer 4_bot) (net 45) (tstamp 53AA6B4A) (status 20)) - (segment (start 92.4 135.4) (end 91.05 136.75) (width 0.2) (layer 4_bot) (net 45) (tstamp 53AA6B48)) - (segment (start 93.4 135.8) (end 93.4 136.2) (width 0.2) (layer 4_bot) (net 46) (status 10)) - (segment (start 92.35 137.25) (end 85.3 137.25) (width 0.2) (layer 4_bot) (net 46) (tstamp 53AA6B4E) (status 20)) - (segment (start 93.4 136.2) (end 92.35 137.25) (width 0.2) (layer 4_bot) (net 46) (tstamp 53AA6B4D)) - (segment (start 85.3 137.75) (end 93.45 137.75) (width 0.2) (layer 4_bot) (net 47) (status 10)) - (segment (start 94.2 137) (end 94.6 137) (width 0.2) (layer 4_bot) (net 47) (tstamp 53AA6B55) (status 20)) - (segment (start 93.45 137.75) (end 94.2 137) (width 0.2) (layer 4_bot) (net 47) (tstamp 53AA6B53)) - (segment (start 85.3 138.25) (end 94.75 138.25) (width 0.2) (layer 4_bot) (net 48) (status 10)) - (segment (start 95 138) (end 95 137) (width 0.2) (layer 4_bot) (net 48) (tstamp 53AA6B58) (status 20)) - (segment (start 94.75 138.25) (end 95 138) (width 0.2) (layer 4_bot) (net 48) (tstamp 53AA6B57)) - (segment (start 95.4 137) (end 95.4 138.2) (width 0.2) (layer 4_bot) (net 49) (status 10)) - (segment (start 94.85 138.75) (end 85.3 138.75) (width 0.2) (layer 4_bot) (net 49) (status 20)) - (segment (start 95.4 138.2) (end 94.85 138.75) (width 0.2) (layer 4_bot) (net 49) (tstamp 53AE60BF)) - (segment (start 93.4 131.4) (end 91.6 131.4) (width 0.2) (layer 4_bot) (net 50) (status 10)) - (segment (start 86.35 132.25) (end 85.3 132.25) (width 0.2) (layer 4_bot) (net 50) (tstamp 53AA68E3) (status 20)) - (segment (start 87.596004 131.003996) (end 86.35 132.25) (width 0.2) (layer 4_bot) (net 50) (tstamp 53AA68E1)) - (segment (start 91.203996 131.003996) (end 87.596004 131.003996) (width 0.2) (layer 4_bot) (net 50) (tstamp 53AA68E0)) - (segment (start 91.6 131.4) (end 91.203996 131.003996) (width 0.2) (layer 4_bot) (net 50) (tstamp 53AA68DF)) - (segment (start 85.3 132.75) (end 86.45 132.75) (width 0.2) (layer 4_bot) (net 51) (status 10)) - (segment (start 91.4 131.8) (end 93.4 131.8) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AA69D4) (status 20)) - (segment (start 91.001998 131.401998) (end 91.4 131.8) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AA69D3)) - (segment (start 87.798002 131.401998) (end 91.001998 131.401998) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AA69D1)) - (segment (start 86.45 132.75) (end 87.798002 131.401998) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AA69CF)) - (segment (start 93.4 132.2) (end 91.2 132.2) (width 0.2) (layer 4_bot) (net 52) (status 10)) - (segment (start 91.2 132.2) (end 90.8 131.8) (width 0.2) (layer 4_bot) (net 52) (tstamp 53AA68D2)) - (segment (start 90.8 131.8) (end 88 131.8) (width 0.2) (layer 4_bot) (net 52) (tstamp 53AA68D3)) - (segment (start 88 131.8) (end 86.55 133.25) (width 0.2) (layer 4_bot) (net 52) (tstamp 53AA68D4)) - (segment (start 86.55 133.25) (end 85.3 133.25) (width 0.2) (layer 4_bot) (net 52) (tstamp 53AA68D5) (status 20)) - (segment (start 93.4 133) (end 91.2 133) (width 0.2) (layer 4_bot) (net 53) (status 10)) - (segment (start 90.45 133.75) (end 85.3 133.75) (width 0.2) (layer 4_bot) (net 53) (tstamp 53AA6AD1) (status 20)) - (segment (start 91.2 133) (end 90.45 133.75) (width 0.2) (layer 4_bot) (net 53) (tstamp 53AA6AD0)) - (segment (start 93.4 133.4) (end 91.4 133.4) (width 0.2) (layer 4_bot) (net 54) (status 10)) - (segment (start 90.55 134.25) (end 85.3 134.25) (width 0.2) (layer 4_bot) (net 54) (tstamp 53AA6AD5) (status 20)) - (segment (start 91.4 133.4) (end 90.55 134.25) (width 0.2) (layer 4_bot) (net 54) (tstamp 53AA6AD3)) - (segment (start 93.4 133.8) (end 91.6 133.8) (width 0.2) (layer 4_bot) (net 55) (status 10)) - (segment (start 90.65 134.75) (end 85.3 134.75) (width 0.2) (layer 4_bot) (net 55) (tstamp 53AA6ADA) (status 20)) - (segment (start 91.6 133.8) (end 90.65 134.75) (width 0.2) (layer 4_bot) (net 55) (tstamp 53AA6AD8)) - (segment (start 93.4 134.2) (end 91.8 134.2) (width 0.2) (layer 4_bot) (net 56) (status 10)) - (segment (start 90.75 135.25) (end 85.3 135.25) (width 0.2) (layer 4_bot) (net 56) (tstamp 53AA6ADF) (status 20)) - (segment (start 91.8 134.2) (end 90.75 135.25) (width 0.2) (layer 4_bot) (net 56) (tstamp 53AA6ADD)) - (segment (start 93.4 134.6) (end 92 134.6) (width 0.2) (layer 4_bot) (net 57) (status 10)) - (segment (start 90.85 135.75) (end 85.3 135.75) (width 0.2) (layer 4_bot) (net 57) (tstamp 53AA6AE4) (status 20)) - (segment (start 92 134.6) (end 90.85 135.75) (width 0.2) (layer 4_bot) (net 57) (tstamp 53AA6AE2)) - (segment (start 85.3 144.25) (end 90.55 144.25) (width 0.2) (layer 4_bot) (net 58) (status 10)) - (segment (start 96.198002 137.003996) (end 96.2 137) (width 0.2) (layer 4_bot) (net 58) (tstamp 53AB3F5C) (status 30)) - (segment (start 96.198002 138.601998) (end 96.198002 137.003996) (width 0.2) (layer 4_bot) (net 58) (tstamp 53AB3F5A) (status 20)) - (segment (start 90.55 144.25) (end 96.198002 138.601998) (width 0.2) (layer 4_bot) (net 58) (tstamp 53AB3F56)) - (segment (start 87.8 145.5999) (end 86.9999 145.5999) (width 0.2) (layer 4_bot) (net 59) (status 10)) - (segment (start 86.65 145.25) (end 85.3 145.25) (width 0.2) (layer 4_bot) (net 59) (tstamp 53AB4AEC) (status 20)) - (segment (start 86.9999 145.5999) (end 86.65 145.25) (width 0.2) (layer 4_bot) (net 59) (tstamp 53AB4AEA)) - (segment (start 87.8 145.5999) (end 87.7999 145.6) (width 0.2) (layer 4_bot) (net 59) (status 30)) - (via (at 95.4 141) (size 0.6985) (layers 1_top 4_bot) (net 59)) - (segment (start 95.4 141) (end 99.6 141) (width 0.2) (layer 1_top) (net 59) (tstamp 53AB499D)) - (via (at 99.6 141) (size 0.6985) (layers 1_top 4_bot) (net 59)) - (segment (start 99.6 141) (end 99.6 140) (width 0.2) (layer 4_bot) (net 59) (tstamp 53AB49A5)) - (segment (start 99.6 140) (end 98.6 139) (width 0.2) (layer 4_bot) (net 59) (tstamp 53AB49A6)) - (segment (start 98.6 139) (end 98.6 137) (width 0.2) (layer 4_bot) (net 59) (tstamp 53AB49A8) (status 20)) - (segment (start 90.8 145.6) (end 95.4 141) (width 0.2) (layer 4_bot) (net 59) (tstamp 53AB4A23)) - (segment (start 87.7999 145.6) (end 90.8 145.6) (width 0.2) (layer 4_bot) (net 59) (tstamp 53AB4A17) (status 10)) - (segment (start 96.6 137) (end 96.6 138.8) (width 0.2) (layer 4_bot) (net 60) (status 10)) - (segment (start 90.65 144.75) (end 85.3 144.75) (width 0.2) (layer 4_bot) (net 60) (tstamp 53AB3F93) (status 20)) - (segment (start 96.6 138.8) (end 90.65 144.75) (width 0.2) (layer 4_bot) (net 60) (tstamp 53AB3F8F)) - (segment (start 85.3 130.75) (end 86.05 130.75) (width 0.2) (layer 4_bot) (net 61) (status 10)) - (segment (start 92.2 130.2) (end 93.4 130.2) (width 0.2) (layer 4_bot) (net 61) (tstamp 53AA68F8) (status 20)) - (segment (start 91.8 129.8) (end 92.2 130.2) (width 0.2) (layer 4_bot) (net 61) (tstamp 53AA68F7)) - (segment (start 87 129.8) (end 91.8 129.8) (width 0.2) (layer 4_bot) (net 61) (tstamp 53AA68F5)) - (segment (start 86.05 130.75) (end 87 129.8) (width 0.2) (layer 4_bot) (net 61) (tstamp 53AA68F4)) - (segment (start 95.8 137) (end 95.8 138.4) (width 0.2) (layer 4_bot) (net 62) (status 10)) - (segment (start 91.45 142.75) (end 95.8 138.4) (width 0.2) (layer 4_bot) (net 62) (tstamp 53AB3F4C)) - (segment (start 91.45 142.75) (end 85.3 142.75) (width 0.2) (layer 4_bot) (net 62) (status 20)) - (segment (start 120.77 145.79) (end 118.61 145.79) (width 0.2) (layer 4_bot) (net 63) (status 10)) - (segment (start 108.2 129.2) (end 114.6 135.6) (width 0.2) (layer 4_bot) (net 63)) - (segment (start 101.8 129.4) (end 101.8 129.8) (width 0.2) (layer 4_bot) (net 63) (status 20)) - (segment (start 101.8 129.4) (end 102 129.2) (width 0.2) (layer 4_bot) (net 63) (tstamp 53AB7382)) - (segment (start 102 129.2) (end 108.2 129.2) (width 0.2) (layer 4_bot) (net 63) (tstamp 53AB7384)) - (segment (start 114.6 135.6) (end 117.8 135.6) (width 0.2) (layer 4_bot) (net 63) (tstamp 53ACCDD8)) - (via (at 117.8 135.6) (size 0.6985) (layers 1_top 4_bot) (net 63)) - (segment (start 117.8 145) (end 117.8 135.6) (width 0.2) (layer 1_top) (net 63)) - (segment (start 118.6 145.8) (end 117.8 145) (width 0.2) (layer 1_top) (net 63) (tstamp 53F39E94)) - (via (at 118.6 145.8) (size 0.6985) (layers 1_top 4_bot) (net 63)) - (segment (start 118.61 145.79) (end 118.6 145.8) (width 0.2) (layer 4_bot) (net 63) (tstamp 53F39E92)) - (segment (start 120.965 145.8) (end 120.975 145.79) (width 0.2) (layer 4_bot) (net 63) (tstamp 53AB765C) (status 30)) - (segment (start 121 145.765) (end 120.975 145.79) (width 0.2) (layer 4_bot) (net 63) (tstamp 53AB73A7) (status 30)) - (segment (start 120.77 148.33) (end 118.63 148.33) (width 0.2) (layer 4_bot) (net 64) (status 10)) - (segment (start 99.8 127.396004) (end 99.8 128.6) (width 0.2) (layer 4_bot) (net 64) (status 20)) - (segment (start 114 133.2) (end 117 133.2) (width 0.2) (layer 4_bot) (net 64) (tstamp 53AB7418)) - (segment (start 107.8 127) (end 114 133.2) (width 0.2) (layer 4_bot) (net 64) (tstamp 53AB740F)) - (segment (start 100.196004 127) (end 107.8 127) (width 0.2) (layer 4_bot) (net 64) (tstamp 53AB740B)) - (segment (start 99.8 127.396004) (end 100.196004 127) (width 0.2) (layer 4_bot) (net 64) (tstamp 53AB7405)) - (via (at 117 133.2) (size 0.6985) (layers 1_top 4_bot) (net 64)) - (segment (start 117 146.7) (end 117 133.2) (width 0.2) (layer 1_top) (net 64)) - (segment (start 118.6 148.3) (end 117 146.7) (width 0.2) (layer 1_top) (net 64) (tstamp 53F39E2C)) - (via (at 118.6 148.3) (size 0.6985) (layers 1_top 4_bot) (net 64)) - (segment (start 118.63 148.33) (end 118.6 148.3) (width 0.2) (layer 4_bot) (net 64) (tstamp 53F39E2A)) - (segment (start 146.0001 158.2) (end 146.0001 159.2001) (width 0.2) (layer 4_bot) (net 65) (status 10)) - (segment (start 146.4 159.6) (end 146.4 164) (width 0.2) (layer 4_bot) (net 65) (tstamp 53ADE5E8)) - (segment (start 146.0001 159.2001) (end 146.4 159.6) (width 0.2) (layer 4_bot) (net 65) (tstamp 53ADE5E7)) - (segment (start 145.09 167.365) (end 145.09 165.31) (width 0.2) (layer 4_bot) (net 65) (status 10)) - (segment (start 145.09 165.31) (end 146.4 164) (width 0.2) (layer 4_bot) (net 65) (tstamp 53ADAA05)) - (segment (start 144.3999 158.2) (end 135 158.2) (width 0.2) (layer 4_bot) (net 66) (status 10)) - (segment (start 101.8 136.2) (end 101.8 135.8) (width 0.2) (layer 4_bot) (net 66) (tstamp 53ADAA1D) (status 20)) - (segment (start 117.8 152.2) (end 101.8 136.2) (width 0.2) (layer 4_bot) (net 66) (tstamp 53ADAA1C)) - (segment (start 129 152.2) (end 117.8 152.2) (width 0.2) (layer 4_bot) (net 66) (tstamp 53ADAA10)) - (segment (start 135 158.2) (end 129 152.2) (width 0.2) (layer 4_bot) (net 66) (tstamp 53ADAA0E)) - (segment (start 134.45 162.7) (end 134.45 161.25) (width 0.2) (layer 4_bot) (net 67) (status 10)) - (segment (start 145.09 159.99) (end 145.09 162.315) (width 0.2) (layer 4_bot) (net 67) (tstamp 53ADA9F8) (status 20)) - (segment (start 144.4 159.3) (end 145.09 159.99) (width 0.2) (layer 4_bot) (net 67) (tstamp 53ADA9F6)) - (segment (start 136.4 159.3) (end 144.4 159.3) (width 0.2) (layer 4_bot) (net 67) (tstamp 53ADA9F4)) - (segment (start 134.45 161.25) (end 136.4 159.3) (width 0.2) (layer 4_bot) (net 67) (tstamp 53ADA9F1)) - (segment (start 142.55 167.365) (end 142.55 169.65) (width 0.2) (layer 4_bot) (net 68) (status 10)) - (segment (start 134.4 165.3) (end 134.45 165.3) (width 0.2) (layer 4_bot) (net 68) (tstamp 53F38FE6) (status 30)) - (segment (start 134.4 168.3) (end 134.4 165.3) (width 0.2) (layer 4_bot) (net 68) (tstamp 53F38FE4) (status 20)) - (segment (start 136.4 170.3) (end 134.4 168.3) (width 0.2) (layer 4_bot) (net 68) (tstamp 53F38FE2)) - (segment (start 141.9 170.3) (end 136.4 170.3) (width 0.2) (layer 4_bot) (net 68) (tstamp 53F38FE0)) - (segment (start 142.55 169.65) (end 141.9 170.3) (width 0.2) (layer 4_bot) (net 68) (tstamp 53F38FDE)) - (segment (start 97.2 143.6) (end 101 143.6) (width 0.2) (layer 4_bot) (net 69)) - (segment (start 97 137) (end 97 139) (width 0.2) (layer 4_bot) (net 69) (status 10)) - (segment (start 96.2 142.6) (end 97.2 143.6) (width 0.2) (layer 4_bot) (net 69) (tstamp 53AB45A4)) - (segment (start 96.2 139.8) (end 96.2 142.6) (width 0.2) (layer 4_bot) (net 69) (tstamp 53AB45A2)) - (segment (start 97 139) (end 96.2 139.8) (width 0.2) (layer 4_bot) (net 69) (tstamp 53AB45A0)) - (segment (start 122.7 165.3) (end 132.75 165.3) (width 0.2) (layer 4_bot) (net 69) (tstamp 53ACCCAC) (status 20)) - (segment (start 101 143.6) (end 122.7 165.3) (width 0.2) (layer 4_bot) (net 69) (tstamp 53ACCCA7)) - (segment (start 103.4 142.4) (end 103.4 139.4) (width 0.2) (layer 4_bot) (net 70)) - (segment (start 101 137) (end 100.6 137) (width 0.2) (layer 4_bot) (net 70) (tstamp 53ADE06B) (status 20)) - (segment (start 103.4 139.4) (end 101 137) (width 0.2) (layer 4_bot) (net 70) (tstamp 53ADE067)) - (segment (start 132.75 162.7) (end 123.7 162.7) (width 0.2) (layer 4_bot) (net 70) (status 10)) - (segment (start 123.7 162.7) (end 103.4 142.4) (width 0.2) (layer 4_bot) (net 70) (tstamp 53ADAA3C)) - (segment (start 100.598002 137) (end 100.6 137) (width 0.2) (layer 4_bot) (net 70) (tstamp 53ADAA43) (status 30)) - (segment (start 161 159.0001) (end 161 159.8) (width 0.2) (layer 4_bot) (net 71) (status 10)) - (segment (start 162.87 165.27) (end 162.87 167.365) (width 0.2) (layer 4_bot) (net 71) (tstamp 53ACF435) (status 20)) - (segment (start 161.6 164) (end 162.87 165.27) (width 0.2) (layer 4_bot) (net 71) (tstamp 53ACF431)) - (segment (start 161.6 160.4) (end 161.6 164) (width 0.2) (layer 4_bot) (net 71) (tstamp 53ACF42F)) - (segment (start 161 159.8) (end 161.6 160.4) (width 0.2) (layer 4_bot) (net 71) (tstamp 53ACF42C)) - (segment (start 101.8 135.4) (end 102.8 135.4) (width 0.2) (layer 4_bot) (net 72) (status 10)) - (segment (start 159.9999 157.3999) (end 158.4 155.8) (width 0.2) (layer 4_bot) (net 72) (tstamp 53ACF476)) - (segment (start 159.9999 157.3999) (end 161 157.3999) (width 0.2) (layer 4_bot) (net 72) (status 20)) - (segment (start 134.4 155.8) (end 158.4 155.8) (width 0.2) (layer 4_bot) (net 72) (tstamp 53ADA5DD)) - (segment (start 128.4 149.8) (end 134.4 155.8) (width 0.2) (layer 4_bot) (net 72) (tstamp 53ADA5DA)) - (segment (start 117.2 149.8) (end 128.4 149.8) (width 0.2) (layer 4_bot) (net 72) (tstamp 53ADA5D7)) - (segment (start 102.8 135.4) (end 117.2 149.8) (width 0.2) (layer 4_bot) (net 72) (tstamp 53ADA5D4)) - (segment (start 162.8 159.0001) (end 162.8 162.245) (width 0.2) (layer 4_bot) (net 73) (status 30)) - (segment (start 162.8 162.245) (end 162.87 162.315) (width 0.2) (layer 4_bot) (net 73) (tstamp 53ACF42A) (status 30)) - (segment (start 101.8 135) (end 103 135) (width 0.2) (layer 4_bot) (net 74) (status 10)) - (segment (start 162.8 156.6) (end 161.4 155.2) (width 0.2) (layer 4_bot) (net 74) (tstamp 53ACF47E)) - (segment (start 162.8 156.6) (end 162.8 157.3999) (width 0.2) (layer 4_bot) (net 74) (status 20)) - (segment (start 134.9 155.2) (end 161.4 155.2) (width 0.2) (layer 4_bot) (net 74) (tstamp 53ADA619)) - (segment (start 129.101998 149.401998) (end 134.9 155.2) (width 0.2) (layer 4_bot) (net 74) (tstamp 53ADA608)) - (segment (start 117.401998 149.401998) (end 129.101998 149.401998) (width 0.2) (layer 4_bot) (net 74) (tstamp 53ADA5F7)) - (segment (start 103 135) (end 117.401998 149.401998) (width 0.2) (layer 4_bot) (net 74) (tstamp 53ADA5F4)) - (segment (start 134.45 163.6) (end 135.4 163.6) (width 0.2) (layer 4_bot) (net 75) (status 10)) - (segment (start 140.01 160.11) (end 140.01 162.315) (width 0.2) (layer 4_bot) (net 75) (tstamp 53ADA943) (status 20)) - (segment (start 139.8 159.9) (end 140.01 160.11) (width 0.2) (layer 4_bot) (net 75) (tstamp 53ADA940)) - (segment (start 136.6 159.9) (end 139.8 159.9) (width 0.2) (layer 4_bot) (net 75) (tstamp 53ADA93F)) - (segment (start 136 160.5) (end 136.6 159.9) (width 0.2) (layer 4_bot) (net 75) (tstamp 53ADA93D)) - (segment (start 136 163) (end 136 160.5) (width 0.2) (layer 4_bot) (net 75) (tstamp 53ADA93C)) - (segment (start 135.4 163.6) (end 136 163) (width 0.2) (layer 4_bot) (net 75) (tstamp 53ADA938)) - (segment (start 132.75 163.6) (end 123.4 163.6) (width 0.2) (layer 4_bot) (net 76) (status 10)) - (segment (start 100.2 138) (end 100.2 137) (width 0.2) (layer 4_bot) (net 76) (tstamp 53ADAA39) (status 20)) - (segment (start 102.6 140.4) (end 100.2 138) (width 0.2) (layer 4_bot) (net 76) (tstamp 53ADAA37)) - (segment (start 102.6 142.8) (end 102.6 140.4) (width 0.2) (layer 4_bot) (net 76) (tstamp 53ADAA35)) - (segment (start 123.4 163.6) (end 102.6 142.8) (width 0.2) (layer 4_bot) (net 76) (tstamp 53ADAA32)) - (segment (start 142.55 162.315) (end 142.55 164.45) (width 0.2) (layer 4_bot) (net 77) (status 10)) - (segment (start 134.5 164.4) (end 134.45 164.4) (width 0.2) (layer 4_bot) (net 77) (tstamp 53F38FF4) (status 30)) - (segment (start 135.4 164.4) (end 134.5 164.4) (width 0.2) (layer 4_bot) (net 77) (tstamp 53F38FF3) (status 20)) - (segment (start 135.7 164.7) (end 135.4 164.4) (width 0.2) (layer 4_bot) (net 77) (tstamp 53F38FF2)) - (segment (start 135.7 168.7) (end 135.7 164.7) (width 0.2) (layer 4_bot) (net 77) (tstamp 53F38FF0)) - (segment (start 136.7 169.7) (end 135.7 168.7) (width 0.2) (layer 4_bot) (net 77) (tstamp 53F38FEE)) - (segment (start 140.8 169.7) (end 136.7 169.7) (width 0.2) (layer 4_bot) (net 77) (tstamp 53F38FED)) - (segment (start 141.3 169.2) (end 140.8 169.7) (width 0.2) (layer 4_bot) (net 77) (tstamp 53F38FEB)) - (segment (start 141.3 165.7) (end 141.3 169.2) (width 0.2) (layer 4_bot) (net 77) (tstamp 53F38FE9)) - (segment (start 142.55 164.45) (end 141.3 165.7) (width 0.2) (layer 4_bot) (net 77) (tstamp 53F38FE7)) - (segment (start 98.4 143.2) (end 101.8 143.2) (width 0.2) (layer 4_bot) (net 78)) - (segment (start 97.8 142.6) (end 98.4 143.2) (width 0.2) (layer 4_bot) (net 78) (tstamp 53AB45D3)) - (segment (start 97.8 137) (end 97.8 142.6) (width 0.2) (layer 4_bot) (net 78) (status 10)) - (segment (start 123 164.4) (end 132.75 164.4) (width 0.2) (layer 4_bot) (net 78) (tstamp 53ACCC9F) (status 20)) - (segment (start 101.8 143.2) (end 123 164.4) (width 0.2) (layer 4_bot) (net 78) (tstamp 53ACCC9C)) - (segment (start 121.8 153.8) (end 117.7 149.7) (width 0.2) (layer 1_top) (net 79)) - (segment (start 165.41 158.21) (end 159.2 152) (width 0.2) (layer 4_bot) (net 79) (tstamp 53ADAB6D)) - (segment (start 134 152) (end 159.2 152) (width 0.2) (layer 4_bot) (net 79) (tstamp 53ADBDAC)) - (segment (start 133 151) (end 134 152) (width 0.2) (layer 4_bot) (net 79) (tstamp 53ADBDAB)) - (via (at 133 151) (size 0.6985) (layers 1_top 4_bot) (net 79)) - (segment (start 129.4 154.6) (end 133 151) (width 0.2) (layer 1_top) (net 79) (tstamp 53ADBDA4)) - (segment (start 127.6 154.6) (end 129.4 154.6) (width 0.2) (layer 1_top) (net 79) (tstamp 53ADBDA2)) - (segment (start 165.41 162.315) (end 165.41 158.21) (width 0.2) (layer 4_bot) (net 79) (status 10)) - (segment (start 121.8 155.4) (end 122.8 156.4) (width 0.2) (layer 1_top) (net 79) (tstamp 53F39021)) - (segment (start 122.8 156.4) (end 124.6 156.4) (width 0.2) (layer 1_top) (net 79) (tstamp 53F39023)) - (segment (start 124.6 156.4) (end 125.2 155.8) (width 0.2) (layer 1_top) (net 79) (tstamp 53F39025)) - (segment (start 125.2 155.8) (end 126.4 155.8) (width 0.2) (layer 1_top) (net 79) (tstamp 53F39026)) - (segment (start 126.4 155.8) (end 127.6 154.6) (width 0.2) (layer 1_top) (net 79) (tstamp 53F39027)) - (segment (start 121.8 153.8) (end 121.8 155.4) (width 0.2) (layer 1_top) (net 79)) - (segment (start 117.2 148.2) (end 116.8 148.2) (width 0.2) (layer 4_bot) (net 79) (tstamp 53F39E34)) - (segment (start 117.7 148.7) (end 117.2 148.2) (width 0.2) (layer 4_bot) (net 79) (tstamp 53F39E33)) - (via (at 117.7 148.7) (size 0.6985) (layers 1_top 4_bot) (net 79)) - (segment (start 117.7 149.7) (end 117.7 148.7) (width 0.2) (layer 1_top) (net 79) (tstamp 53F39E31)) - (segment (start 103.2 134.6) (end 101.8 134.6) (width 0.2) (layer 4_bot) (net 79) (status 20)) - (segment (start 103.2 134.6) (end 116.8 148.2) (width 0.2) (layer 4_bot) (net 79)) - (segment (start 129.2 152.6) (end 129.2 133.3) (width 0.2) (layer 1_top) (net 80)) - (segment (start 124.8 128.9) (end 120.9 128.9) (width 0.2) (layer 1_top) (net 80) (tstamp 53F39D8C)) - (segment (start 129.2 133.3) (end 124.8 128.9) (width 0.2) (layer 1_top) (net 80) (tstamp 53F39D8A)) - (segment (start 126.23 153.41) (end 126.24 153.4) (width 0.2) (layer 4_bot) (net 80) (status 30)) - (segment (start 75.875 110.825) (end 75.9 110.8) (width 0.2) (layer 4_bot) (net 80) (tstamp 53BC71D9)) - (segment (start 79.4 110.8) (end 81.4 108.8) (width 0.2) (layer 1_top) (net 80)) - (via (at 75.9 110.8) (size 0.6985) (layers 1_top 4_bot) (net 80)) - (segment (start 86.8 110.8) (end 102.8 110.8) (width 0.2) (layer 1_top) (net 80) (tstamp 53B091DD)) - (segment (start 75.9 110.8) (end 79.4 110.8) (width 0.2) (layer 1_top) (net 80) (tstamp 53ADBB91)) - (segment (start 120.9 128.9) (end 102.8 110.8) (width 0.2) (layer 1_top) (net 80) (tstamp 53F39D8F)) - (segment (start 81.4 108.8) (end 84.8 108.8) (width 0.2) (layer 1_top) (net 80) (tstamp 53B091D3)) - (segment (start 84.8 108.8) (end 86.8 110.8) (width 0.2) (layer 1_top) (net 80) (tstamp 53B091D6)) - (segment (start 75.875 110.825) (end 75.875 111.725) (width 0.2) (layer 4_bot) (net 80) (status 20)) - (segment (start 128.4 153.4) (end 129.2 152.6) (width 0.2) (layer 1_top) (net 80) (tstamp 53F39D28)) - (via (at 128.4 153.4) (size 0.6985) (layers 1_top 4_bot) (net 80)) - (segment (start 126.24 153.4) (end 128.4 153.4) (width 0.2) (layer 4_bot) (net 80) (tstamp 53F39D26) (status 10)) - (segment (start 66.8 116.4) (end 64.1 116.4) (width 0.2) (layer 4_bot) (net 81) (status 20)) - (segment (start 123.8 135.4) (end 104.8 116.4) (width 0.2) (layer 1_top) (net 81) (tstamp 53ADB89C)) - (segment (start 104.8 116.4) (end 66.8 116.4) (width 0.2) (layer 1_top) (net 81)) - (segment (start 126.025 143.25) (end 123.85 143.25) (width 0.2) (layer 4_bot) (net 81) (status 10)) - (via (at 123.8 143.2) (size 0.6985) (layers 1_top 4_bot) (net 81)) - (segment (start 123.85 143.25) (end 123.8 143.2) (width 0.2) (layer 4_bot) (net 81) (tstamp 53ADB7D9)) - (segment (start 123.8 143.2) (end 123.8 135.4) (width 0.2) (layer 1_top) (net 81)) - (via (at 66.8 116.4) (size 0.6985) (layers 1_top 4_bot) (net 81)) - (segment (start 64.1 116.4) (end 64.075 116.375) (width 0.2) (layer 4_bot) (net 81) (tstamp 53BC7193) (status 30)) - (segment (start 126.23 145.79) (end 124.11 145.79) (width 0.2) (layer 4_bot) (net 82) (status 10)) - (segment (start 64.1 114.4) (end 64.075 114.375) (width 0.2) (layer 4_bot) (net 82) (tstamp 53BC7190) (status 30)) - (segment (start 124.6 145.3) (end 124.6 135.3) (width 0.2) (layer 1_top) (net 82) (tstamp 53ADB7CE)) - (via (at 66.8 114.4) (size 0.6985) (layers 1_top 4_bot) (net 82)) - (segment (start 66.8 114.4) (end 103.7 114.4) (width 0.2) (layer 1_top) (net 82)) - (segment (start 124.6 135.3) (end 103.7 114.4) (width 0.2) (layer 1_top) (net 82) (tstamp 53ADB8A5)) - (segment (start 66.8 114.4) (end 64.1 114.4) (width 0.2) (layer 4_bot) (net 82) (status 20)) - (segment (start 124.1 145.8) (end 124.6 145.3) (width 0.2) (layer 1_top) (net 82) (tstamp 53F39E8B)) - (via (at 124.1 145.8) (size 0.6985) (layers 1_top 4_bot) (net 82)) - (segment (start 124.11 145.79) (end 124.1 145.8) (width 0.2) (layer 4_bot) (net 82) (tstamp 53F39E89)) - (segment (start 126.23 148.33) (end 126.2 148.3) (width 0.2) (layer 4_bot) (net 83) (status 30)) - (segment (start 124 148.3) (end 123 147.3) (width 0.2) (layer 1_top) (net 83) (tstamp 53F39E41)) - (via (at 124 148.3) (size 0.6985) (layers 1_top 4_bot) (net 83)) - (segment (start 126.2 148.3) (end 124 148.3) (width 0.2) (layer 4_bot) (net 83) (tstamp 53F39E3F) (status 10)) - (segment (start 66.8 118.4) (end 64.1 118.4) (width 0.2) (layer 4_bot) (net 83) (status 20)) - (segment (start 123 135.5) (end 105.9 118.4) (width 0.2) (layer 1_top) (net 83) (tstamp 53ADB482)) - (segment (start 105.9 118.4) (end 66.8 118.4) (width 0.2) (layer 1_top) (net 83)) - (segment (start 123 147.3) (end 123 135.5) (width 0.2) (layer 1_top) (net 83) (tstamp 53F39E44)) - (via (at 66.8 118.4) (size 0.6985) (layers 1_top 4_bot) (net 83)) - (segment (start 64.1 118.4) (end 64.075 118.375) (width 0.2) (layer 4_bot) (net 83) (tstamp 53BC7197) (status 30)) - (segment (start 120.77 150.87) (end 122.83 150.87) (width 0.2) (layer 4_bot) (net 84) (status 10)) - (segment (start 64.1 119.4) (end 64.075 119.375) (width 0.2) (layer 4_bot) (net 84) (tstamp 53BC719A) (status 30)) - (via (at 66.8 119.4) (size 0.6985) (layers 1_top 4_bot) (net 84)) - (segment (start 122.2 150.1) (end 122.2 135.6) (width 0.2) (layer 1_top) (net 84)) - (segment (start 106 119.4) (end 66.8 119.4) (width 0.2) (layer 1_top) (net 84)) - (segment (start 122.2 135.6) (end 106 119.4) (width 0.2) (layer 1_top) (net 84) (tstamp 53ADB882)) - (segment (start 66.8 119.4) (end 64.1 119.4) (width 0.2) (layer 4_bot) (net 84) (status 20)) - (segment (start 122.9 150.8) (end 122.2 150.1) (width 0.2) (layer 1_top) (net 84) (tstamp 53F39D37)) - (via (at 122.9 150.8) (size 0.6985) (layers 1_top 4_bot) (net 84)) - (segment (start 122.83 150.87) (end 122.9 150.8) (width 0.2) (layer 4_bot) (net 84) (tstamp 53F39D35)) - (segment (start 126.23 150.87) (end 128.33 150.87) (width 0.2) (layer 4_bot) (net 85) (status 10)) - (segment (start 128.4 150.8) (end 126.2 148.6) (width 0.2) (layer 1_top) (net 85) (tstamp 53F39E7C)) - (via (at 128.4 150.8) (size 0.6985) (layers 1_top 4_bot) (net 85)) - (segment (start 128.33 150.87) (end 128.4 150.8) (width 0.2) (layer 4_bot) (net 85) (tstamp 53F39E7A)) - (segment (start 124.5 129.5) (end 126.2 131.2) (width 0.2) (layer 1_top) (net 85)) - (segment (start 66.8 112.4) (end 64.1 112.4) (width 0.2) (layer 4_bot) (net 85) (status 20)) - (via (at 66.8 112.4) (size 0.6985) (layers 1_top 4_bot) (net 85)) - (segment (start 120.6 129.5) (end 103.5 112.4) (width 0.2) (layer 1_top) (net 85) (tstamp 53F39D98)) - (segment (start 66.8 112.4) (end 103.5 112.4) (width 0.2) (layer 1_top) (net 85)) - (segment (start 64.075 112.375) (end 64.1 112.4) (width 0.2) (layer 4_bot) (net 85) (tstamp 53BC718A) (status 30)) - (segment (start 124.5 129.5) (end 120.6 129.5) (width 0.2) (layer 1_top) (net 85) (tstamp 53F39D95)) - (segment (start 126.2 131.2) (end 126.2 148.6) (width 0.2) (layer 1_top) (net 85) (tstamp 53F39DA0)) - (segment (start 125.4 151) (end 125.4 131.3) (width 0.2) (layer 1_top) (net 86)) - (segment (start 124.2 130.1) (end 120.3 130.1) (width 0.2) (layer 1_top) (net 86) (tstamp 53F39DA5)) - (segment (start 125.4 131.3) (end 124.2 130.1) (width 0.2) (layer 1_top) (net 86) (tstamp 53F39DA3)) - (segment (start 123.5 152.9) (end 122.4 152.9) (width 0.2) (layer 4_bot) (net 86)) - (segment (start 64.075 113.375) (end 64.1 113.4) (width 0.2) (layer 4_bot) (net 86) (tstamp 53BC718D) (status 30)) - (segment (start 66.8 113.4) (end 103.6 113.4) (width 0.2) (layer 1_top) (net 86)) - (segment (start 120.3 130.1) (end 103.6 113.4) (width 0.2) (layer 1_top) (net 86) (tstamp 53F39DA8)) - (via (at 66.8 113.4) (size 0.6985) (layers 1_top 4_bot) (net 86)) - (segment (start 66.8 113.4) (end 64.1 113.4) (width 0.2) (layer 4_bot) (net 86) (status 20)) - (via (at 123.5 152.9) (size 0.6985) (layers 1_top 4_bot) (net 86)) - (segment (start 123.5 152.9) (end 125.4 151) (width 0.2) (layer 1_top) (net 86) (tstamp 53F39031)) - (segment (start 121.89 153.41) (end 120.77 153.41) (width 0.2) (layer 4_bot) (net 86) (tstamp 53F39D2F) (status 30)) - (segment (start 122.4 152.9) (end 121.89 153.41) (width 0.2) (layer 4_bot) (net 86) (tstamp 53F39D2D) (status 20)) - (segment (start 120.975 153.41) (end 122.09 153.41) (width 0.2) (layer 4_bot) (net 86) (status 30)) - (segment (start 98.2 128.6) (end 98.2 126.6) (width 0.2) (layer 4_bot) (net 87) (status 10)) - (segment (start 100.2 124.6) (end 130.4 124.6) (width 0.2) (layer 4_bot) (net 87) (tstamp 53AB3CC3)) - (segment (start 98.2 126.6) (end 100.2 124.6) (width 0.2) (layer 4_bot) (net 87) (tstamp 53AB3CB8)) - (segment (start 154.8 128.6) (end 139.6 128.6) (width 0.2) (layer 4_bot) (net 87)) - (segment (start 135.4 129.6) (end 130.4 124.6) (width 0.2) (layer 4_bot) (net 87) (tstamp 53AB3B14)) - (segment (start 138.6 129.6) (end 135.4 129.6) (width 0.2) (layer 4_bot) (net 87) (tstamp 53AB3B12)) - (segment (start 139.6 128.6) (end 138.6 129.6) (width 0.2) (layer 4_bot) (net 87) (tstamp 53AB3B10)) - (segment (start 162.604 129.75) (end 155.95 129.75) (width 0.2) (layer 4_bot) (net 87) (status 10)) - (segment (start 155.95 129.75) (end 154.8 128.6) (width 0.2) (layer 4_bot) (net 87) (tstamp 53AB3846)) - (segment (start 101.8 134.2) (end 103.4 134.2) (width 0.2) (layer 4_bot) (net 88) (status 10)) - (segment (start 134.45 153.65) (end 151.106 153.65) (width 0.2) (layer 4_bot) (net 88) (tstamp 53ADA641) (status 20)) - (segment (start 128.2 147.4) (end 134.45 153.65) (width 0.2) (layer 4_bot) (net 88) (tstamp 53ADA63F)) - (segment (start 116.6 147.4) (end 128.2 147.4) (width 0.2) (layer 4_bot) (net 88) (tstamp 53ADA63C)) - (segment (start 103.4 134.2) (end 116.6 147.4) (width 0.2) (layer 4_bot) (net 88) (tstamp 53ADA636)) - (segment (start 100.3 123.9) (end 141.344 123.9) (width 0.2) (layer 4_bot) (net 89)) - (segment (start 141.344 123.9) (end 143.894 121.35) (width 0.2) (layer 4_bot) (net 89) (tstamp 53ADFA7C) (status 20)) - (segment (start 97.8 128.6) (end 97.8 126.4) (width 0.2) (layer 4_bot) (net 89) (status 10)) - (segment (start 97.8 126.4) (end 100.3 123.9) (width 0.2) (layer 4_bot) (net 89) (tstamp 53AB4BE6)) - (segment (start 98.6 128.6) (end 98.6 126.8) (width 0.2) (layer 4_bot) (net 90) (status 10)) - (segment (start 130.1 125.3) (end 100.1 125.3) (width 0.2) (layer 4_bot) (net 90) (tstamp 53AB3AFB)) - (segment (start 135 130.2) (end 130.1 125.3) (width 0.2) (layer 4_bot) (net 90) (tstamp 53AB3AF9)) - (segment (start 139 130.2) (end 135 130.2) (width 0.2) (layer 4_bot) (net 90) (tstamp 53AB3AF6)) - (segment (start 140 129.2) (end 139 130.2) (width 0.2) (layer 4_bot) (net 90) (tstamp 53AB3AF4)) - (segment (start 152.296 129.2) (end 140 129.2) (width 0.2) (layer 4_bot) (net 90) (tstamp 53AB3B47)) - (segment (start 152.296 129.2) (end 154.048 130.952) (width 0.2) (layer 4_bot) (net 90) (status 20)) - (segment (start 98.6 126.8) (end 100.1 125.3) (width 0.2) (layer 4_bot) (net 90) (tstamp 53AB3C61)) - (segment (start 99 128.6) (end 99 127) (width 0.2) (layer 4_bot) (net 91) (status 10)) - (segment (start 134.752 130.952) (end 129.8 126) (width 0.2) (layer 4_bot) (net 91) (tstamp 53AB3ADB)) - (segment (start 129.8 126) (end 100 126) (width 0.2) (layer 4_bot) (net 91) (tstamp 53AB3ADE)) - (segment (start 134.752 130.952) (end 140.952 130.952) (width 0.2) (layer 4_bot) (net 91) (status 20)) - (segment (start 99 127) (end 100 126) (width 0.2) (layer 4_bot) (net 91) (tstamp 53AB3C5B)) - (segment (start 111.6 130.2) (end 117 130.2) (width 0.2) (layer 4_bot) (net 92)) - (segment (start 128.3 129.5) (end 134.7 135.9) (width 0.2) (layer 4_bot) (net 92) (tstamp 53F39D61)) - (segment (start 117.7 129.5) (end 128.3 129.5) (width 0.2) (layer 4_bot) (net 92) (tstamp 53F39D5E)) - (segment (start 117 130.2) (end 117.7 129.5) (width 0.2) (layer 4_bot) (net 92) (tstamp 53F39D5C)) - (segment (start 148.61 138.61) (end 145.9 135.9) (width 0.2) (layer 4_bot) (net 92) (status 10)) - (segment (start 145.9 135.9) (end 134.7 135.9) (width 0.2) (layer 4_bot) (net 92) (tstamp 53AB6448)) - (segment (start 99.398002 128.6) (end 99.4 128.6) (width 0.2) (layer 4_bot) (net 92) (tstamp 53AB645D) (status 30)) - (segment (start 99.398002 127.2) (end 99.398002 128.6) (width 0.2) (layer 4_bot) (net 92) (tstamp 53AB645C) (status 20)) - (segment (start 100 126.598002) (end 99.398002 127.2) (width 0.2) (layer 4_bot) (net 92) (tstamp 53AB6459)) - (segment (start 107.998002 126.598002) (end 100 126.598002) (width 0.2) (layer 4_bot) (net 92) (tstamp 53AB6452)) - (segment (start 111.6 130.2) (end 107.998002 126.598002) (width 0.2) (layer 4_bot) (net 92) (tstamp 53F39D5A)) - (segment (start 101.8 133) (end 104 133) (width 0.2) (layer 4_bot) (net 93) (status 10)) - (segment (start 131.396 144.25) (end 132.396 145.25) (width 0.2) (layer 4_bot) (net 93) (tstamp 53ACD18C) (status 20)) - (segment (start 115.25 144.25) (end 131.396 144.25) (width 0.2) (layer 4_bot) (net 93) (tstamp 53ACD188)) - (segment (start 104 133) (end 115.25 144.25) (width 0.2) (layer 4_bot) (net 93) (tstamp 53ACD183)) - (segment (start 101.8 132.998002) (end 101.8 133) (width 0.2) (layer 4_bot) (net 93) (tstamp 53AB7833) (status 30)) - (segment (start 101.8 133.001998) (end 101.8 133) (width 0.2) (layer 4_bot) (net 93) (tstamp 53AB195A) (status 30)) - (segment (start 135.1 134.3) (end 128.9 128.1) (width 0.2) (layer 4_bot) (net 94)) - (segment (start 111.5 128.1) (end 111 128.6) (width 0.2) (layer 4_bot) (net 94) (tstamp 53F39D55)) - (segment (start 128.9 128.1) (end 111.5 128.1) (width 0.2) (layer 4_bot) (net 94) (tstamp 53F39D54)) - (segment (start 164 136.6) (end 165.57 138.17) (width 0.2) (layer 4_bot) (net 94)) - (segment (start 94.6 128.6) (end 111 128.6) (width 0.2) (layer 1_top) (net 94) (tstamp 53ADE4DE)) - (segment (start 93.4 128.2) (end 94.2 128.2) (width 0.2) (layer 1_top) (net 94)) - (segment (start 94.2 128.2) (end 94.6 128.6) (width 0.2) (layer 1_top) (net 94) (tstamp 53ADE4DA)) - (via (at 111 128.6) (size 0.6985) (layers 1_top 4_bot) (net 94)) - (via (at 93.4 128.2) (size 0.6985) (layers 1_top 4_bot) (net 94)) - (segment (start 147.5 134.3) (end 135.1 134.3) (width 0.2) (layer 4_bot) (net 94) (tstamp 53AB6CF0)) - (segment (start 149.8 136.6) (end 147.5 134.3) (width 0.2) (layer 4_bot) (net 94) (tstamp 53ADE82D)) - (segment (start 149.8 136.6) (end 164 136.6) (width 0.2) (layer 4_bot) (net 94)) - (segment (start 165.57 138.17) (end 169.235 138.17) (width 0.2) (layer 4_bot) (net 94) (tstamp 53ADE854) (status 20)) - (segment (start 94.6 128.6) (end 93.8 128.6) (width 0.2) (layer 4_bot) (net 94) (status 10)) - (segment (start 92.85 128.75) (end 85.3 128.75) (width 0.2) (layer 4_bot) (net 94) (tstamp 53ADE30E) (status 20)) - (segment (start 93.4 128.2) (end 92.85 128.75) (width 0.2) (layer 4_bot) (net 94) (tstamp 53ADE30D)) - (segment (start 93.8 128.6) (end 93.4 128.2) (width 0.2) (layer 4_bot) (net 94) (tstamp 53ADE2FE)) - (segment (start 135.298002 133.498002) (end 129.2 127.4) (width 0.2) (layer 4_bot) (net 95)) - (segment (start 110.6 127.4) (end 110.2 127.8) (width 0.2) (layer 4_bot) (net 95) (tstamp 53F39D52)) - (segment (start 129.2 127.4) (end 110.6 127.4) (width 0.2) (layer 4_bot) (net 95) (tstamp 53F39D51)) - (segment (start 169.235 135.63) (end 169.065 135.8) (width 0.2) (layer 4_bot) (net 95) (status 30)) - (segment (start 95 127.8) (end 94.6 127.4) (width 0.2) (layer 1_top) (net 95) (tstamp 53ADE371)) - (segment (start 94.6 127.4) (end 92.8 127.4) (width 0.2) (layer 1_top) (net 95) (tstamp 53ADE375)) - (via (at 92.8 127.4) (size 0.6985) (layers 1_top 4_bot) (net 95)) - (via (at 110.2 127.8) (size 0.6985) (layers 1_top 4_bot) (net 95)) - (segment (start 147.698002 133.498002) (end 135.298002 133.498002) (width 0.2) (layer 4_bot) (net 95) (tstamp 53AB681E)) - (segment (start 150 135.8) (end 147.698002 133.498002) (width 0.2) (layer 4_bot) (net 95) (tstamp 53AB681A)) - (segment (start 110.2 127.8) (end 95 127.8) (width 0.2) (layer 1_top) (net 95)) - (segment (start 169.065 135.8) (end 150 135.8) (width 0.2) (layer 4_bot) (net 95) (tstamp 53B2FB54) (status 10)) - (segment (start 95 128.6) (end 95 127.6) (width 0.2) (layer 4_bot) (net 95) (status 10)) - (segment (start 91.95 128.25) (end 85.3 128.25) (width 0.2) (layer 4_bot) (net 95) (tstamp 53ADE33D) (status 20)) - (segment (start 92.8 127.4) (end 91.95 128.25) (width 0.2) (layer 4_bot) (net 95) (tstamp 53ADE33C)) - (segment (start 94.8 127.4) (end 92.8 127.4) (width 0.2) (layer 4_bot) (net 95) (tstamp 53ADE331)) - (segment (start 95 127.6) (end 94.8 127.4) (width 0.2) (layer 4_bot) (net 95) (tstamp 53ADE32C)) - (segment (start 134.9 135.1) (end 128.6 128.8) (width 0.2) (layer 4_bot) (net 96)) - (segment (start 112.4 128.8) (end 111.8 129.4) (width 0.2) (layer 4_bot) (net 96) (tstamp 53F39D58)) - (segment (start 128.6 128.8) (end 112.4 128.8) (width 0.2) (layer 4_bot) (net 96) (tstamp 53F39D57)) - (segment (start 93.4 129.2) (end 94 129.2) (width 0.2) (layer 1_top) (net 96)) - (segment (start 166.71 140.71) (end 163.4 137.4) (width 0.2) (layer 4_bot) (net 96) (tstamp 53AB6CFA)) - (segment (start 163.4 137.4) (end 149.6 137.4) (width 0.2) (layer 4_bot) (net 96) (tstamp 53AB6CFC)) - (segment (start 149.6 137.4) (end 147.3 135.1) (width 0.2) (layer 4_bot) (net 96) (tstamp 53AB6CFE)) - (segment (start 147.3 135.1) (end 134.9 135.1) (width 0.2) (layer 4_bot) (net 96) (tstamp 53AB6D00)) - (via (at 111.8 129.4) (size 0.6985) (layers 1_top 4_bot) (net 96)) - (segment (start 166.71 140.71) (end 169.235 140.71) (width 0.2) (layer 4_bot) (net 96) (status 20)) - (via (at 93.4 129.2) (size 0.6985) (layers 1_top 4_bot) (net 96)) - (segment (start 94.2 129.4) (end 111.8 129.4) (width 0.2) (layer 1_top) (net 96) (tstamp 53ADE2E9)) - (segment (start 94 129.2) (end 94.2 129.4) (width 0.2) (layer 1_top) (net 96) (tstamp 53ADE2E5)) - (segment (start 93.4 129.8) (end 93.4 129.2) (width 0.2) (layer 4_bot) (net 96) (status 10)) - (segment (start 92.75 129.25) (end 85.3 129.25) (width 0.2) (layer 4_bot) (net 96) (tstamp 53ADE2DA) (status 20)) - (segment (start 92.8 129.2) (end 92.75 129.25) (width 0.2) (layer 4_bot) (net 96) (tstamp 53ADE2D9)) - (segment (start 93.4 129.2) (end 92.8 129.2) (width 0.2) (layer 4_bot) (net 96) (tstamp 53ADE2D8)) - (segment (start 135.5 132.7) (end 129.5 126.7) (width 0.2) (layer 4_bot) (net 97)) - (segment (start 110.3 126.7) (end 110 127) (width 0.2) (layer 4_bot) (net 97) (tstamp 53F39D4D)) - (segment (start 129.5 126.7) (end 110.3 126.7) (width 0.2) (layer 4_bot) (net 97) (tstamp 53F39D4C)) - (segment (start 93.4 126.6) (end 95 126.6) (width 0.2) (layer 1_top) (net 97)) - (segment (start 152.69 133.09) (end 152.3 132.7) (width 0.2) (layer 4_bot) (net 97) (tstamp 53AB67FE)) - (segment (start 152.3 132.7) (end 135.5 132.7) (width 0.2) (layer 4_bot) (net 97) (tstamp 53AB6803)) - (segment (start 110 127) (end 109.4 127) (width 0.2) (layer 4_bot) (net 97) (tstamp 53F39D4F)) - (via (at 109.4 127) (size 0.6985) (layers 1_top 4_bot) (net 97)) - (segment (start 152.69 133.09) (end 169.235 133.09) (width 0.2) (layer 4_bot) (net 97) (status 20)) - (via (at 93.4 126.6) (size 0.6985) (layers 1_top 4_bot) (net 97)) - (segment (start 97.6 127) (end 109.4 127) (width 0.2) (layer 1_top) (net 97) (tstamp 53ADE393)) - (segment (start 97.4 127.2) (end 97.6 127) (width 0.2) (layer 1_top) (net 97) (tstamp 53ADE391)) - (segment (start 95.6 127.2) (end 97.4 127.2) (width 0.2) (layer 1_top) (net 97) (tstamp 53ADE38E)) - (segment (start 95 126.6) (end 95.6 127.2) (width 0.2) (layer 1_top) (net 97) (tstamp 53ADE38C)) - (segment (start 95.4 128.6) (end 95.4 127.4) (width 0.2) (layer 4_bot) (net 97) (status 10)) - (segment (start 91.45 127.75) (end 85.3 127.75) (width 0.2) (layer 4_bot) (net 97) (tstamp 53ADE354) (status 20)) - (segment (start 92.6 126.6) (end 91.45 127.75) (width 0.2) (layer 4_bot) (net 97) (tstamp 53ADE352)) - (segment (start 93.4 126.6) (end 92.6 126.6) (width 0.2) (layer 4_bot) (net 97) (tstamp 53ADE351)) - (segment (start 94.6 126.6) (end 93.4 126.6) (width 0.2) (layer 4_bot) (net 97) (tstamp 53ADE34A)) - (segment (start 95.4 127.4) (end 94.6 126.6) (width 0.2) (layer 4_bot) (net 97) (tstamp 53ADE347)) - (segment (start 174.49 155.95) (end 174.29916 156.14084) (width 0.4) (layer 4_bot) (net 98) (status 30)) - (segment (start 174.29916 156.14084) (end 174.29916 159) (width 0.4) (layer 4_bot) (net 98) (tstamp 53F39CF6) (status 30)) - (segment (start 172.4 166.4) (end 172.4 163) (width 0.4) (layer 4_bot) (net 98)) - (segment (start 172.4 163) (end 174.29916 161.10084) (width 0.4) (layer 4_bot) (net 98) (tstamp 53B2EF70)) - (segment (start 111.65 160) (end 113.8 160) (width 0.4) (layer 4_bot) (net 98) (status 10)) - (segment (start 113.8 160) (end 125.05 171.25) (width 0.4) (layer 4_bot) (net 98) (tstamp 53AE5889)) - (segment (start 174.29916 159) (end 174.29916 161.10084) (width 0.4) (layer 4_bot) (net 98) (status 10)) - (segment (start 172.4 166.4) (end 167.55 171.25) (width 0.4) (layer 4_bot) (net 98) (tstamp 53B2EF6D)) - (segment (start 167.55 171.25) (end 125.05 171.25) (width 0.4) (layer 4_bot) (net 98) (tstamp 53AE1D44)) - (segment (start 174.285 158.98584) (end 174.29916 159) (width 0.4) (layer 4_bot) (net 98) (tstamp 53AE1D3A) (status 30)) - (segment (start 120.77 155.95) (end 120.77 156.98) (width 0.4) (layer 4_bot) (net 99)) - (via (at 120.75 157) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 120.77 156.98) (end 120.75 157) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39EAE)) - (segment (start 120.77 155.95) (end 118.6 155.95) (width 0.4) (layer 4_bot) (net 99)) - (via (at 118.6 155.95) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 120.77 155.95) (end 120.77 154.92) (width 0.4) (layer 4_bot) (net 99)) - (via (at 120.75 154.9) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 120.77 154.92) (end 120.75 154.9) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39EA6)) - (segment (start 120.77 143.25) (end 118.6 143.25) (width 0.4) (layer 4_bot) (net 99)) - (via (at 118.6 143.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 174.49 140.71) (end 174.49 141.79) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 174.5 141.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 174.49 141.79) (end 174.5 141.8) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CF1)) - (segment (start 174.49 140.71) (end 176.69 140.71) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 176.7 140.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 176.69 140.71) (end 176.7 140.7) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CED)) - (segment (start 174.49 140.71) (end 172.31 140.71) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 172.3 140.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172.31 140.71) (end 172.3 140.7) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CE9)) - (segment (start 174.49 138.17) (end 174.49 139.39) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 174.5 140.7) (end 174.49 140.71) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CE8) (status 30)) - (segment (start 174.5 139.4) (end 174.5 140.7) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CE6) (status 20)) - (via (at 174.5 139.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 174.49 139.39) (end 174.5 139.4) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CE4)) - (segment (start 174.49 138.17) (end 174.49 137.11) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 174.5 137.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 174.49 137.11) (end 174.5 137.1) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CE0)) - (segment (start 174.49 138.17) (end 176.67 138.17) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 176.7 138.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 176.67 138.17) (end 176.7 138.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CDC)) - (segment (start 174.49 138.17) (end 172.33 138.17) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 172.3 138.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172.33 138.17) (end 172.3 138.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CD8)) - (segment (start 174.49 133.09) (end 174.49 134.19) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 174.5 134.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 174.49 134.19) (end 174.5 134.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CCF)) - (segment (start 174.49 133.09) (end 176.69 133.09) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 176.7 133.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 176.69 133.09) (end 176.7 133.1) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CCB)) - (segment (start 174.49 133.09) (end 174.49 132.01) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 174.5 132) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 174.49 132.01) (end 174.5 132) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39CC7)) - (segment (start 147.63 167.57) (end 146.53 167.57) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 146.5 167.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 146.53 167.57) (end 146.5 167.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39C60)) - (segment (start 147.63 167.57) (end 147.63 165.43) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 147.6 165.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 147.63 165.43) (end 147.6 165.4) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39C58)) - (segment (start 147.63 167.57) (end 148.67 167.57) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 148.7 167.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 148.67 167.57) (end 148.7 167.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39C54)) - (segment (start 165.41 167.57) (end 165.41 169.79) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 165.4 169.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 165.41 169.79) (end 165.4 169.8) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39C4E)) - (segment (start 165.41 167.57) (end 166.47 167.57) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 166.5 167.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 166.47 167.57) (end 166.5 167.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39C4A)) - (segment (start 165.41 167.57) (end 164.33 167.57) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 164.3 167.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 164.33 167.57) (end 164.3 167.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39C46)) - (segment (start 157.79 167.57) (end 156.73 167.57) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 156.7 167.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 156.73 167.57) (end 156.7 167.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39C42)) - (segment (start 157.79 167.57) (end 158.87 167.57) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 158.9 167.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 158.87 167.57) (end 158.9 167.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39C3E)) - (segment (start 157.79 167.57) (end 157.79 165.41) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 157.8 165.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 157.79 165.41) (end 157.8 165.4) (width 0.4) (layer 4_bot) (net 99) (tstamp 53F39C3A)) - (segment (start 94.6 149.1001) (end 94.6 150.1) (width 0.2) (layer 4_bot) (net 99) (status 10)) - (via (at 94.6 150.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 92.75062 149.34996) (end 92.75062 150.19938) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 92.75 150.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 92.75062 150.19938) (end 92.75 150.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53C5B94F)) - (segment (start 92.75062 149.34996) (end 91.70004 149.34996) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 91.7 149.35) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 91.70004 149.34996) (end 91.7 149.35) (width 0.4) (layer 4_bot) (net 99) (tstamp 53C5B94B)) - (segment (start 92.75062 149.34996) (end 92.75062 148.50062) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 92.75 148.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 92.75062 148.50062) (end 92.75 148.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53C5B947)) - (segment (start 75.825 119.325) (end 75.9 119.4) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 75.9 120.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 75.9 119.4) (end 75.9 120.4) (width 0.4) (layer 4_bot) (net 99) (tstamp 53BC7205) (status 10)) - (segment (start 75.875 118.075) (end 75.9 118.05) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 75.9 117.3) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 75.9 118.05) (end 75.9 117.3) (width 0.4) (layer 4_bot) (net 99) (tstamp 53BC71FD) (status 10)) - (segment (start 75.825 108.575) (end 75.9 108.65) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 75.9 109.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 75.9 108.65) (end 75.9 109.7) (width 0.4) (layer 4_bot) (net 99) (tstamp 53BC71ED) (status 10)) - (segment (start 75.825 108.575) (end 75.8 108.6) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 75 108.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 75.8 108.6) (end 75 108.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53BC71E2) (status 10)) - (segment (start 62.575 117.875) (end 62.6 117.85) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 62.6 117.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 62.6 117.85) (end 62.6 117.1) (width 0.4) (layer 4_bot) (net 99) (tstamp 53BC7159) (status 10)) - (segment (start 64.075 117.375) (end 64.1 117.4) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 65 117.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 64.1 117.4) (end 65 117.4) (width 0.4) (layer 4_bot) (net 99) (tstamp 53BC713A) (status 10)) - (segment (start 62.575 117.875) (end 62.6 117.9) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 62.6 118.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 62.6 117.9) (end 62.6 118.7) (width 0.4) (layer 4_bot) (net 99) (tstamp 53BC7138) (status 10)) - (segment (start 62.575 113.875) (end 62.6 113.85) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 62.6 113.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 62.6 113.85) (end 62.6 113.1) (width 0.4) (layer 4_bot) (net 99) (tstamp 53BC7136) (status 10)) - (segment (start 87.8 147.2001) (end 88.8999 147.2001) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 88.9 147.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 88.8999 147.2001) (end 88.9 147.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53BC2152)) - (segment (start 69.25 122.25) (end 68.9 122.6) (width 0.4) (layer 4_bot) (net 99)) - (via (at 69.25 122.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 125.25) (end 69.25 122.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE519E)) - (via (at 69.25 125.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 128.25) (end 69.25 125.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE519B)) - (via (at 69.25 128.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 131.25) (end 69.25 128.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5192)) - (via (at 69.25 131.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 134.25) (end 69.25 131.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE518F)) - (via (at 62.7 122.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 65.7 122.6) (end 62.7 122.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B190FD)) - (via (at 65.7 122.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 68.9 122.6) (end 65.7 122.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B190FB)) - (segment (start 107 101.25) (end 107.45 100.8) (width 0.2) (layer 4_bot) (net 99)) - (segment (start 83.45 100.8) (end 88.55 100.8) (width 0.2) (layer 4_bot) (net 99) (tstamp 53B0917A)) - (segment (start 88.55 100.8) (end 89 101.25) (width 0.2) (layer 4_bot) (net 99) (tstamp 53B0917C)) - (via (at 89 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 83 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 107 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 113 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 113 101.25) (end 116 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5439)) - (via (at 116 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 116 101.25) (end 119 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE543C)) - (via (at 119 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 119 101.25) (end 122 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE543F)) - (via (at 122 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 122 101.25) (end 122 104.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5443)) - (via (at 122 104.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 122 104.25) (end 122 105.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5446)) - (segment (start 122 105.5) (end 123 106.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5447)) - (via (at 123 106.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 123 106.5) (end 124.5 108) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE544E)) - (segment (start 124.5 108) (end 126 108) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE544F)) - (via (at 126 108) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 126 108) (end 127.5 108) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE545D)) - (segment (start 127.5 108) (end 128.75 106.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE545E)) - (via (at 128.75 106.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 128.75 106.75) (end 130 105.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5466)) - (segment (start 130 105.5) (end 130 104.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5467)) - (via (at 130 104.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 130 104.25) (end 130 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE546D)) - (via (at 130 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 130 101.25) (end 133 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5471)) - (via (at 133 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 133 101.25) (end 136 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5476)) - (via (at 136 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 136 101.25) (end 139 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5479)) - (via (at 139 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 139 101.25) (end 142 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE547C)) - (via (at 142 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 142 101.25) (end 145 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE547F)) - (via (at 145 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 145 101.25) (end 148 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5482)) - (via (at 148 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 148 101.25) (end 151 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5486)) - (via (at 151 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 151 101.25) (end 154 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5489)) - (via (at 154 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 154 101.25) (end 157 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE548D)) - (via (at 157 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 157 101.25) (end 160 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5490)) - (via (at 160 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 160 101.25) (end 163 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5493)) - (via (at 163 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 163 101.25) (end 166 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5496)) - (via (at 166 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 166 101.25) (end 169 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5499)) - (via (at 169 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 169 101.25) (end 172 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE549C)) - (via (at 178.75 108) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 172 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172 104.25) (end 172 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B91)) - (via (at 172 104.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172 105.5) (end 172 104.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B8A)) - (segment (start 173.25 106.75) (end 172 105.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B89)) - (via (at 173.25 106.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 174.5 108) (end 173.25 106.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B83)) - (segment (start 175.75 108) (end 174.5 108) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B82)) - (via (at 175.75 108) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 108) (end 175.75 108) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B7A)) - (via (at 68 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 62.75 108) (end 61.25 109.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53E6)) - (via (at 61.25 109.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 61.25 109.5) (end 61.25 112.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53EE)) - (via (at 61.25 112.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 61.25 112.5) (end 61.25 115.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53F2)) - (via (at 61.25 115.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 61.25 115.5) (end 61.25 118.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53F5)) - (via (at 61.25 118.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 64 108) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 65.5 108) (end 64 108) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53C7)) - (segment (start 66.75 106.75) (end 65.5 108) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53C6)) - (via (at 66.75 106.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 68 105.5) (end 66.75 106.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53BC)) - (segment (start 68 104.25) (end 68 105.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53BB)) - (via (at 68 104.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 68 101.25) (end 68 104.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53B7)) - (segment (start 64 108) (end 62.75 108) (width 0.4) (layer 4_bot) (net 99)) - (segment (start 64 104) (end 66.75 101.25) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 66.75 101.25) (end 68 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE53A4)) - (segment (start 71 101.25) (end 68 101.25) (width 0.4) (layer 4_bot) (net 99)) - (segment (start 71 101.25) (end 74 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5403)) - (via (at 71 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 74 101.25) (end 77 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5407)) - (via (at 74 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 77 101.25) (end 80 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5411)) - (via (at 77 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 80 101.25) (end 83 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5414)) - (via (at 80 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89 101.25) (end 92 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE541F)) - (segment (start 92 101.25) (end 95 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5423)) - (via (at 92 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 95 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 104 101.25) (end 107 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5430)) - (via (at 104 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 101 101.25) (end 104 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE542D)) - (via (at 101 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 98 101.25) (end 101 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5429)) - (via (at 98 101.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 95 101.25) (end 98 101.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5426)) - (segment (start 83 101.25) (end 83.45 100.8) (width 0.2) (layer 4_bot) (net 99)) - (segment (start 112.55 100.8) (end 113 101.25) (width 0.2) (layer 4_bot) (net 99) (tstamp 53B09187)) - (segment (start 107.45 100.8) (end 112.55 100.8) (width 0.2) (layer 4_bot) (net 99) (tstamp 53B09186)) - (segment (start 178.75 108) (end 178.75 111) (width 0.4) (layer 4_bot) (net 99)) - (via (at 178.75 114) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 111) (end 178.75 114) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B9D)) - (via (at 178.75 111) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 176 104) (end 178.75 106.75) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 178.75 106.75) (end 178.75 108) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B53)) - (segment (start 69.25 140.25) (end 69.25 137.5) (width 0.4) (layer 1_top) (net 99)) - (via (at 69.25 140.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 137.5) (end 69.25 134.25) (width 0.4) (layer 1_top) (net 99) (tstamp 53AE5681)) - (via (at 69.25 134.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 68 173.75) (end 68 170.75) (width 0.4) (layer 4_bot) (net 99)) - (via (at 68 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 61.5 158.5) (end 61.75 158.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE553E)) - (via (at 61.5 158.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 61.25 158.75) (end 61.5 158.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5535)) - (segment (start 61.25 161) (end 61.25 158.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5534)) - (via (at 61.25 161) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 61.25 164) (end 61.25 161) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5530)) - (via (at 61.25 164) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 61.25 167) (end 61.25 164) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE552C)) - (via (at 61.25 167) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 64.25 167) (end 61.25 167) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5529)) - (via (at 64.25 167) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 65.5 167) (end 64.25 167) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5526)) - (segment (start 66.75 168.25) (end 65.5 167) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5525)) - (via (at 66.75 168.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 68 169.5) (end 66.75 168.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5520)) - (segment (start 68 170.75) (end 68 169.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE551F)) - (via (at 68 170.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 64 171) (end 66.75 173.75) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 74 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 71 173.75) (end 74 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE54F3)) - (via (at 71 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 68 173.75) (end 71 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE54EF)) - (segment (start 66.75 173.75) (end 68 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE54E4)) - (via (at 69.25 137.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 137.5) (end 69.25 134.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE518B)) - (segment (start 69.25 143.25) (end 69.25 140.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4A06)) - (via (at 69.25 143.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 146.25) (end 69.25 143.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4A03)) - (via (at 69.25 146.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 149.25) (end 69.25 146.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE49F7)) - (via (at 69.25 149.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 152.25) (end 69.25 149.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE49F4)) - (via (at 69.25 152.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 155.25) (end 69.25 152.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE49EB)) - (via (at 69.25 155.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 69.25 158.25) (end 69.25 155.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE49E8)) - (via (at 69.25 158.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 66.75 158.25) (end 69.25 158.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE49E2)) - (via (at 66.75 158.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 63.75 158.25) (end 66.75 158.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE49DF)) - (via (at 63.75 158.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 61.75 158.25) (end 63.75 158.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE5541)) - (segment (start 79 173.75) (end 76 173.75) (width 0.4) (layer 4_bot) (net 99)) - (via (at 169 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 169 173.75) (end 166 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C07)) - (via (at 166 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 166 173.75) (end 163 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C0B)) - (via (at 163 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 163 173.75) (end 160 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C0E)) - (via (at 160 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 160 173.75) (end 157 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C12)) - (via (at 157 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 157 173.75) (end 154 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C15)) - (via (at 154 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 154 173.75) (end 151 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C18)) - (via (at 151 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 151 173.75) (end 148 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C1C)) - (via (at 148 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 148 173.75) (end 145 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C1F)) - (via (at 145 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 145 173.75) (end 142 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C29)) - (via (at 142 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 142 173.75) (end 139 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C2C)) - (via (at 139 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 139 173.75) (end 136 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C35)) - (via (at 136 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 136 173.75) (end 133 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C38)) - (via (at 133 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 133 173.75) (end 130 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C3B)) - (via (at 130 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 130 173.75) (end 127 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C43)) - (via (at 127 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 127 173.75) (end 124 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C47)) - (via (at 124 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 124 173.75) (end 121 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C4A)) - (via (at 121 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 121 173.75) (end 118 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C4E)) - (via (at 118 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 118 173.75) (end 115 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C52)) - (via (at 115 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 115 173.75) (end 112 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C56)) - (via (at 112 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 112 173.75) (end 109 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C59)) - (via (at 109 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 109 173.75) (end 106 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C5D)) - (via (at 106 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 106 173.75) (end 103 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C60)) - (via (at 103 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 103 173.75) (end 100 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C63)) - (via (at 100 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 100 173.75) (end 97 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C67)) - (via (at 97 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 97 173.75) (end 94 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C6B)) - (via (at 94 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 94 173.75) (end 91 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C6E)) - (via (at 91 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 91 173.75) (end 88 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C71)) - (via (at 88 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 88 173.75) (end 85 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C75)) - (via (at 85 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85 173.75) (end 82 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C78)) - (via (at 82 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82 173.75) (end 79 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4C7B)) - (via (at 79 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 172 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172 173.75) (end 169 173.75) (width 0.4) (layer 4_bot) (net 99)) - (via (at 76 173.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 176 171) (end 173.25 173.75) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 178.75 122) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 125) (end 178.75 122) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B31)) - (via (at 178.75 125) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 128) (end 178.75 125) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B2D)) - (via (at 178.75 128) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 131) (end 178.75 128) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B29)) - (via (at 178.75 131) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 134) (end 178.75 131) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B1E)) - (via (at 178.75 134) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 137) (end 178.75 134) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B1A)) - (via (at 178.75 137) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 140) (end 178.75 137) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B16)) - (via (at 178.75 140) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 143) (end 178.75 140) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B12)) - (via (at 178.75 143) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 146) (end 178.75 143) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B0E)) - (via (at 178.75 146) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 149) (end 178.75 146) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B0A)) - (via (at 178.75 149) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 152) (end 178.75 149) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4B04)) - (via (at 178.75 152) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 155) (end 178.75 152) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4AF5)) - (via (at 178.75 155) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 158) (end 178.75 155) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4AF0)) - (via (at 178.75 158) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 161) (end 178.75 158) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4ADF)) - (via (at 178.75 161) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 164) (end 178.75 161) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4ADB)) - (via (at 178.75 164) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 178.75 167) (end 178.75 164) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4AD7)) - (via (at 178.75 167) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 175.75 167) (end 178.75 167) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4AD3)) - (via (at 175.75 167) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 174.5 167) (end 175.75 167) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4ACA)) - (segment (start 173.25 168.25) (end 174.5 167) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4AC9)) - (via (at 173.25 168.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172 169.5) (end 173.25 168.25) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4ABB)) - (segment (start 172 170.75) (end 172 169.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4ABA)) - (via (at 172 170.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172 173.75) (end 172 170.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4AB5)) - (segment (start 173.25 173.75) (end 172 173.75) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4A9D)) - (segment (start 89.05042 132.6) (end 88.3 132.6) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 88.3 132.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 96.10084 121.3) (end 95 121.3) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 95 121.3) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 96.10084 121.3) (end 96.4 121.00084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 96.4 120.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 96.4 121.00084) (end 96.4 120.1) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30810) (status 10)) - (segment (start 96.10084 121.3) (end 96.4 121.59916) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 96.4 122.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 96.4 121.59916) (end 96.4 122.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B3080B) (status 10)) - (segment (start 97.2 124.75042) (end 97.25042 124.7) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 98 124.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 97.25042 124.7) (end 98 124.7) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B307F2) (status 10)) - (segment (start 97.2 124.75042) (end 97.2 124) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 97.2 124) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 96 124.75042) (end 96 124) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 96 124) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89.10084 125.7) (end 88 125.7) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 88 125.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89.10084 125.7) (end 89.4 125.99916) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 89.4 126.9) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89.4 125.99916) (end 89.4 126.9) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30795) (status 10)) - (segment (start 89.10084 125.7) (end 89.4 125.40084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 89.4 124.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89.4 125.40084) (end 89.4 124.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B3078F) (status 10)) - (segment (start 89.10084 140.7) (end 89.4 140.40084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 89.4 139.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89.4 140.40084) (end 89.4 139.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B3074E) (status 10)) - (segment (start 89.10084 140.7) (end 88 140.7) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 88 140.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89.10084 140.7) (end 89.4 140.99916) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 89.4 141.9) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89.4 140.99916) (end 89.4 141.9) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30746) (status 10)) - (segment (start 101.4 148.69916) (end 101.4 149.7) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 101.4 149.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 101.4 148.69916) (end 101.69916 148.4) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 102.6 148.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 101.69916 148.4) (end 102.6 148.4) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30605) (status 10)) - (segment (start 98.49916 144.8) (end 98.99916 145.3) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 99.5 145.3) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 98.99916 145.3) (end 99.5 145.3) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B305B1) (status 10)) - (segment (start 98.49916 144.8) (end 98.99916 144.3) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 99.5 144.3) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 98.99916 144.3) (end 99.5 144.3) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B305AA) (status 10)) - (segment (start 106.44958 132.2) (end 107.2 132.2) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 107.2 132.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 106.44958 132.2) (end 106.4 132.24958) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 106.4 133) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 106.4 132.24958) (end 106.4 133) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30566) (status 10)) - (segment (start 122.60084 158.9) (end 121.5 158.9) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 121.5 158.9) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 122.60084 158.9) (end 122.9 158.60084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 122.9 157.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 122.9 158.60084) (end 122.9 157.7) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B304FE) (status 10)) - (segment (start 122.60084 158.9) (end 122.9 159.19916) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 122.9 160.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 122.9 159.19916) (end 122.9 160.1) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B304FA) (status 10)) - (segment (start 172.50084 159) (end 171.4 159) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 171.4 159) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172.50084 159) (end 172.8 159.29916) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 172.8 160.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172.8 159.29916) (end 172.8 160.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30486) (status 10)) - (segment (start 172.50084 159) (end 172.8 158.70084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 172.8 157.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 172.8 158.70084) (end 172.8 157.8) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30482) (status 10)) - (segment (start 134.10084 122) (end 133 122) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 133 122) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 134.10084 122) (end 134.4 121.70084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 134.4 120.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 134.4 121.70084) (end 134.4 120.8) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30428) (status 10)) - (segment (start 134.04958 119.8) (end 134 119.75042) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 134 119) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 134 119.75042) (end 134 119) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30418) (status 10)) - (segment (start 141.55042 119.8) (end 141.4 119.64958) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 141.4 119) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 141.4 119.64958) (end 141.4 119) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30405) (status 10)) - (segment (start 144.6 115.70084) (end 144.30084 116) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 143.4 116) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 144.30084 116) (end 143.4 116) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B303FB) (status 10)) - (segment (start 144.6 115.70084) (end 144.89916 116) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 145.8 116) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 144.89916 116) (end 145.8 116) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B303EF) (status 10)) - (segment (start 144.6 112.29916) (end 144.89916 112) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 145.8 112) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 144.89916 112) (end 145.8 112) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B303E7) (status 10)) - (segment (start 144.6 112.29916) (end 144.30084 112) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 143.4 112) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 144.30084 112) (end 143.4 112) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B303E3) (status 10)) - (segment (start 142.44958 108.2) (end 142.4 108.24958) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 142.4 109) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 142.4 108.24958) (end 142.4 109) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B303CC) (status 10)) - (segment (start 137.09916 106.4) (end 138.2 106.4) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 138.2 106.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 137.09916 106.4) (end 137.4 106.70084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 137.4 107.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 137.4 106.70084) (end 137.4 107.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B303B7) (status 10)) - (segment (start 135.84958 108.2) (end 136.6 108.2) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 136.6 108.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 131.50084 106.8) (end 131.2 107.10084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 131.2 108) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 131.2 107.10084) (end 131.2 108) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30397) (status 10)) - (segment (start 132.75042 108.6) (end 132 108.6) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 132 108.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 131.50084 106.8) (end 131.8 106.50084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 131.8 105.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 131.8 106.50084) (end 131.8 105.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B3038C) (status 10)) - (segment (start 114.8 113.9999) (end 115.0001 114.2) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 115.8 114.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 115.0001 114.2) (end 115.8 114.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30387) (status 10)) - (segment (start 113 113.9999) (end 112.7999 114.2) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 112 114.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 112.7999 114.2) (end 112 114.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30383) (status 10)) - (segment (start 113 111.4001) (end 112.7999 111.2) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 112 111.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 112.7999 111.2) (end 112 111.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B3037F) (status 10)) - (segment (start 114.8 111.4001) (end 115.0001 111.2) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 115.8 111.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 115.0001 111.2) (end 115.8 111.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B3037B) (status 10)) - (segment (start 91.8 111.4001) (end 91.9999 111.6) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 92.8 111.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 91.9999 111.6) (end 92.8 111.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30370) (status 10)) - (segment (start 91.8 117.2001) (end 91.8001 117.2) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 92.8 117.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 91.8001 117.2) (end 92.8 117.2) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30365) (status 10)) - (segment (start 77.09916 123.2) (end 76.8 123.49916) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 76.8 124.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 76.8 123.49916) (end 76.8 124.4) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30358) (status 10)) - (segment (start 77.09916 123.2) (end 78.2 123.2) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 78.2 123.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 77.09916 123.2) (end 76.8 122.90084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 76.8 122) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 76.8 122.90084) (end 76.8 122) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30350) (status 10)) - (segment (start 72.64958 122.8) (end 72.6 122.84958) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 72.6 123.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 72.6 122.84958) (end 72.6 123.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30335) (status 10)) - (segment (start 72.64958 122.8) (end 72.6 122.75042) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 72.6 122) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 72.6 122.75042) (end 72.6 122) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B30331) (status 10)) - (segment (start 89.2001 104.8) (end 89 105.0001) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 89 105.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89 105.0001) (end 89 105.8) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B2F5E2) (status 10)) - (segment (start 89.2001 104.8) (end 90.2 104.8) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 90.2 104.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 112.2001 104.8) (end 113.2 104.8) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 113.2 104.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 112.2001 104.8) (end 112 104.5999) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 112 103.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 112 104.5999) (end 112 103.8) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B2F5D3) (status 10)) - (segment (start 89.2001 104.8) (end 89 104.5999) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 89 103.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 89 104.5999) (end 89 103.8) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B2F598) (status 10)) - (segment (start 130.2 115.70084) (end 129.90084 116) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 129 116) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 129.90084 116) (end 129 116) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B2F3D7) (status 10)) - (segment (start 130.2 115.70084) (end 130.49916 116) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 131.4 116) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 130.49916 116) (end 131.4 116) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B2F3C4) (status 10)) - (segment (start 112.2001 104.8) (end 112 105.0001) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 112 105.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 112 105.0001) (end 112 105.8) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B2F346) (status 10)) - (segment (start 82.35 160) (end 82.35 157.4) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 82.35 157.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 165.2 155.29916) (end 165.2 156.4) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 165.2 156.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 165.2 155.29916) (end 165.49916 155) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 166.4 155) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 165.49916 155) (end 166.4 155) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B195B9) (status 10)) - (segment (start 165.2 155.29916) (end 164.90084 155) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 164 155) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 164.90084 155) (end 164 155) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B195B5) (status 10)) - (segment (start 156.09916 157.8) (end 155.8 157.50084) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 155.8 156.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 155.8 157.50084) (end 155.8 156.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B193C4) (status 10)) - (segment (start 156.09916 157.8) (end 157.2 157.8) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 157.2 157.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 156.09916 157.8) (end 155.8 158.09916) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 155.8 159.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 155.8 158.09916) (end 155.8 159.1) (width 0.4) (layer 4_bot) (net 99) (tstamp 53B193BC) (status 10)) - (segment (start 173.9999 121.6) (end 173.9999 120.6001) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 173.9999 120.6001) (end 174 120.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE36D8)) - (via (at 174 120.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 169 122.2) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 169.9999 122.2) (end 169 122.2) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 169.9999 121.1001) (end 170 121.1) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE4607)) - (via (at 170 121.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 169.9999 122.2) (end 169.9999 121.1001) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 132.4 110.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 132.40012 110.49988) (end 132.4 110.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53ADF166)) - (segment (start 133.17598 110.49988) (end 132.40012 110.49988) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 161 107.4) (end 161 108.3999) (width 0.4) (layer 4_bot) (net 99) (status 20)) - (via (at 161 107.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 162.8 108.3999) (end 162.8 107.4) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 162.8 107.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 169.9999 124) (end 169.9999 125.0999) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 170 125.1) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 169.9999 125.0999) (end 170 125.1) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE45FF)) - (segment (start 169.9999 124) (end 169 124) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 169 124) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82.2 125.65) (end 82.2 127.35) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 82.2 127.35) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 83.4 126.05) (end 83.4 127.35) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 83.4 127.35) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 83.4 126.05) (end 84.3 126.05) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 84.3 126.05) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 83.4 126.05) (end 83.4 124.85) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 83.4 124.85) (end 83.55 124.7) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE3897)) - (via (at 83.55 124.7) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82.2 125.65) (end 80.9 125.65) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 80.9 125.65) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82.2 125.65) (end 82.2 123.95) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 82.2 123.95) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 83.4 148.95) (end 83.4 147.65) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 83.4 147.65) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82.2 149.35) (end 80.9 149.35) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 80.9 149.35) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82.2 149.35) (end 82.2 147.65) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 82.2 147.65) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82.2 149.35) (end 82.2 151.05) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 82.2 151.05) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 83.4 148.95) (end 83.4 150.15) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 83.4 150.15) (end 83.55 150.3) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE3855)) - (via (at 83.55 150.3) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 83.4 148.95) (end 84.3 148.95) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 84.3 148.95) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82.35 160) (end 82.35 162.6) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 82.35 162.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82.35 160) (end 80.2 160) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 80.2 160) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 82.35 160) (end 84.5 160) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 84.5 160) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 162.8 121.6001) (end 162.8 122.6) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 162.8 122.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 161 121.6001) (end 161 122.6) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 161 122.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 161 121.6001) (end 160.0001 121.6001) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 160.0001 121.6001) (end 160 121.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE37BE)) - (via (at 160 121.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 161 108.3999) (end 160.0001 108.3999) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 160.0001 108.3999) (end 160 108.4) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE3795)) - (via (at 160 108.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 162.8 108.3999) (end 163.7999 108.3999) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 163.7999 108.3999) (end 163.8 108.4) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE3778)) - (via (at 163.8 108.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 173.9999 121.6) (end 173.9999 122.5999) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 173.9999 122.5999) (end 174 122.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE36E1)) - (via (at 174 122.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 173.9999 121.6) (end 173 121.6) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 173 121.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 98.2001 150.6) (end 99.2 150.6) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 99.2 150.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 98 147.8) (end 98 149) (width 0.4) (layer 4_bot) (net 99)) - (via (at 98 147.8) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 98 149) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 99.34874 147.8) (end 98 147.8) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 98 146.6) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 98 147.8) (end 98 146.6) (width 0.4) (layer 4_bot) (net 99) (tstamp 53AE1EBF)) - (via (at 136 119) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 136 119.64958) (end 136 119) (width 0.4) (layer 4_bot) (net 99) (tstamp 53ADF26A) (status 10)) - (segment (start 136.15042 119.8) (end 136 119.64958) (width 0.4) (layer 4_bot) (net 99) (status 30)) - (via (at 135.1 119) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 135.12416 118.97584) (end 135.1 119) (width 0.4) (layer 4_bot) (net 99) (tstamp 53ADF236)) - (segment (start 135.12416 117.50012) (end 135.12416 118.97584) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 137.4 112) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (via (at 142.4 110.5) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 142.39988 110.49988) (end 142.4 110.5) (width 0.4) (layer 4_bot) (net 99) (tstamp 53ADF16A)) - (segment (start 141.62402 110.49988) (end 142.39988 110.49988) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (segment (start 137.72512 110.49988) (end 137.72512 111.67488) (width 0.2) (layer 4_bot) (net 99) (status 10)) - (segment (start 137.07488 111.67488) (end 137.4 112) (width 0.2) (layer 4_bot) (net 99) (tstamp 53ADF17E)) - (segment (start 137.07488 111.67488) (end 137.07488 110.49988) (width 0.2) (layer 4_bot) (net 99) (status 20)) - (segment (start 137.72512 111.67488) (end 137.4 112) (width 0.2) (layer 4_bot) (net 99) (tstamp 53ADF182)) - (via (at 97.6 132.8) (size 0.6985) (layers 1_top 4_bot) (net 99) (status 30)) - (segment (start 97.6 132.8) (end 97.6 135) (width 0.2) (layer 4_bot) (net 99) (status 30)) - (via (at 97.6 135) (size 0.6985) (layers 1_top 4_bot) (net 99) (status 30)) - (segment (start 97.6 132.8) (end 99.8 132.8) (width 0.2) (layer 4_bot) (net 99) (status 30)) - (via (at 99.8 132.8) (size 0.6985) (layers 1_top 4_bot) (net 99) (status 30)) - (segment (start 97.6 132.8) (end 95.4 132.8) (width 0.2) (layer 4_bot) (net 99) (status 30)) - (via (at 95.4 132.8) (size 0.6985) (layers 1_top 4_bot) (net 99) (status 30)) - (segment (start 97.6 132.8) (end 97.6 130.6) (width 0.2) (layer 4_bot) (net 99) (status 30)) - (via (at 97.6 130.6) (size 0.6985) (layers 1_top 4_bot) (net 99) (status 30)) - (segment (start 97.6 132.8) (end 99.8 135) (width 0.2) (layer 4_bot) (net 99) (status 30)) - (via (at 99.8 135) (size 0.6985) (layers 1_top 4_bot) (net 99) (status 30)) - (segment (start 97.6 132.8) (end 95.4 135) (width 0.2) (layer 4_bot) (net 99) (status 30)) - (via (at 95.4 135) (size 0.6985) (layers 1_top 4_bot) (net 99) (status 30)) - (segment (start 97.6 132.8) (end 99.8 130.6) (width 0.2) (layer 4_bot) (net 99) (status 30)) - (via (at 99.8 130.6) (size 0.6985) (layers 1_top 4_bot) (net 99) (status 30)) - (segment (start 97.6 132.8) (end 95.4 130.6) (width 0.2) (layer 4_bot) (net 99) (status 30)) - (via (at 95.4 130.6) (size 0.6985) (layers 1_top 4_bot) (net 99) (status 30)) - (segment (start 85.3 143.75) (end 86.1 143.75) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (segment (start 86.1 143.75) (end 86.45 143.4) (width 0.3) (layer 4_bot) (net 99) (tstamp 53AB3F31)) - (via (at 86.45 143.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 143.25) (end 84.15 143.25) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (via (at 84.15 143.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 139.75) (end 86.45 139.75) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (via (at 86.45 139.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 139.25) (end 84.15 139.25) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (via (at 84.15 139.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 130.25) (end 84.45 130.25) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (segment (start 84.45 130.25) (end 84.15 130.55) (width 0.3) (layer 4_bot) (net 99) (tstamp 53AA6CDF)) - (via (at 84.15 130.55) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 146.25) (end 86.45 146.25) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (via (at 86.45 146.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 141.75) (end 86.45 141.75) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (via (at 86.45 141.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 140.75) (end 86.45 140.75) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (via (at 86.45 140.75) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 142.25) (end 84.15 142.25) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (via (at 84.15 142.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 141.25) (end 84.15 141.25) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (via (at 84.15 141.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 85.3 140.25) (end 84.15 140.25) (width 0.3) (layer 4_bot) (net 99) (status 10)) - (via (at 84.15 140.25) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 97 141.64958) (end 97 142.4) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 97 142.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 98.6 141.64958) (end 98.6 142.4) (width 0.4) (layer 4_bot) (net 99) (status 10)) - (via (at 98.6 142.4) (size 0.6985) (layers 1_top 4_bot) (net 99)) - (segment (start 114.8 115.6001) (end 113 115.6001) (width 0.4) (layer 4_bot) (net 100) (status 30)) - (segment (start 114.8 115.6001) (end 114.8 117.3999) (width 0.4) (layer 4_bot) (net 100) (status 30)) - (segment (start 114.8 117.3999) (end 114.8001 117.4) (width 0.4) (layer 4_bot) (net 100) (tstamp 53B08341) (status 30)) - (segment (start 114.8 115.6001) (end 117.64984 115.6001) (width 0.4) (layer 4_bot) (net 100) (status 30)) - (segment (start 117.64984 115.6001) (end 117.64994 115.6) (width 0.4) (layer 4_bot) (net 100) (tstamp 53B0833F) (status 30)) - (segment (start 114.8 109.7999) (end 114.8 108.0001) (width 0.4) (layer 4_bot) (net 101) (status 30)) - (segment (start 114.8 108.0001) (end 114.8001 108) (width 0.4) (layer 4_bot) (net 101) (tstamp 53B08347) (status 30)) - (segment (start 114.8 109.7999) (end 113 109.7999) (width 0.4) (layer 4_bot) (net 101) (status 30)) - (segment (start 114.8 109.7999) (end 117.64984 109.7999) (width 0.4) (layer 4_bot) (net 101) (status 30)) - (segment (start 117.64984 109.7999) (end 117.64994 109.8) (width 0.4) (layer 4_bot) (net 101) (tstamp 53B0833D) (status 30)) - (segment (start 162.8 119.9999) (end 163.7999 119.9999) (width 0.4) (layer 4_bot) (net 102) (status 10)) - (segment (start 163.7999 119.9999) (end 164.5999 120.7999) (width 0.4) (layer 4_bot) (net 102) (tstamp 53AE0179)) - (segment (start 164.5999 120.7999) (end 164.5999 121.6) (width 0.4) (layer 4_bot) (net 102) (tstamp 53AE017B) (status 20)) - (segment (start 162.8 119.9999) (end 161 119.9999) (width 0.4) (layer 4_bot) (net 102) (status 30)) - (segment (start 161 119.9999) (end 157.3497 119.9999) (width 0.4) (layer 4_bot) (net 102) (status 30)) - (segment (start 157.3497 119.9999) (end 157.3496 120) (width 0.4) (layer 4_bot) (net 102) (tstamp 53AE0130) (status 30)) - (segment (start 164.5999 110) (end 162.8001 110) (width 0.4) (layer 4_bot) (net 103) (status 30)) - (segment (start 162.8001 110) (end 162.8 110.0001) (width 0.4) (layer 4_bot) (net 103) (tstamp 53AE012D) (status 30)) - (segment (start 162.8 110.0001) (end 161 110.0001) (width 0.4) (layer 4_bot) (net 103) (status 30)) - (segment (start 161 110.0001) (end 157.3497 110.0001) (width 0.4) (layer 4_bot) (net 103) (status 30)) - (segment (start 157.3497 110.0001) (end 157.3496 110) (width 0.4) (layer 4_bot) (net 103) (tstamp 53AE0127) (status 30)) - (segment (start 91.8001 108) (end 91.8001 109.7998) (width 0.4) (layer 4_bot) (net 104) (status 30)) - (segment (start 91.8001 109.7998) (end 91.8 109.7999) (width 0.4) (layer 4_bot) (net 104) (tstamp 53B0871A) (status 30)) - (segment (start 91.8 109.7999) (end 94.64984 109.7999) (width 0.4) (layer 4_bot) (net 104) (status 30)) - (segment (start 94.64984 109.7999) (end 94.64994 109.8) (width 0.4) (layer 4_bot) (net 104) (tstamp 53B08718) (status 30)) - (segment (start 91.8 115.5999) (end 91.7999 115.6) (width 0.4) (layer 4_bot) (net 105) (status 30)) - (segment (start 91.7999 115.6) (end 90.0001 115.6) (width 0.4) (layer 4_bot) (net 105) (tstamp 53B08D1C) (status 30)) - (segment (start 94.64994 115.6) (end 94.64984 115.5999) (width 0.4) (layer 4_bot) (net 105) (status 30)) - (segment (start 94.64984 115.5999) (end 91.8 115.5999) (width 0.4) (layer 4_bot) (net 105) (tstamp 53B08D1A) (status 30)) - (segment (start 91.7999 115.6) (end 91.8 115.6001) (width 0.4) (layer 4_bot) (net 105) (tstamp 53B0872A) (status 30)) - (segment (start 94.64984 115.6001) (end 94.64994 115.6) (width 0.4) (layer 4_bot) (net 105) (tstamp 53B08716) (status 30)) - (segment (start 140.2001 108.2) (end 140.2001 107.1999) (width 0.4) (layer 4_bot) (net 106) (status 10)) - (segment (start 140.2001 107.1999) (end 143 104.4) (width 0.4) (layer 4_bot) (net 106) (tstamp 53AE01D6) (status 20)) - (segment (start 143 104.4) (end 143.55006 104.4) (width 0.4) (layer 4_bot) (net 106) (tstamp 53AE01D9) (status 30)) - (segment (start 142 103) (end 145.4 103) (width 0.4) (layer 4_bot) (net 107)) - (segment (start 140.04994 104.4) (end 140.6 104.4) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE01C4) (status 30)) - (segment (start 142 103) (end 140.6 104.4) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE01C0) (status 20)) - (segment (start 147.07 104.67) (end 147.07 108.4) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE50C6) (status 20)) - (segment (start 145.4 103) (end 147.07 104.67) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE50C3)) - (segment (start 154.2 108.8) (end 154.2 112.6) (width 0.4) (layer 4_bot) (net 107)) - (segment (start 154.2 108.8) (end 153.8 108.4) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE4611)) - (segment (start 153.8 108.4) (end 147.07 108.4) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE4613) (status 20)) - (segment (start 171.6001 122.2) (end 171.6001 119.8) (width 0.4) (layer 4_bot) (net 107) (status 10)) - (segment (start 154.2 112.6) (end 157.9 116.3) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE4618)) - (segment (start 157.9 116.3) (end 168.1 116.3) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE4619)) - (segment (start 168.1 116.3) (end 171.6 119.8) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE461B)) - (segment (start 171.6 119.8) (end 171.6001 119.8) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE461D)) - (segment (start 173.3999 124) (end 171.6001 124) (width 0.4) (layer 4_bot) (net 107) (status 30)) - (segment (start 171.6001 124) (end 171.6001 122.2) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE45E8) (status 30)) - (segment (start 147.1 108.37) (end 147.07 108.4) (width 0.4) (layer 4_bot) (net 107) (tstamp 53AE0287) (status 30)) - (segment (start 140.04994 104.4) (end 137.2001 104.4) (width 0.4) (layer 4_bot) (net 107) (status 30)) - (segment (start 96.65126 148.74996) (end 96.65126 150.54864) (width 0.2) (layer 4_bot) (net 108) (status 30)) - (segment (start 96.65126 150.54864) (end 96.5999 150.6) (width 0.2) (layer 4_bot) (net 108) (tstamp 53AE1EEA) (status 30)) - (segment (start 85.3 147.25) (end 85.3 147.75) (width 0.3) (layer 4_bot) (net 109) (status 10)) - (segment (start 85.3 147.75) (end 85.95 148.4) (width 0.4) (layer 4_bot) (net 109) (tstamp 53C5B93F)) - (segment (start 85.95 148.4) (end 90.4 148.4) (width 0.4) (layer 4_bot) (net 109) (tstamp 53C5B940) (status 20)) - (segment (start 90.4 148.4) (end 90.44938 148.4) (width 0.4) (layer 4_bot) (net 109) (tstamp 53C5B941) (status 30)) - (segment (start 109.7 102.4) (end 109.7 103.9001) (width 0.4) (layer 4_bot) (net 110) (status 10)) - (segment (start 109.7 103.9001) (end 110.5999 104.8) (width 0.4) (layer 4_bot) (net 110) (tstamp 53B086BE) (status 20)) - (segment (start 86.7 102.4) (end 86.7 103.9001) (width 0.4) (layer 4_bot) (net 111) (status 10)) - (segment (start 86.7 103.9001) (end 87.5999 104.8) (width 0.4) (layer 4_bot) (net 111) (tstamp 53B085A9) (status 20)) - (segment (start 113.1999 117.4) (end 110.6001 117.4) (width 0.4) (layer 4_bot) (net 112) (status 30)) - (segment (start 110.6001 117.4) (end 110.6 117.4001) (width 0.4) (layer 4_bot) (net 112) (tstamp 53B086C4) (status 30)) - (segment (start 110.6 115.7999) (end 110.6 112.7) (width 0.4) (layer 4_bot) (net 113) (status 30)) - (segment (start 110.6 112.7) (end 109.7 111.8) (width 0.4) (layer 4_bot) (net 113) (tstamp 53B086C2) (status 30)) - (segment (start 113.1999 108) (end 105.2 108) (width 0.4) (layer 4_bot) (net 114) (status 10)) - (segment (start 103.5999 109.6001) (end 101.6 109.6001) (width 0.4) (layer 4_bot) (net 114) (tstamp 53B086C8) (status 20)) - (segment (start 105.2 108) (end 103.5999 109.6001) (width 0.4) (layer 4_bot) (net 114) (tstamp 53B086C6)) - (segment (start 101.6 107.9999) (end 101.6 105.1) (width 0.4) (layer 4_bot) (net 115) (status 30)) - (segment (start 101.6 105.1) (end 102.3 104.4) (width 0.4) (layer 4_bot) (net 115) (tstamp 53B086C0) (status 30)) - (segment (start 166.2001 121.6) (end 166.2001 118.5999) (width 0.4) (layer 4_bot) (net 116) (status 30)) - (segment (start 166.2001 118.5999) (end 166.3 118.5) (width 0.4) (layer 4_bot) (net 116) (tstamp 53B18C8E) (status 30)) - (segment (start 173.8 111.1) (end 168.3 111.1) (width 0.4) (layer 4_bot) (net 117) (status 10)) - (segment (start 167.2 110) (end 168.3 111.1) (width 0.4) (layer 4_bot) (net 117) (tstamp 53AE0174)) - (segment (start 167.2 110) (end 166.2001 110) (width 0.4) (layer 4_bot) (net 117) (status 20)) - (segment (start 175.6001 121.6) (end 175.6001 118.5999) (width 0.4) (layer 4_bot) (net 118) (status 30)) - (segment (start 175.6001 118.5999) (end 175.7 118.5) (width 0.4) (layer 4_bot) (net 118) (tstamp 53B18C88) (status 30)) - (segment (start 90 111.4001) (end 87.0999 111.4001) (width 0.4) (layer 4_bot) (net 119) (status 30)) - (segment (start 87.0999 111.4001) (end 86.7 111.8) (width 0.4) (layer 4_bot) (net 119) (tstamp 53B0872E) (status 30)) - (segment (start 90 109.7999) (end 90 108.1999) (width 0.4) (layer 4_bot) (net 120) (status 30)) - (segment (start 90 108.1999) (end 90.1999 108) (width 0.4) (layer 4_bot) (net 120) (tstamp 53B0872C) (status 30)) - (segment (start 79.3 104.4) (end 79.8 104.9) (width 0.4) (layer 4_bot) (net 121) (status 30)) - (segment (start 79.6001 107.9999) (end 78.6 107.9999) (width 0.4) (layer 4_bot) (net 121) (tstamp 53B0855E) (status 20)) - (segment (start 79.8 107.8) (end 79.6001 107.9999) (width 0.4) (layer 4_bot) (net 121) (tstamp 53B0855D)) - (segment (start 79.8 104.9) (end 79.8 107.8) (width 0.4) (layer 4_bot) (net 121) (tstamp 53B0855C) (status 10)) - (segment (start 88.3999 115.6) (end 86.2 115.6) (width 0.4) (layer 4_bot) (net 122) (status 10)) - (segment (start 79.6001 109.6001) (end 80.6 110.6) (width 0.4) (layer 4_bot) (net 122) (tstamp 53B08730)) - (segment (start 80.6 110.6) (end 80.6 111.6) (width 0.4) (layer 4_bot) (net 122) (tstamp 53B08731)) - (segment (start 80.6 111.6) (end 81.8 112.8) (width 0.4) (layer 4_bot) (net 122) (tstamp 53B08732)) - (segment (start 81.8 112.8) (end 83.4 112.8) (width 0.4) (layer 4_bot) (net 122) (tstamp 53B08733)) - (segment (start 79.6001 109.6001) (end 78.6 109.6001) (width 0.4) (layer 4_bot) (net 122) (status 20)) - (segment (start 86.2 115.6) (end 83.4 112.8) (width 0.4) (layer 4_bot) (net 122) (tstamp 53B08D1F)) - (segment (start 178.5 118.5) (end 177.6 119.4) (width 0.4) (layer 4_bot) (net 123) (status 30)) - (segment (start 177.6 122.2) (end 175.8 124) (width 0.4) (layer 4_bot) (net 123) (tstamp 53AE45C2)) - (segment (start 175.8 124) (end 175.0001 124) (width 0.4) (layer 4_bot) (net 123) (tstamp 53AE45C3) (status 20)) - (segment (start 177.6 119.4) (end 177.6 122.2) (width 0.4) (layer 4_bot) (net 123) (tstamp 53B18C82) (status 10)) + (segment (start 135.5999 104.4) (end 135.5999 106.10094) (width 0.4) (layer 4_bot) (net 13) (status 30)) + (segment (start 135.5999 106.10094) (end 135.30084 106.4) (width 0.4) (layer 4_bot) (net 13) (tstamp 53AE01C9) (status 30)) + (segment (start 135.30084 106.4) (end 134.95042 106.75042) (width 0.4) (layer 4_bot) (net 13) (status 30)) + (segment (start 134.95042 106.75042) (end 134.95042 108.2) (width 0.4) (layer 4_bot) (net 13) (tstamp 53ADF19E) (status 30)) + (segment (start 134.95042 108.2) (end 134.47392 108.6765) (width 0.4) (layer 4_bot) (net 13) (status 10)) + (segment (start 134.47392 108.6765) (end 134.47392 110.49988) (width 0.4) (layer 4_bot) (net 13) (tstamp 53ADF192) (status 20)) + (segment (start 135.12416 110.49988) (end 135.12416 109.27584) (width 0.2) (layer 4_bot) (net 14) (status 10)) + (segment (start 137.7999 109) (end 138.5999 108.2) (width 0.2) (layer 4_bot) (net 14) (tstamp 53ADF668) (status 20)) + (segment (start 135.4 109) (end 137.7999 109) (width 0.2) (layer 4_bot) (net 14) (tstamp 53ADF667)) + (segment (start 135.12416 109.27584) (end 135.4 109) (width 0.2) (layer 4_bot) (net 14) (tstamp 53ADF664)) + (segment (start 151.0504 110) (end 149.8 110) (width 0.4) (layer 4_bot) (net 15) (status 30)) + (segment (start 149.8 110) (end 146.1 113.7) (width 0.4) (layer 4_bot) (net 15) (tstamp 53AE006E) (status 10)) + (segment (start 137.3 113.7) (end 135.7744 115.2256) (width 0.4) (layer 4_bot) (net 15) (tstamp 53AE0022)) + (segment (start 146.1 113.7) (end 137.3 113.7) (width 0.4) (layer 4_bot) (net 15) (tstamp 53AE0075)) + (segment (start 135.7744 117.50012) (end 135.7744 115.2256) (width 0.4) (layer 4_bot) (net 15) (status 10)) + (segment (start 138.8 166.8) (end 139.4 166.8) (width 0.2) (layer 1_top) (net 16)) + (segment (start 140.3 165.9) (end 140.3 146.2) (width 0.2) (layer 1_top) (net 16) (tstamp 53F39016)) + (segment (start 139.4 166.8) (end 140.3 165.9) (width 0.2) (layer 1_top) (net 16) (tstamp 53F39015)) + (segment (start 138.235 167.365) (end 138.8 166.8) (width 0.2) (layer 4_bot) (net 16) (tstamp 53ADEF58)) + (segment (start 137.47 167.365) (end 138.235 167.365) (width 0.2) (layer 4_bot) (net 16) (status 10)) + (segment (start 138.3 114.4) (end 138.3 123.1) (width 0.2) (layer 1_top) (net 16)) + (segment (start 138.9 144.8) (end 140.3 146.2) (width 0.2) (layer 1_top) (net 16) (tstamp 53AE075D)) + (segment (start 138.9 130.3) (end 138.9 144.8) (width 0.2) (layer 1_top) (net 16) (tstamp 53AE075B)) + (segment (start 140.5 128.7) (end 138.9 130.3) (width 0.2) (layer 1_top) (net 16) (tstamp 53AE0759)) + (segment (start 140.5 125.3) (end 140.5 128.7) (width 0.2) (layer 1_top) (net 16) (tstamp 53AE0757)) + (segment (start 138.3 123.1) (end 140.5 125.3) (width 0.2) (layer 1_top) (net 16) (tstamp 53AE0749)) + (segment (start 139.0256 110.49988) (end 139.0256 111.9256) (width 0.2) (layer 4_bot) (net 16) (status 10)) + (segment (start 139.1 113.6) (end 138.3 114.4) (width 0.2) (layer 1_top) (net 16) (tstamp 53AE0714)) + (segment (start 139.1 112) (end 139.1 113.6) (width 0.2) (layer 1_top) (net 16) (tstamp 53AE0713)) + (via (at 139.1 112) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 16)) + (segment (start 139.0256 111.9256) (end 139.1 112) (width 0.2) (layer 4_bot) (net 16) (tstamp 53AE0703)) + (via (at 138.8 166.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 16)) + (segment (start 138.8 167.8) (end 137.1 166.1) (width 0.2) (layer 1_top) (net 17)) + (segment (start 137.1 164.2) (end 139.6 161.7) (width 0.2) (layer 1_top) (net 17) (tstamp 53F3900F)) + (segment (start 137.1 166.1) (end 137.1 164.2) (width 0.2) (layer 1_top) (net 17) (tstamp 53F3900D)) + (segment (start 139.235 167.365) (end 140.01 167.365) (width 0.2) (layer 4_bot) (net 17) (status 20)) + (segment (start 139.235 167.365) (end 138.8 167.8) (width 0.2) (layer 4_bot) (net 17) (tstamp 53ADEF53)) + (segment (start 137.9 144.9) (end 137.9 130.1) (width 0.2) (layer 1_top) (net 17)) + (segment (start 139.6 146.6) (end 139.6 161.7) (width 0.2) (layer 1_top) (net 17) (tstamp 53AE07E2)) + (segment (start 137.9 144.9) (end 139.6 146.6) (width 0.2) (layer 1_top) (net 17) (tstamp 53AE2494)) + (segment (start 138.37536 112.32464) (end 137.8 112.9) (width 0.2) (layer 4_bot) (net 17) (tstamp 53AE08FF)) + (via (at 137.8 112.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 17)) + (segment (start 138.37536 110.49988) (end 138.37536 112.32464) (width 0.2) (layer 4_bot) (net 17) (status 10)) + (segment (start 137.9 130.1) (end 139.7 128.3) (width 0.2) (layer 1_top) (net 17) (tstamp 53AE2496)) + (segment (start 139.7 128.3) (end 139.7 125.6) (width 0.2) (layer 1_top) (net 17) (tstamp 53AE249C)) + (segment (start 139.7 125.6) (end 137.8 123.7) (width 0.2) (layer 1_top) (net 17) (tstamp 53AE249F)) + (segment (start 137.8 123.7) (end 137.8 112.9) (width 0.2) (layer 1_top) (net 17) (tstamp 53AE24A3)) + (via (at 138.8 167.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 17)) + (segment (start 133.82622 110.49988) (end 133.82622 109.22622) (width 0.4) (layer 4_bot) (net 18) (status 10)) + (segment (start 133.64958 109.04958) (end 133.64958 108.6) (width 0.4) (layer 4_bot) (net 18) (tstamp 53B303A3) (status 20)) + (segment (start 133.82622 109.22622) (end 133.64958 109.04958) (width 0.4) (layer 4_bot) (net 18) (tstamp 53B303A2)) + (segment (start 133.29916 106.8) (end 133.64958 107.15042) (width 0.4) (layer 4_bot) (net 18) (status 30)) + (segment (start 133.64958 107.15042) (end 133.64958 108.6) (width 0.4) (layer 4_bot) (net 18) (tstamp 53ADF19C) (status 30)) + (segment (start 94.6 147.4999) (end 94.6 142.8) (width 0.2) (layer 4_bot) (net 19) (status 10)) + (segment (start 95.8 127.2) (end 95.8 128.6) (width 0.2) (layer 4_bot) (net 19) (tstamp 53C5B96D) (status 20)) + (segment (start 95 126.4) (end 95.8 127.2) (width 0.2) (layer 4_bot) (net 19) (tstamp 53C5B96C)) + (segment (start 95 125.8) (end 95 126.4) (width 0.2) (layer 4_bot) (net 19) (tstamp 53C5B96B)) + (via (at 95 125.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 19)) + (segment (start 93 125.8) (end 95 125.8) (width 0.2) (layer 1_top) (net 19) (tstamp 53C5B968)) + (segment (start 92 126.8) (end 93 125.8) (width 0.2) (layer 1_top) (net 19) (tstamp 53C5B966)) + (segment (start 92 129) (end 92 126.8) (width 0.2) (layer 1_top) (net 19) (tstamp 53C5B964)) + (segment (start 94.6 131.6) (end 92 129) (width 0.2) (layer 1_top) (net 19) (tstamp 53C5B962)) + (segment (start 94.6 142.8) (end 94.6 131.6) (width 0.2) (layer 1_top) (net 19) (tstamp 53C5B961)) + (via (at 94.6 142.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 19)) + (segment (start 94.6 147.4999) (end 92.7999 147.4999) (width 0.2) (layer 4_bot) (net 19) (status 30)) + (segment (start 92.75 147.45) (end 92.75062 147.45004) (width 0.2) (layer 4_bot) (net 19) (tstamp 53C5B959) (status 30)) + (segment (start 92.7999 147.4999) (end 92.75 147.45) (width 0.2) (layer 4_bot) (net 19) (tstamp 53C5B958) (status 30)) + (segment (start 93.4 130.6) (end 92 130.6) (width 0.2) (layer 4_bot) (net 20) (status 10)) + (segment (start 86.15 131.25) (end 85.3 131.25) (width 0.2) (layer 4_bot) (net 20) (tstamp 53AA68F1) (status 20)) + (segment (start 87.198002 130.201998) (end 86.15 131.25) (width 0.2) (layer 4_bot) (net 20) (tstamp 53AA68EF)) + (segment (start 91.601998 130.201998) (end 87.198002 130.201998) (width 0.2) (layer 4_bot) (net 20) (tstamp 53AA68EE)) + (segment (start 92 130.6) (end 91.601998 130.201998) (width 0.2) (layer 4_bot) (net 20) (tstamp 53AA68ED)) + (segment (start 93.4 131) (end 91.8 131) (width 0.2) (layer 4_bot) (net 21) (status 10)) + (segment (start 86.25 131.75) (end 85.3 131.75) (width 0.2) (layer 4_bot) (net 21) (tstamp 53AA68EA) (status 20)) + (segment (start 87.4 130.6) (end 86.25 131.75) (width 0.2) (layer 4_bot) (net 21) (tstamp 53AA68E8)) + (segment (start 91.4 130.6) (end 87.4 130.6) (width 0.2) (layer 4_bot) (net 21) (tstamp 53AA68E7)) + (segment (start 91.8 131) (end 91.4 130.6) (width 0.2) (layer 4_bot) (net 21) (tstamp 53AA68E6)) + (segment (start 93.4 135) (end 92.2 135) (width 0.2) (layer 4_bot) (net 22) (status 10)) + (segment (start 90.95 136.25) (end 85.3 136.25) (width 0.2) (layer 4_bot) (net 22) (tstamp 53AA6AE9) (status 20)) + (segment (start 92.2 135) (end 90.95 136.25) (width 0.2) (layer 4_bot) (net 22) (tstamp 53AA6AE7)) + (segment (start 93.4 135.4) (end 92.4 135.4) (width 0.2) (layer 4_bot) (net 23) (status 10)) + (segment (start 91.05 136.75) (end 85.3 136.75) (width 0.2) (layer 4_bot) (net 23) (tstamp 53AA6B4A) (status 20)) + (segment (start 92.4 135.4) (end 91.05 136.75) (width 0.2) (layer 4_bot) (net 23) (tstamp 53AA6B48)) + (segment (start 93.4 135.8) (end 93.4 136.2) (width 0.2) (layer 4_bot) (net 24) (status 10)) + (segment (start 92.35 137.25) (end 85.3 137.25) (width 0.2) (layer 4_bot) (net 24) (tstamp 53AA6B4E) (status 20)) + (segment (start 93.4 136.2) (end 92.35 137.25) (width 0.2) (layer 4_bot) (net 24) (tstamp 53AA6B4D)) + (segment (start 85.3 137.75) (end 93.45 137.75) (width 0.2) (layer 4_bot) (net 25) (status 10)) + (segment (start 94.2 137) (end 94.6 137) (width 0.2) (layer 4_bot) (net 25) (tstamp 53AA6B55) (status 20)) + (segment (start 93.45 137.75) (end 94.2 137) (width 0.2) (layer 4_bot) (net 25) (tstamp 53AA6B53)) + (segment (start 85.3 138.25) (end 94.75 138.25) (width 0.2) (layer 4_bot) (net 26) (status 10)) + (segment (start 95 138) (end 95 137) (width 0.2) (layer 4_bot) (net 26) (tstamp 53AA6B58) (status 20)) + (segment (start 94.75 138.25) (end 95 138) (width 0.2) (layer 4_bot) (net 26) (tstamp 53AA6B57)) + (segment (start 95.4 137) (end 95.4 138.2) (width 0.2) (layer 4_bot) (net 27) (status 10)) + (segment (start 94.85 138.75) (end 85.3 138.75) (width 0.2) (layer 4_bot) (net 27) (status 20)) + (segment (start 95.4 138.2) (end 94.85 138.75) (width 0.2) (layer 4_bot) (net 27) (tstamp 53AE60BF)) + (segment (start 93.4 131.4) (end 91.6 131.4) (width 0.2) (layer 4_bot) (net 28) (status 10)) + (segment (start 86.35 132.25) (end 85.3 132.25) (width 0.2) (layer 4_bot) (net 28) (tstamp 53AA68E3) (status 20)) + (segment (start 87.596004 131.003996) (end 86.35 132.25) (width 0.2) (layer 4_bot) (net 28) (tstamp 53AA68E1)) + (segment (start 91.203996 131.003996) (end 87.596004 131.003996) (width 0.2) (layer 4_bot) (net 28) (tstamp 53AA68E0)) + (segment (start 91.6 131.4) (end 91.203996 131.003996) (width 0.2) (layer 4_bot) (net 28) (tstamp 53AA68DF)) + (segment (start 85.3 132.75) (end 86.45 132.75) (width 0.2) (layer 4_bot) (net 29) (status 10)) + (segment (start 91.4 131.8) (end 93.4 131.8) (width 0.2) (layer 4_bot) (net 29) (tstamp 53AA69D4) (status 20)) + (segment (start 91.001998 131.401998) (end 91.4 131.8) (width 0.2) (layer 4_bot) (net 29) (tstamp 53AA69D3)) + (segment (start 87.798002 131.401998) (end 91.001998 131.401998) (width 0.2) (layer 4_bot) (net 29) (tstamp 53AA69D1)) + (segment (start 86.45 132.75) (end 87.798002 131.401998) (width 0.2) (layer 4_bot) (net 29) (tstamp 53AA69CF)) + (segment (start 93.4 132.2) (end 91.2 132.2) (width 0.2) (layer 4_bot) (net 30) (status 10)) + (segment (start 91.2 132.2) (end 90.8 131.8) (width 0.2) (layer 4_bot) (net 30) (tstamp 53AA68D2)) + (segment (start 90.8 131.8) (end 88 131.8) (width 0.2) (layer 4_bot) (net 30) (tstamp 53AA68D3)) + (segment (start 88 131.8) (end 86.55 133.25) (width 0.2) (layer 4_bot) (net 30) (tstamp 53AA68D4)) + (segment (start 86.55 133.25) (end 85.3 133.25) (width 0.2) (layer 4_bot) (net 30) (tstamp 53AA68D5) (status 20)) + (segment (start 93.4 133) (end 91.2 133) (width 0.2) (layer 4_bot) (net 31) (status 10)) + (segment (start 90.45 133.75) (end 85.3 133.75) (width 0.2) (layer 4_bot) (net 31) (tstamp 53AA6AD1) (status 20)) + (segment (start 91.2 133) (end 90.45 133.75) (width 0.2) (layer 4_bot) (net 31) (tstamp 53AA6AD0)) + (segment (start 93.4 133.4) (end 91.4 133.4) (width 0.2) (layer 4_bot) (net 32) (status 10)) + (segment (start 90.55 134.25) (end 85.3 134.25) (width 0.2) (layer 4_bot) (net 32) (tstamp 53AA6AD5) (status 20)) + (segment (start 91.4 133.4) (end 90.55 134.25) (width 0.2) (layer 4_bot) (net 32) (tstamp 53AA6AD3)) + (segment (start 93.4 133.8) (end 91.6 133.8) (width 0.2) (layer 4_bot) (net 33) (status 10)) + (segment (start 90.65 134.75) (end 85.3 134.75) (width 0.2) (layer 4_bot) (net 33) (tstamp 53AA6ADA) (status 20)) + (segment (start 91.6 133.8) (end 90.65 134.75) (width 0.2) (layer 4_bot) (net 33) (tstamp 53AA6AD8)) + (segment (start 93.4 134.2) (end 91.8 134.2) (width 0.2) (layer 4_bot) (net 34) (status 10)) + (segment (start 90.75 135.25) (end 85.3 135.25) (width 0.2) (layer 4_bot) (net 34) (tstamp 53AA6ADF) (status 20)) + (segment (start 91.8 134.2) (end 90.75 135.25) (width 0.2) (layer 4_bot) (net 34) (tstamp 53AA6ADD)) + (segment (start 93.4 134.6) (end 92 134.6) (width 0.2) (layer 4_bot) (net 35) (status 10)) + (segment (start 90.85 135.75) (end 85.3 135.75) (width 0.2) (layer 4_bot) (net 35) (tstamp 53AA6AE4) (status 20)) + (segment (start 92 134.6) (end 90.85 135.75) (width 0.2) (layer 4_bot) (net 35) (tstamp 53AA6AE2)) + (segment (start 85.3 144.25) (end 90.55 144.25) (width 0.2) (layer 4_bot) (net 36) (status 10)) + (segment (start 96.198002 137.003996) (end 96.2 137) (width 0.2) (layer 4_bot) (net 36) (tstamp 53AB3F5C) (status 30)) + (segment (start 96.198002 138.601998) (end 96.198002 137.003996) (width 0.2) (layer 4_bot) (net 36) (tstamp 53AB3F5A) (status 20)) + (segment (start 90.55 144.25) (end 96.198002 138.601998) (width 0.2) (layer 4_bot) (net 36) (tstamp 53AB3F56)) + (segment (start 87.8 145.5999) (end 86.9999 145.5999) (width 0.2) (layer 4_bot) (net 37) (status 10)) + (segment (start 86.65 145.25) (end 85.3 145.25) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB4AEC) (status 20)) + (segment (start 86.9999 145.5999) (end 86.65 145.25) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB4AEA)) + (segment (start 87.8 145.5999) (end 87.7999 145.6) (width 0.2) (layer 4_bot) (net 37) (status 30)) + (via (at 95.4 141) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 37)) + (segment (start 95.4 141) (end 99.6 141) (width 0.2) (layer 1_top) (net 37) (tstamp 53AB499D)) + (via (at 99.6 141) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 37)) + (segment (start 99.6 141) (end 99.6 140) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB49A5)) + (segment (start 99.6 140) (end 98.6 139) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB49A6)) + (segment (start 98.6 139) (end 98.6 137) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB49A8) (status 20)) + (segment (start 90.8 145.6) (end 95.4 141) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB4A23)) + (segment (start 87.7999 145.6) (end 90.8 145.6) (width 0.2) (layer 4_bot) (net 37) (tstamp 53AB4A17) (status 10)) + (segment (start 96.6 137) (end 96.6 138.8) (width 0.2) (layer 4_bot) (net 38) (status 10)) + (segment (start 90.65 144.75) (end 85.3 144.75) (width 0.2) (layer 4_bot) (net 38) (tstamp 53AB3F93) (status 20)) + (segment (start 96.6 138.8) (end 90.65 144.75) (width 0.2) (layer 4_bot) (net 38) (tstamp 53AB3F8F)) + (segment (start 85.3 130.75) (end 86.05 130.75) (width 0.2) (layer 4_bot) (net 39) (status 10)) + (segment (start 92.2 130.2) (end 93.4 130.2) (width 0.2) (layer 4_bot) (net 39) (tstamp 53AA68F8) (status 20)) + (segment (start 91.8 129.8) (end 92.2 130.2) (width 0.2) (layer 4_bot) (net 39) (tstamp 53AA68F7)) + (segment (start 87 129.8) (end 91.8 129.8) (width 0.2) (layer 4_bot) (net 39) (tstamp 53AA68F5)) + (segment (start 86.05 130.75) (end 87 129.8) (width 0.2) (layer 4_bot) (net 39) (tstamp 53AA68F4)) + (segment (start 95.8 137) (end 95.8 138.4) (width 0.2) (layer 4_bot) (net 40) (status 10)) + (segment (start 91.45 142.75) (end 95.8 138.4) (width 0.2) (layer 4_bot) (net 40) (tstamp 53AB3F4C)) + (segment (start 91.45 142.75) (end 85.3 142.75) (width 0.2) (layer 4_bot) (net 40) (status 20)) + (segment (start 134.45 163.6) (end 135.4 163.6) (width 0.2) (layer 4_bot) (net 41) (status 10)) + (segment (start 140.01 160.11) (end 140.01 162.315) (width 0.2) (layer 4_bot) (net 41) (tstamp 53ADA943) (status 20)) + (segment (start 139.8 159.9) (end 140.01 160.11) (width 0.2) (layer 4_bot) (net 41) (tstamp 53ADA940)) + (segment (start 136.6 159.9) (end 139.8 159.9) (width 0.2) (layer 4_bot) (net 41) (tstamp 53ADA93F)) + (segment (start 136 160.5) (end 136.6 159.9) (width 0.2) (layer 4_bot) (net 41) (tstamp 53ADA93D)) + (segment (start 136 163) (end 136 160.5) (width 0.2) (layer 4_bot) (net 41) (tstamp 53ADA93C)) + (segment (start 135.4 163.6) (end 136 163) (width 0.2) (layer 4_bot) (net 41) (tstamp 53ADA938)) + (segment (start 132.75 163.6) (end 123.4 163.6) (width 0.2) (layer 4_bot) (net 42) (status 10)) + (segment (start 100.2 138) (end 100.2 137) (width 0.2) (layer 4_bot) (net 42) (tstamp 53ADAA39) (status 20)) + (segment (start 102.6 140.4) (end 100.2 138) (width 0.2) (layer 4_bot) (net 42) (tstamp 53ADAA37)) + (segment (start 102.6 142.8) (end 102.6 140.4) (width 0.2) (layer 4_bot) (net 42) (tstamp 53ADAA35)) + (segment (start 123.4 163.6) (end 102.6 142.8) (width 0.2) (layer 4_bot) (net 42) (tstamp 53ADAA32)) + (segment (start 121.8 153.8) (end 117.7 149.7) (width 0.2) (layer 1_top) (net 43)) + (segment (start 165.41 158.21) (end 159.2 152) (width 0.2) (layer 4_bot) (net 43) (tstamp 53ADAB6D)) + (segment (start 134 152) (end 159.2 152) (width 0.2) (layer 4_bot) (net 43) (tstamp 53ADBDAC)) + (segment (start 133 151) (end 134 152) (width 0.2) (layer 4_bot) (net 43) (tstamp 53ADBDAB)) + (via (at 133 151) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 43)) + (segment (start 129.4 154.6) (end 133 151) (width 0.2) (layer 1_top) (net 43) (tstamp 53ADBDA4)) + (segment (start 127.6 154.6) (end 129.4 154.6) (width 0.2) (layer 1_top) (net 43) (tstamp 53ADBDA2)) + (segment (start 165.41 162.315) (end 165.41 158.21) (width 0.2) (layer 4_bot) (net 43) (status 10)) + (segment (start 121.8 155.4) (end 122.8 156.4) (width 0.2) (layer 1_top) (net 43) (tstamp 53F39021)) + (segment (start 122.8 156.4) (end 124.6 156.4) (width 0.2) (layer 1_top) (net 43) (tstamp 53F39023)) + (segment (start 124.6 156.4) (end 125.2 155.8) (width 0.2) (layer 1_top) (net 43) (tstamp 53F39025)) + (segment (start 125.2 155.8) (end 126.4 155.8) (width 0.2) (layer 1_top) (net 43) (tstamp 53F39026)) + (segment (start 126.4 155.8) (end 127.6 154.6) (width 0.2) (layer 1_top) (net 43) (tstamp 53F39027)) + (segment (start 121.8 153.8) (end 121.8 155.4) (width 0.2) (layer 1_top) (net 43)) + (segment (start 117.2 148.2) (end 116.8 148.2) (width 0.2) (layer 4_bot) (net 43) (tstamp 53F39E34)) + (segment (start 117.7 148.7) (end 117.2 148.2) (width 0.2) (layer 4_bot) (net 43) (tstamp 53F39E33)) + (via (at 117.7 148.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 43)) + (segment (start 117.7 149.7) (end 117.7 148.7) (width 0.2) (layer 1_top) (net 43) (tstamp 53F39E31)) + (segment (start 103.2 134.6) (end 101.8 134.6) (width 0.2) (layer 4_bot) (net 43) (status 20)) + (segment (start 103.2 134.6) (end 116.8 148.2) (width 0.2) (layer 4_bot) (net 43)) + (segment (start 75.9 110.8) (end 102.8 110.8) (width 0.2) (layer 1_top) (net 44)) + (segment (start 129.2 133.3) (end 129.2 152.6) (width 0.2) (layer 1_top) (net 44)) + (segment (start 102.8 110.8) (end 120.9 128.9) (width 0.2) (layer 1_top) (net 44)) + (segment (start 120.9 128.9) (end 124.8 128.9) (width 0.2) (layer 1_top) (net 44)) + (segment (start 124.8 128.9) (end 129.2 133.3) (width 0.2) (layer 1_top) (net 44)) + (segment (start 129.2 152.6) (end 128.4 153.4) (width 0.2) (layer 1_top) (net 44)) + (segment (start 126.23 153.41) (end 126.24 153.4) (width 0.2) (layer 4_bot) (net 44) (status 30)) + (segment (start 75.875 110.825) (end 75.9 110.8) (width 0.2) (layer 4_bot) (net 44) (tstamp 53BC71D9)) + (via (at 75.9 110.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 44)) + (segment (start 75.875 110.825) (end 75.875 111.725) (width 0.2) (layer 4_bot) (net 44) (status 20)) + (via (at 128.4 153.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 44)) + (segment (start 126.24 153.4) (end 128.4 153.4) (width 0.2) (layer 4_bot) (net 44) (tstamp 53F39D26) (status 10)) + (segment (start 66.8 116.4) (end 64.1 116.4) (width 0.2) (layer 4_bot) (net 45) (status 20)) + (segment (start 123.8 135.4) (end 104.8 116.4) (width 0.2) (layer 1_top) (net 45) (tstamp 53ADB89C)) + (segment (start 104.8 116.4) (end 66.8 116.4) (width 0.2) (layer 1_top) (net 45)) + (segment (start 126.025 143.25) (end 123.85 143.25) (width 0.2) (layer 4_bot) (net 45) (status 10)) + (via (at 123.8 143.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 45)) + (segment (start 123.85 143.25) (end 123.8 143.2) (width 0.2) (layer 4_bot) (net 45) (tstamp 53ADB7D9)) + (segment (start 123.8 143.2) (end 123.8 135.4) (width 0.2) (layer 1_top) (net 45)) + (via (at 66.8 116.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 45)) + (segment (start 64.1 116.4) (end 64.075 116.375) (width 0.2) (layer 4_bot) (net 45) (tstamp 53BC7193) (status 30)) + (segment (start 126.23 145.79) (end 124.11 145.79) (width 0.2) (layer 4_bot) (net 46) (status 10)) + (segment (start 64.1 114.4) (end 64.075 114.375) (width 0.2) (layer 4_bot) (net 46) (tstamp 53BC7190) (status 30)) + (segment (start 124.6 145.3) (end 124.6 135.3) (width 0.2) (layer 1_top) (net 46) (tstamp 53ADB7CE)) + (via (at 66.8 114.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 46)) + (segment (start 66.8 114.4) (end 103.7 114.4) (width 0.2) (layer 1_top) (net 46)) + (segment (start 124.6 135.3) (end 103.7 114.4) (width 0.2) (layer 1_top) (net 46) (tstamp 53ADB8A5)) + (segment (start 66.8 114.4) (end 64.1 114.4) (width 0.2) (layer 4_bot) (net 46) (status 20)) + (segment (start 124.1 145.8) (end 124.6 145.3) (width 0.2) (layer 1_top) (net 46) (tstamp 53F39E8B)) + (via (at 124.1 145.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 46)) + (segment (start 124.11 145.79) (end 124.1 145.8) (width 0.2) (layer 4_bot) (net 46) (tstamp 53F39E89)) + (segment (start 126.23 148.33) (end 126.2 148.3) (width 0.2) (layer 4_bot) (net 47) (status 30)) + (segment (start 124 148.3) (end 123 147.3) (width 0.2) (layer 1_top) (net 47) (tstamp 53F39E41)) + (via (at 124 148.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 47)) + (segment (start 126.2 148.3) (end 124 148.3) (width 0.2) (layer 4_bot) (net 47) (tstamp 53F39E3F) (status 10)) + (segment (start 66.8 118.4) (end 64.1 118.4) (width 0.2) (layer 4_bot) (net 47) (status 20)) + (segment (start 123 135.5) (end 105.9 118.4) (width 0.2) (layer 1_top) (net 47) (tstamp 53ADB482)) + (segment (start 105.9 118.4) (end 66.8 118.4) (width 0.2) (layer 1_top) (net 47)) + (segment (start 123 147.3) (end 123 135.5) (width 0.2) (layer 1_top) (net 47) (tstamp 53F39E44)) + (via (at 66.8 118.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 47)) + (segment (start 64.1 118.4) (end 64.075 118.375) (width 0.2) (layer 4_bot) (net 47) (tstamp 53BC7197) (status 30)) + (segment (start 120.77 150.87) (end 122.83 150.87) (width 0.2) (layer 4_bot) (net 48) (status 10)) + (segment (start 64.1 119.4) (end 64.075 119.375) (width 0.2) (layer 4_bot) (net 48) (tstamp 53BC719A) (status 30)) + (via (at 66.8 119.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 48)) + (segment (start 122.2 150.1) (end 122.2 135.6) (width 0.2) (layer 1_top) (net 48)) + (segment (start 106 119.4) (end 66.8 119.4) (width 0.2) (layer 1_top) (net 48)) + (segment (start 122.2 135.6) (end 106 119.4) (width 0.2) (layer 1_top) (net 48) (tstamp 53ADB882)) + (segment (start 66.8 119.4) (end 64.1 119.4) (width 0.2) (layer 4_bot) (net 48) (status 20)) + (segment (start 122.9 150.8) (end 122.2 150.1) (width 0.2) (layer 1_top) (net 48) (tstamp 53F39D37)) + (via (at 122.9 150.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 48)) + (segment (start 122.83 150.87) (end 122.9 150.8) (width 0.2) (layer 4_bot) (net 48) (tstamp 53F39D35)) + (segment (start 126.23 150.87) (end 128.33 150.87) (width 0.2) (layer 4_bot) (net 49) (status 10)) + (segment (start 128.4 150.8) (end 126.2 148.6) (width 0.2) (layer 1_top) (net 49) (tstamp 53F39E7C)) + (via (at 128.4 150.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 49)) + (segment (start 128.33 150.87) (end 128.4 150.8) (width 0.2) (layer 4_bot) (net 49) (tstamp 53F39E7A)) + (segment (start 124.5 129.5) (end 126.2 131.2) (width 0.2) (layer 1_top) (net 49)) + (segment (start 66.8 112.4) (end 64.1 112.4) (width 0.2) (layer 4_bot) (net 49) (status 20)) + (via (at 66.8 112.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 49)) + (segment (start 120.6 129.5) (end 103.5 112.4) (width 0.2) (layer 1_top) (net 49) (tstamp 53F39D98)) + (segment (start 66.8 112.4) (end 103.5 112.4) (width 0.2) (layer 1_top) (net 49)) + (segment (start 64.075 112.375) (end 64.1 112.4) (width 0.2) (layer 4_bot) (net 49) (tstamp 53BC718A) (status 30)) + (segment (start 124.5 129.5) (end 120.6 129.5) (width 0.2) (layer 1_top) (net 49) (tstamp 53F39D95)) + (segment (start 126.2 131.2) (end 126.2 148.6) (width 0.2) (layer 1_top) (net 49) (tstamp 53F39DA0)) + (segment (start 125.4 151) (end 125.4 131.3) (width 0.2) (layer 1_top) (net 50)) + (segment (start 124.2 130.1) (end 120.3 130.1) (width 0.2) (layer 1_top) (net 50) (tstamp 53F39DA5)) + (segment (start 125.4 131.3) (end 124.2 130.1) (width 0.2) (layer 1_top) (net 50) (tstamp 53F39DA3)) + (segment (start 123.5 152.9) (end 122.4 152.9) (width 0.2) (layer 4_bot) (net 50)) + (segment (start 64.075 113.375) (end 64.1 113.4) (width 0.2) (layer 4_bot) (net 50) (tstamp 53BC718D) (status 30)) + (segment (start 66.8 113.4) (end 103.6 113.4) (width 0.2) (layer 1_top) (net 50)) + (segment (start 120.3 130.1) (end 103.6 113.4) (width 0.2) (layer 1_top) (net 50) (tstamp 53F39DA8)) + (via (at 66.8 113.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 50)) + (segment (start 66.8 113.4) (end 64.1 113.4) (width 0.2) (layer 4_bot) (net 50) (status 20)) + (via (at 123.5 152.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 50)) + (segment (start 123.5 152.9) (end 125.4 151) (width 0.2) (layer 1_top) (net 50) (tstamp 53F39031)) + (segment (start 121.89 153.41) (end 120.77 153.41) (width 0.2) (layer 4_bot) (net 50) (tstamp 53F39D2F) (status 30)) + (segment (start 122.4 152.9) (end 121.89 153.41) (width 0.2) (layer 4_bot) (net 50) (tstamp 53F39D2D) (status 20)) + (segment (start 120.975 153.41) (end 122.09 153.41) (width 0.2) (layer 4_bot) (net 50) (status 30)) + (segment (start 98.2 128.6) (end 98.2 126.6) (width 0.2) (layer 4_bot) (net 51) (status 10)) + (segment (start 100.2 124.6) (end 130.4 124.6) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AB3CC3)) + (segment (start 98.2 126.6) (end 100.2 124.6) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AB3CB8)) + (segment (start 154.8 128.6) (end 139.6 128.6) (width 0.2) (layer 4_bot) (net 51)) + (segment (start 135.4 129.6) (end 130.4 124.6) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AB3B14)) + (segment (start 138.6 129.6) (end 135.4 129.6) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AB3B12)) + (segment (start 139.6 128.6) (end 138.6 129.6) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AB3B10)) + (segment (start 162.604 129.75) (end 155.95 129.75) (width 0.2) (layer 4_bot) (net 51) (status 10)) + (segment (start 155.95 129.75) (end 154.8 128.6) (width 0.2) (layer 4_bot) (net 51) (tstamp 53AB3846)) + (segment (start 101.8 134.2) (end 103.4 134.2) (width 0.2) (layer 4_bot) (net 52) (status 10)) + (segment (start 134.45 153.65) (end 151.106 153.65) (width 0.2) (layer 4_bot) (net 52) (tstamp 53ADA641) (status 20)) + (segment (start 128.2 147.4) (end 134.45 153.65) (width 0.2) (layer 4_bot) (net 52) (tstamp 53ADA63F)) + (segment (start 116.6 147.4) (end 128.2 147.4) (width 0.2) (layer 4_bot) (net 52) (tstamp 53ADA63C)) + (segment (start 103.4 134.2) (end 116.6 147.4) (width 0.2) (layer 4_bot) (net 52) (tstamp 53ADA636)) + (segment (start 100.3 123.9) (end 141.344 123.9) (width 0.2) (layer 4_bot) (net 53)) + (segment (start 141.344 123.9) (end 143.894 121.35) (width 0.2) (layer 4_bot) (net 53) (tstamp 53ADFA7C) (status 20)) + (segment (start 97.8 128.6) (end 97.8 126.4) (width 0.2) (layer 4_bot) (net 53) (status 10)) + (segment (start 97.8 126.4) (end 100.3 123.9) (width 0.2) (layer 4_bot) (net 53) (tstamp 53AB4BE6)) + (segment (start 98.6 128.6) (end 98.6 126.8) (width 0.2) (layer 4_bot) (net 54) (status 10)) + (segment (start 130.1 125.3) (end 100.1 125.3) (width 0.2) (layer 4_bot) (net 54) (tstamp 53AB3AFB)) + (segment (start 135 130.2) (end 130.1 125.3) (width 0.2) (layer 4_bot) (net 54) (tstamp 53AB3AF9)) + (segment (start 139 130.2) (end 135 130.2) (width 0.2) (layer 4_bot) (net 54) (tstamp 53AB3AF6)) + (segment (start 140 129.2) (end 139 130.2) (width 0.2) (layer 4_bot) (net 54) (tstamp 53AB3AF4)) + (segment (start 152.296 129.2) (end 140 129.2) (width 0.2) (layer 4_bot) (net 54) (tstamp 53AB3B47)) + (segment (start 152.296 129.2) (end 154.048 130.952) (width 0.2) (layer 4_bot) (net 54) (status 20)) + (segment (start 98.6 126.8) (end 100.1 125.3) (width 0.2) (layer 4_bot) (net 54) (tstamp 53AB3C61)) + (segment (start 99 128.6) (end 99 127) (width 0.2) (layer 4_bot) (net 55) (status 10)) + (segment (start 134.752 130.952) (end 129.8 126) (width 0.2) (layer 4_bot) (net 55) (tstamp 53AB3ADB)) + (segment (start 129.8 126) (end 100 126) (width 0.2) (layer 4_bot) (net 55) (tstamp 53AB3ADE)) + (segment (start 134.752 130.952) (end 140.952 130.952) (width 0.2) (layer 4_bot) (net 55) (status 20)) + (segment (start 99 127) (end 100 126) (width 0.2) (layer 4_bot) (net 55) (tstamp 53AB3C5B)) + (segment (start 111.6 130.2) (end 117 130.2) (width 0.2) (layer 4_bot) (net 56)) + (segment (start 128.3 129.5) (end 134.7 135.9) (width 0.2) (layer 4_bot) (net 56) (tstamp 53F39D61)) + (segment (start 117.7 129.5) (end 128.3 129.5) (width 0.2) (layer 4_bot) (net 56) (tstamp 53F39D5E)) + (segment (start 117 130.2) (end 117.7 129.5) (width 0.2) (layer 4_bot) (net 56) (tstamp 53F39D5C)) + (segment (start 148.61 138.61) (end 145.9 135.9) (width 0.2) (layer 4_bot) (net 56) (status 10)) + (segment (start 145.9 135.9) (end 134.7 135.9) (width 0.2) (layer 4_bot) (net 56) (tstamp 53AB6448)) + (segment (start 99.398002 128.6) (end 99.4 128.6) (width 0.2) (layer 4_bot) (net 56) (tstamp 53AB645D) (status 30)) + (segment (start 99.398002 127.2) (end 99.398002 128.6) (width 0.2) (layer 4_bot) (net 56) (tstamp 53AB645C) (status 20)) + (segment (start 100 126.598002) (end 99.398002 127.2) (width 0.2) (layer 4_bot) (net 56) (tstamp 53AB6459)) + (segment (start 107.998002 126.598002) (end 100 126.598002) (width 0.2) (layer 4_bot) (net 56) (tstamp 53AB6452)) + (segment (start 111.6 130.2) (end 107.998002 126.598002) (width 0.2) (layer 4_bot) (net 56) (tstamp 53F39D5A)) + (segment (start 101.8 133) (end 104 133) (width 0.2) (layer 4_bot) (net 57) (status 10)) + (segment (start 131.396 144.25) (end 132.396 145.25) (width 0.2) (layer 4_bot) (net 57) (tstamp 53ACD18C) (status 20)) + (segment (start 115.25 144.25) (end 131.396 144.25) (width 0.2) (layer 4_bot) (net 57) (tstamp 53ACD188)) + (segment (start 104 133) (end 115.25 144.25) (width 0.2) (layer 4_bot) (net 57) (tstamp 53ACD183)) + (segment (start 101.8 132.998002) (end 101.8 133) (width 0.2) (layer 4_bot) (net 57) (tstamp 53AB7833) (status 30)) + (segment (start 101.8 133.001998) (end 101.8 133) (width 0.2) (layer 4_bot) (net 57) (tstamp 53AB195A) (status 30)) + (segment (start 135.1 134.3) (end 128.9 128.1) (width 0.2) (layer 4_bot) (net 58)) + (segment (start 111.5 128.1) (end 111 128.6) (width 0.2) (layer 4_bot) (net 58) (tstamp 53F39D55)) + (segment (start 128.9 128.1) (end 111.5 128.1) (width 0.2) (layer 4_bot) (net 58) (tstamp 53F39D54)) + (segment (start 164 136.6) (end 165.57 138.17) (width 0.2) (layer 4_bot) (net 58)) + (segment (start 94.6 128.6) (end 111 128.6) (width 0.2) (layer 1_top) (net 58) (tstamp 53ADE4DE)) + (segment (start 93.4 128.2) (end 94.2 128.2) (width 0.2) (layer 1_top) (net 58)) + (segment (start 94.2 128.2) (end 94.6 128.6) (width 0.2) (layer 1_top) (net 58) (tstamp 53ADE4DA)) + (via (at 111 128.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 58)) + (via (at 93.4 128.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 58)) + (segment (start 147.5 134.3) (end 135.1 134.3) (width 0.2) (layer 4_bot) (net 58) (tstamp 53AB6CF0)) + (segment (start 149.8 136.6) (end 147.5 134.3) (width 0.2) (layer 4_bot) (net 58) (tstamp 53ADE82D)) + (segment (start 149.8 136.6) (end 164 136.6) (width 0.2) (layer 4_bot) (net 58)) + (segment (start 165.57 138.17) (end 169.235 138.17) (width 0.2) (layer 4_bot) (net 58) (tstamp 53ADE854) (status 20)) + (segment (start 94.6 128.6) (end 93.8 128.6) (width 0.2) (layer 4_bot) (net 58) (status 10)) + (segment (start 92.85 128.75) (end 85.3 128.75) (width 0.2) (layer 4_bot) (net 58) (tstamp 53ADE30E) (status 20)) + (segment (start 93.4 128.2) (end 92.85 128.75) (width 0.2) (layer 4_bot) (net 58) (tstamp 53ADE30D)) + (segment (start 93.8 128.6) (end 93.4 128.2) (width 0.2) (layer 4_bot) (net 58) (tstamp 53ADE2FE)) + (segment (start 135.298002 133.498002) (end 129.2 127.4) (width 0.2) (layer 4_bot) (net 59)) + (segment (start 110.6 127.4) (end 110.2 127.8) (width 0.2) (layer 4_bot) (net 59) (tstamp 53F39D52)) + (segment (start 129.2 127.4) (end 110.6 127.4) (width 0.2) (layer 4_bot) (net 59) (tstamp 53F39D51)) + (segment (start 169.235 135.63) (end 169.065 135.8) (width 0.2) (layer 4_bot) (net 59) (status 30)) + (segment (start 95 127.8) (end 94.6 127.4) (width 0.2) (layer 1_top) (net 59) (tstamp 53ADE371)) + (segment (start 94.6 127.4) (end 92.8 127.4) (width 0.2) (layer 1_top) (net 59) (tstamp 53ADE375)) + (via (at 92.8 127.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 59)) + (via (at 110.2 127.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 59)) + (segment (start 147.698002 133.498002) (end 135.298002 133.498002) (width 0.2) (layer 4_bot) (net 59) (tstamp 53AB681E)) + (segment (start 150 135.8) (end 147.698002 133.498002) (width 0.2) (layer 4_bot) (net 59) (tstamp 53AB681A)) + (segment (start 110.2 127.8) (end 95 127.8) (width 0.2) (layer 1_top) (net 59)) + (segment (start 169.065 135.8) (end 150 135.8) (width 0.2) (layer 4_bot) (net 59) (tstamp 53B2FB54) (status 10)) + (segment (start 95 128.6) (end 95 127.6) (width 0.2) (layer 4_bot) (net 59) (status 10)) + (segment (start 91.95 128.25) (end 85.3 128.25) (width 0.2) (layer 4_bot) (net 59) (tstamp 53ADE33D) (status 20)) + (segment (start 92.8 127.4) (end 91.95 128.25) (width 0.2) (layer 4_bot) (net 59) (tstamp 53ADE33C)) + (segment (start 94.8 127.4) (end 92.8 127.4) (width 0.2) (layer 4_bot) (net 59) (tstamp 53ADE331)) + (segment (start 95 127.6) (end 94.8 127.4) (width 0.2) (layer 4_bot) (net 59) (tstamp 53ADE32C)) + (segment (start 134.9 135.1) (end 128.6 128.8) (width 0.2) (layer 4_bot) (net 60)) + (segment (start 112.4 128.8) (end 111.8 129.4) (width 0.2) (layer 4_bot) (net 60) (tstamp 53F39D58)) + (segment (start 128.6 128.8) (end 112.4 128.8) (width 0.2) (layer 4_bot) (net 60) (tstamp 53F39D57)) + (segment (start 93.4 129.2) (end 94 129.2) (width 0.2) (layer 1_top) (net 60)) + (segment (start 166.71 140.71) (end 163.4 137.4) (width 0.2) (layer 4_bot) (net 60) (tstamp 53AB6CFA)) + (segment (start 163.4 137.4) (end 149.6 137.4) (width 0.2) (layer 4_bot) (net 60) (tstamp 53AB6CFC)) + (segment (start 149.6 137.4) (end 147.3 135.1) (width 0.2) (layer 4_bot) (net 60) (tstamp 53AB6CFE)) + (segment (start 147.3 135.1) (end 134.9 135.1) (width 0.2) (layer 4_bot) (net 60) (tstamp 53AB6D00)) + (via (at 111.8 129.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 60)) + (segment (start 166.71 140.71) (end 169.235 140.71) (width 0.2) (layer 4_bot) (net 60) (status 20)) + (via (at 93.4 129.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 60)) + (segment (start 94.2 129.4) (end 111.8 129.4) (width 0.2) (layer 1_top) (net 60) (tstamp 53ADE2E9)) + (segment (start 94 129.2) (end 94.2 129.4) (width 0.2) (layer 1_top) (net 60) (tstamp 53ADE2E5)) + (segment (start 93.4 129.8) (end 93.4 129.2) (width 0.2) (layer 4_bot) (net 60) (status 10)) + (segment (start 92.75 129.25) (end 85.3 129.25) (width 0.2) (layer 4_bot) (net 60) (tstamp 53ADE2DA) (status 20)) + (segment (start 92.8 129.2) (end 92.75 129.25) (width 0.2) (layer 4_bot) (net 60) (tstamp 53ADE2D9)) + (segment (start 93.4 129.2) (end 92.8 129.2) (width 0.2) (layer 4_bot) (net 60) (tstamp 53ADE2D8)) + (segment (start 135.5 132.7) (end 129.5 126.7) (width 0.2) (layer 4_bot) (net 61)) + (segment (start 110.3 126.7) (end 110 127) (width 0.2) (layer 4_bot) (net 61) (tstamp 53F39D4D)) + (segment (start 129.5 126.7) (end 110.3 126.7) (width 0.2) (layer 4_bot) (net 61) (tstamp 53F39D4C)) + (segment (start 93.4 126.6) (end 95 126.6) (width 0.2) (layer 1_top) (net 61)) + (segment (start 152.69 133.09) (end 152.3 132.7) (width 0.2) (layer 4_bot) (net 61) (tstamp 53AB67FE)) + (segment (start 152.3 132.7) (end 135.5 132.7) (width 0.2) (layer 4_bot) (net 61) (tstamp 53AB6803)) + (segment (start 110 127) (end 109.4 127) (width 0.2) (layer 4_bot) (net 61) (tstamp 53F39D4F)) + (via (at 109.4 127) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 61)) + (segment (start 152.69 133.09) (end 169.235 133.09) (width 0.2) (layer 4_bot) (net 61) (status 20)) + (via (at 93.4 126.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 61)) + (segment (start 97.6 127) (end 109.4 127) (width 0.2) (layer 1_top) (net 61) (tstamp 53ADE393)) + (segment (start 97.4 127.2) (end 97.6 127) (width 0.2) (layer 1_top) (net 61) (tstamp 53ADE391)) + (segment (start 95.6 127.2) (end 97.4 127.2) (width 0.2) (layer 1_top) (net 61) (tstamp 53ADE38E)) + (segment (start 95 126.6) (end 95.6 127.2) (width 0.2) (layer 1_top) (net 61) (tstamp 53ADE38C)) + (segment (start 95.4 128.6) (end 95.4 127.4) (width 0.2) (layer 4_bot) (net 61) (status 10)) + (segment (start 91.45 127.75) (end 85.3 127.75) (width 0.2) (layer 4_bot) (net 61) (tstamp 53ADE354) (status 20)) + (segment (start 92.6 126.6) (end 91.45 127.75) (width 0.2) (layer 4_bot) (net 61) (tstamp 53ADE352)) + (segment (start 93.4 126.6) (end 92.6 126.6) (width 0.2) (layer 4_bot) (net 61) (tstamp 53ADE351)) + (segment (start 94.6 126.6) (end 93.4 126.6) (width 0.2) (layer 4_bot) (net 61) (tstamp 53ADE34A)) + (segment (start 95.4 127.4) (end 94.6 126.6) (width 0.2) (layer 4_bot) (net 61) (tstamp 53ADE347)) + (segment (start 174.49 155.95) (end 174.29916 156.14084) (width 0.4) (layer 4_bot) (net 62) (status 30)) + (segment (start 174.29916 156.14084) (end 174.29916 159) (width 0.4) (layer 4_bot) (net 62) (tstamp 53F39CF6) (status 30)) + (segment (start 172.4 166.4) (end 172.4 163) (width 0.4) (layer 4_bot) (net 62)) + (segment (start 172.4 163) (end 174.29916 161.10084) (width 0.4) (layer 4_bot) (net 62) (tstamp 53B2EF70)) + (segment (start 111.65 160) (end 113.8 160) (width 0.4) (layer 4_bot) (net 62) (status 10)) + (segment (start 113.8 160) (end 125.05 171.25) (width 0.4) (layer 4_bot) (net 62) (tstamp 53AE5889)) + (segment (start 174.29916 159) (end 174.29916 161.10084) (width 0.4) (layer 4_bot) (net 62) (status 10)) + (segment (start 172.4 166.4) (end 167.55 171.25) (width 0.4) (layer 4_bot) (net 62) (tstamp 53B2EF6D)) + (segment (start 167.55 171.25) (end 125.05 171.25) (width 0.4) (layer 4_bot) (net 62) (tstamp 53AE1D44)) + (segment (start 174.285 158.98584) (end 174.29916 159) (width 0.4) (layer 4_bot) (net 62) (tstamp 53AE1D3A) (status 30)) + (segment (start 86 101.25) (end 89 101.25) (width 0.4) (layer 4_bot) (net 63)) + (segment (start 83 101.25) (end 86 101.25) (width 0.4) (layer 4_bot) (net 63)) + (via (at 86 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 110 101.25) (end 113 101.25) (width 0.4) (layer 4_bot) (net 63)) + (segment (start 107 101.25) (end 110 101.25) (width 0.4) (layer 4_bot) (net 63)) + (via (at 110 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 120.77 155.95) (end 120.77 156.98) (width 0.4) (layer 4_bot) (net 63)) + (via (at 120.75 157) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 120.77 156.98) (end 120.75 157) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39EAE)) + (segment (start 120.77 155.95) (end 118.6 155.95) (width 0.4) (layer 4_bot) (net 63)) + (via (at 118.6 155.95) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 120.77 155.95) (end 120.77 154.92) (width 0.4) (layer 4_bot) (net 63)) + (via (at 120.75 154.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 120.77 154.92) (end 120.75 154.9) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39EA6)) + (segment (start 120.77 143.25) (end 118.6 143.25) (width 0.4) (layer 4_bot) (net 63)) + (via (at 118.6 143.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 174.49 140.71) (end 174.49 141.79) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 174.5 141.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 174.49 141.79) (end 174.5 141.8) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CF1)) + (segment (start 174.49 140.71) (end 176.69 140.71) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 176.7 140.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 176.69 140.71) (end 176.7 140.7) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CED)) + (segment (start 174.49 140.71) (end 172.31 140.71) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 172.3 140.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172.31 140.71) (end 172.3 140.7) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CE9)) + (segment (start 174.49 138.17) (end 174.49 139.39) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 174.5 140.7) (end 174.49 140.71) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CE8) (status 30)) + (segment (start 174.5 139.4) (end 174.5 140.7) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CE6) (status 20)) + (via (at 174.5 139.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 174.49 139.39) (end 174.5 139.4) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CE4)) + (segment (start 174.49 138.17) (end 174.49 137.11) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 174.5 137.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 174.49 137.11) (end 174.5 137.1) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CE0)) + (segment (start 174.49 138.17) (end 176.67 138.17) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 176.7 138.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 176.67 138.17) (end 176.7 138.2) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CDC)) + (segment (start 174.49 138.17) (end 172.33 138.17) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 172.3 138.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172.33 138.17) (end 172.3 138.2) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CD8)) + (segment (start 174.49 133.09) (end 174.49 134.19) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 174.5 134.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 174.49 134.19) (end 174.5 134.2) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CCF)) + (segment (start 174.49 133.09) (end 176.69 133.09) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 176.7 133.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 176.69 133.09) (end 176.7 133.1) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CCB)) + (segment (start 174.49 133.09) (end 174.49 132.01) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 174.5 132) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 174.49 132.01) (end 174.5 132) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39CC7)) + (segment (start 147.63 167.57) (end 146.53 167.57) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 146.5 167.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 146.53 167.57) (end 146.5 167.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39C60)) + (segment (start 147.63 167.57) (end 147.63 165.43) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 147.6 165.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 147.63 165.43) (end 147.6 165.4) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39C58)) + (segment (start 147.63 167.57) (end 148.67 167.57) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 148.7 167.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 148.67 167.57) (end 148.7 167.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39C54)) + (segment (start 165.41 167.57) (end 165.41 169.79) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 165.4 169.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 165.41 169.79) (end 165.4 169.8) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39C4E)) + (segment (start 165.41 167.57) (end 166.47 167.57) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 166.5 167.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 166.47 167.57) (end 166.5 167.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39C4A)) + (segment (start 165.41 167.57) (end 164.33 167.57) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 164.3 167.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 164.33 167.57) (end 164.3 167.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39C46)) + (segment (start 157.79 167.57) (end 156.73 167.57) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 156.7 167.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 156.73 167.57) (end 156.7 167.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39C42)) + (segment (start 157.79 167.57) (end 158.87 167.57) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 158.9 167.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 158.87 167.57) (end 158.9 167.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39C3E)) + (segment (start 157.79 167.57) (end 157.79 165.41) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 157.8 165.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 157.79 165.41) (end 157.8 165.4) (width 0.4) (layer 4_bot) (net 63) (tstamp 53F39C3A)) + (segment (start 94.6 149.1001) (end 94.6 150.1) (width 0.2) (layer 4_bot) (net 63) (status 10)) + (via (at 94.6 150.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 92.75062 149.34996) (end 92.75062 150.19938) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 92.75 150.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 92.75062 150.19938) (end 92.75 150.2) (width 0.4) (layer 4_bot) (net 63) (tstamp 53C5B94F)) + (segment (start 92.75062 149.34996) (end 91.70004 149.34996) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 91.7 149.35) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 91.70004 149.34996) (end 91.7 149.35) (width 0.4) (layer 4_bot) (net 63) (tstamp 53C5B94B)) + (segment (start 92.75062 149.34996) (end 92.75062 148.50062) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 92.75 148.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 92.75062 148.50062) (end 92.75 148.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53C5B947)) + (segment (start 75.825 119.325) (end 75.9 119.4) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 75.9 120.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 75.9 119.4) (end 75.9 120.4) (width 0.4) (layer 4_bot) (net 63) (tstamp 53BC7205) (status 10)) + (segment (start 75.875 118.075) (end 75.9 118.05) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 75.9 117.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 75.9 118.05) (end 75.9 117.3) (width 0.4) (layer 4_bot) (net 63) (tstamp 53BC71FD) (status 10)) + (segment (start 75.825 108.575) (end 75.9 108.65) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 75.9 109.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 75.9 108.65) (end 75.9 109.7) (width 0.4) (layer 4_bot) (net 63) (tstamp 53BC71ED) (status 10)) + (segment (start 75.825 108.575) (end 75.8 108.6) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 75 108.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 75.8 108.6) (end 75 108.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53BC71E2) (status 10)) + (segment (start 62.575 117.875) (end 62.6 117.85) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 62.6 117.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 62.6 117.85) (end 62.6 117.1) (width 0.4) (layer 4_bot) (net 63) (tstamp 53BC7159) (status 10)) + (segment (start 64.075 117.375) (end 64.1 117.4) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 65 117.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 64.1 117.4) (end 65 117.4) (width 0.4) (layer 4_bot) (net 63) (tstamp 53BC713A) (status 10)) + (segment (start 62.575 117.875) (end 62.6 117.9) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 62.6 118.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 62.6 117.9) (end 62.6 118.7) (width 0.4) (layer 4_bot) (net 63) (tstamp 53BC7138) (status 10)) + (segment (start 62.575 113.875) (end 62.6 113.85) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 62.6 113.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 62.6 113.85) (end 62.6 113.1) (width 0.4) (layer 4_bot) (net 63) (tstamp 53BC7136) (status 10)) + (segment (start 87.8 147.2001) (end 88.8999 147.2001) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 88.9 147.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 88.8999 147.2001) (end 88.9 147.2) (width 0.4) (layer 4_bot) (net 63) (tstamp 53BC2152)) + (segment (start 69.25 122.25) (end 68.9 122.6) (width 0.4) (layer 4_bot) (net 63)) + (via (at 69.25 122.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 125.25) (end 69.25 122.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE519E)) + (via (at 69.25 125.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 128.25) (end 69.25 125.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE519B)) + (via (at 69.25 128.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 131.25) (end 69.25 128.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5192)) + (via (at 69.25 131.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 134.25) (end 69.25 131.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE518F)) + (via (at 62.7 122.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 65.7 122.6) (end 62.7 122.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B190FD)) + (via (at 65.7 122.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 68.9 122.6) (end 65.7 122.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B190FB)) + (via (at 89 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 83 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 107 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 113 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 113 101.25) (end 116 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5439)) + (via (at 116 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 116 101.25) (end 119 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE543C)) + (via (at 119 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 119 101.25) (end 122 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE543F)) + (via (at 122 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 122 101.25) (end 122 104.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5443)) + (via (at 122 104.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 122 104.25) (end 122 105.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5446)) + (segment (start 122 105.5) (end 123 106.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5447)) + (via (at 123 106.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 123 106.5) (end 124.5 108) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE544E)) + (segment (start 124.5 108) (end 126 108) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE544F)) + (via (at 126 108) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 126 108) (end 127.5 108) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE545D)) + (segment (start 127.5 108) (end 128.75 106.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE545E)) + (via (at 128.75 106.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 128.75 106.75) (end 130 105.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5466)) + (segment (start 130 105.5) (end 130 104.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5467)) + (via (at 130 104.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 130 104.25) (end 130 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE546D)) + (via (at 130 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 130 101.25) (end 133 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5471)) + (via (at 133 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 133 101.25) (end 136 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5476)) + (via (at 136 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 136 101.25) (end 139 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5479)) + (via (at 139 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 139 101.25) (end 142 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE547C)) + (via (at 142 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 142 101.25) (end 145 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE547F)) + (via (at 145 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 145 101.25) (end 148 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5482)) + (via (at 148 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 148 101.25) (end 151 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5486)) + (via (at 151 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 151 101.25) (end 154 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5489)) + (via (at 154 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 154 101.25) (end 157 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE548D)) + (via (at 157 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 157 101.25) (end 160 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5490)) + (via (at 160 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 160 101.25) (end 163 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5493)) + (via (at 163 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 163 101.25) (end 166 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5496)) + (via (at 166 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 166 101.25) (end 169 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5499)) + (via (at 169 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 169 101.25) (end 172 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE549C)) + (via (at 178.75 108) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 172 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172 104.25) (end 172 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B91)) + (via (at 172 104.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172 105.5) (end 172 104.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B8A)) + (segment (start 173.25 106.75) (end 172 105.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B89)) + (via (at 173.25 106.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 174.5 108) (end 173.25 106.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B83)) + (segment (start 175.75 108) (end 174.5 108) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B82)) + (via (at 175.75 108) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 108) (end 175.75 108) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B7A)) + (via (at 68 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 62.75 108) (end 61.25 109.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53E6)) + (via (at 61.25 109.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 61.25 109.5) (end 61.25 112.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53EE)) + (via (at 61.25 112.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 61.25 112.5) (end 61.25 115.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53F2)) + (via (at 61.25 115.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 61.25 115.5) (end 61.25 118.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53F5)) + (via (at 61.25 118.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 64 108) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 65.5 108) (end 64 108) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53C7)) + (segment (start 66.75 106.75) (end 65.5 108) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53C6)) + (via (at 66.75 106.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 68 105.5) (end 66.75 106.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53BC)) + (segment (start 68 104.25) (end 68 105.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53BB)) + (via (at 68 104.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 68 101.25) (end 68 104.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53B7)) + (segment (start 64 108) (end 62.75 108) (width 0.4) (layer 4_bot) (net 63)) + (segment (start 64 104) (end 66.75 101.25) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 66.75 101.25) (end 68 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE53A4)) + (segment (start 71 101.25) (end 68 101.25) (width 0.4) (layer 4_bot) (net 63)) + (segment (start 71 101.25) (end 74 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5403)) + (via (at 71 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 74 101.25) (end 77 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5407)) + (via (at 74 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 77 101.25) (end 80 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5411)) + (via (at 77 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 80 101.25) (end 83 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5414)) + (via (at 80 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 89 101.25) (end 92 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE541F)) + (segment (start 92 101.25) (end 95 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5423)) + (via (at 92 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 95 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 104 101.25) (end 107 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5430)) + (via (at 104 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 101 101.25) (end 104 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE542D)) + (via (at 101 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 98 101.25) (end 101 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5429)) + (via (at 98 101.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 95 101.25) (end 98 101.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5426)) + (segment (start 178.75 108) (end 178.75 111) (width 0.4) (layer 4_bot) (net 63)) + (via (at 178.75 114) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 111) (end 178.75 114) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B9D)) + (via (at 178.75 111) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 176 104) (end 178.75 106.75) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 178.75 106.75) (end 178.75 108) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B53)) + (segment (start 69.25 140.25) (end 69.25 137.5) (width 0.4) (layer 1_top) (net 63)) + (via (at 69.25 140.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 137.5) (end 69.25 134.25) (width 0.4) (layer 1_top) (net 63) (tstamp 53AE5681)) + (via (at 69.25 134.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 68 173.75) (end 68 170.75) (width 0.4) (layer 4_bot) (net 63)) + (via (at 68 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 61.5 158.5) (end 61.75 158.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE553E)) + (via (at 61.5 158.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 61.25 158.75) (end 61.5 158.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5535)) + (segment (start 61.25 161) (end 61.25 158.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5534)) + (via (at 61.25 161) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 61.25 164) (end 61.25 161) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5530)) + (via (at 61.25 164) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 61.25 167) (end 61.25 164) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE552C)) + (via (at 61.25 167) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 64.25 167) (end 61.25 167) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5529)) + (via (at 64.25 167) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 65.5 167) (end 64.25 167) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5526)) + (segment (start 66.75 168.25) (end 65.5 167) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5525)) + (via (at 66.75 168.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 68 169.5) (end 66.75 168.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5520)) + (segment (start 68 170.75) (end 68 169.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE551F)) + (via (at 68 170.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 64 171) (end 66.75 173.75) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 74 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 71 173.75) (end 74 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE54F3)) + (via (at 71 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 68 173.75) (end 71 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE54EF)) + (segment (start 66.75 173.75) (end 68 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE54E4)) + (via (at 69.25 137.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 137.5) (end 69.25 134.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE518B)) + (segment (start 69.25 143.25) (end 69.25 140.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4A06)) + (via (at 69.25 143.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 146.25) (end 69.25 143.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4A03)) + (via (at 69.25 146.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 149.25) (end 69.25 146.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE49F7)) + (via (at 69.25 149.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 152.25) (end 69.25 149.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE49F4)) + (via (at 69.25 152.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 155.25) (end 69.25 152.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE49EB)) + (via (at 69.25 155.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 69.25 158.25) (end 69.25 155.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE49E8)) + (via (at 69.25 158.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 66.75 158.25) (end 69.25 158.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE49E2)) + (via (at 66.75 158.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 63.75 158.25) (end 66.75 158.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE49DF)) + (via (at 63.75 158.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 61.75 158.25) (end 63.75 158.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE5541)) + (segment (start 79 173.75) (end 76 173.75) (width 0.4) (layer 4_bot) (net 63)) + (via (at 169 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 169 173.75) (end 166 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C07)) + (via (at 166 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 166 173.75) (end 163 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C0B)) + (via (at 163 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 163 173.75) (end 160 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C0E)) + (via (at 160 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 160 173.75) (end 157 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C12)) + (via (at 157 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 157 173.75) (end 154 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C15)) + (via (at 154 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 154 173.75) (end 151 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C18)) + (via (at 151 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 151 173.75) (end 148 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C1C)) + (via (at 148 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 148 173.75) (end 145 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C1F)) + (via (at 145 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 145 173.75) (end 142 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C29)) + (via (at 142 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 142 173.75) (end 139 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C2C)) + (via (at 139 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 139 173.75) (end 136 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C35)) + (via (at 136 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 136 173.75) (end 133 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C38)) + (via (at 133 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 133 173.75) (end 130 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C3B)) + (via (at 130 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 130 173.75) (end 127 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C43)) + (via (at 127 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 127 173.75) (end 124 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C47)) + (via (at 124 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 124 173.75) (end 121 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C4A)) + (via (at 121 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 121 173.75) (end 118 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C4E)) + (via (at 118 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 118 173.75) (end 115 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C52)) + (via (at 115 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 115 173.75) (end 112 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C56)) + (via (at 112 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 112 173.75) (end 109 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C59)) + (via (at 109 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 109 173.75) (end 106 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C5D)) + (via (at 106 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 106 173.75) (end 103 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C60)) + (via (at 103 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 103 173.75) (end 100 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C63)) + (via (at 100 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 100 173.75) (end 97 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C67)) + (via (at 97 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 97 173.75) (end 94 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C6B)) + (via (at 94 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 94 173.75) (end 91 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C6E)) + (via (at 91 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 91 173.75) (end 88 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C71)) + (via (at 88 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 88 173.75) (end 85 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C75)) + (via (at 85 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85 173.75) (end 82 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C78)) + (via (at 82 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82 173.75) (end 79 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4C7B)) + (via (at 79 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 172 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172 173.75) (end 169 173.75) (width 0.4) (layer 4_bot) (net 63)) + (via (at 76 173.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 176 171) (end 173.25 173.75) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 178.75 122) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 125) (end 178.75 122) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B31)) + (via (at 178.75 125) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 128) (end 178.75 125) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B2D)) + (via (at 178.75 128) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 131) (end 178.75 128) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B29)) + (via (at 178.75 131) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 134) (end 178.75 131) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B1E)) + (via (at 178.75 134) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 137) (end 178.75 134) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B1A)) + (via (at 178.75 137) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 140) (end 178.75 137) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B16)) + (via (at 178.75 140) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 143) (end 178.75 140) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B12)) + (via (at 178.75 143) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 146) (end 178.75 143) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B0E)) + (via (at 178.75 146) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 149) (end 178.75 146) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B0A)) + (via (at 178.75 149) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 152) (end 178.75 149) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4B04)) + (via (at 178.75 152) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 155) (end 178.75 152) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4AF5)) + (via (at 178.75 155) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 158) (end 178.75 155) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4AF0)) + (via (at 178.75 158) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 161) (end 178.75 158) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4ADF)) + (via (at 178.75 161) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 164) (end 178.75 161) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4ADB)) + (via (at 178.75 164) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 178.75 167) (end 178.75 164) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4AD7)) + (via (at 178.75 167) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 175.75 167) (end 178.75 167) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4AD3)) + (via (at 175.75 167) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 174.5 167) (end 175.75 167) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4ACA)) + (segment (start 173.25 168.25) (end 174.5 167) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4AC9)) + (via (at 173.25 168.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172 169.5) (end 173.25 168.25) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4ABB)) + (segment (start 172 170.75) (end 172 169.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4ABA)) + (via (at 172 170.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172 173.75) (end 172 170.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4AB5)) + (segment (start 173.25 173.75) (end 172 173.75) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4A9D)) + (segment (start 89.05042 132.6) (end 88.3 132.6) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 88.3 132.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 96.10084 121.3) (end 95 121.3) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 95 121.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 96.10084 121.3) (end 96.4 121.00084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 96.4 120.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 96.4 121.00084) (end 96.4 120.1) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30810) (status 10)) + (segment (start 96.10084 121.3) (end 96.4 121.59916) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 96.4 122.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 96.4 121.59916) (end 96.4 122.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B3080B) (status 10)) + (segment (start 97.2 124.75042) (end 97.25042 124.7) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 98 124.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 97.25042 124.7) (end 98 124.7) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B307F2) (status 10)) + (segment (start 97.2 124.75042) (end 97.2 124) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 97.2 124) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 96 124.75042) (end 96 124) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 96 124) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 89.10084 125.7) (end 88 125.7) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 88 125.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 89.10084 125.7) (end 89.4 125.99916) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 89.4 126.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 89.4 125.99916) (end 89.4 126.9) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30795) (status 10)) + (segment (start 89.10084 125.7) (end 89.4 125.40084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 89.4 124.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 89.4 125.40084) (end 89.4 124.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B3078F) (status 10)) + (segment (start 89.10084 140.7) (end 89.4 140.40084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 89.4 139.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 89.4 140.40084) (end 89.4 139.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B3074E) (status 10)) + (segment (start 89.10084 140.7) (end 88 140.7) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 88 140.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 89.10084 140.7) (end 89.4 140.99916) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 89.4 141.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 89.4 140.99916) (end 89.4 141.9) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30746) (status 10)) + (segment (start 101.4 148.69916) (end 101.4 149.7) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 101.4 149.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 101.4 148.69916) (end 101.69916 148.4) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 102.6 148.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 101.69916 148.4) (end 102.6 148.4) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30605) (status 10)) + (segment (start 98.49916 144.8) (end 98.99916 145.3) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 99.5 145.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 98.99916 145.3) (end 99.5 145.3) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B305B1) (status 10)) + (segment (start 98.49916 144.8) (end 98.99916 144.3) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 99.5 144.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 98.99916 144.3) (end 99.5 144.3) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B305AA) (status 10)) + (segment (start 106.44958 132.2) (end 107.2 132.2) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 107.2 132.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 106.44958 132.2) (end 106.4 132.24958) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 106.4 133) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 106.4 132.24958) (end 106.4 133) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30566) (status 10)) + (segment (start 122.60084 158.9) (end 121.5 158.9) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 121.5 158.9) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 122.60084 158.9) (end 122.9 158.60084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 122.9 157.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 122.9 158.60084) (end 122.9 157.7) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B304FE) (status 10)) + (segment (start 122.60084 158.9) (end 122.9 159.19916) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 122.9 160.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 122.9 159.19916) (end 122.9 160.1) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B304FA) (status 10)) + (segment (start 172.50084 159) (end 171.4 159) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 171.4 159) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172.50084 159) (end 172.8 159.29916) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 172.8 160.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172.8 159.29916) (end 172.8 160.2) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30486) (status 10)) + (segment (start 172.50084 159) (end 172.8 158.70084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 172.8 157.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 172.8 158.70084) (end 172.8 157.8) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30482) (status 10)) + (segment (start 134.10084 122) (end 133 122) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 133 122) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 134.10084 122) (end 134.4 121.70084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 134.4 120.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 134.4 121.70084) (end 134.4 120.8) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30428) (status 10)) + (segment (start 134.04958 119.8) (end 134 119.75042) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 134 119) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 134 119.75042) (end 134 119) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30418) (status 10)) + (segment (start 141.55042 119.8) (end 141.4 119.64958) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 141.4 119) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 141.4 119.64958) (end 141.4 119) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30405) (status 10)) + (segment (start 144.6 115.70084) (end 144.30084 116) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 143.4 116) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 144.30084 116) (end 143.4 116) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B303FB) (status 10)) + (segment (start 144.6 115.70084) (end 144.89916 116) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 145.8 116) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 144.89916 116) (end 145.8 116) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B303EF) (status 10)) + (segment (start 144.6 112.29916) (end 144.89916 112) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 145.8 112) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 144.89916 112) (end 145.8 112) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B303E7) (status 10)) + (segment (start 144.6 112.29916) (end 144.30084 112) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 143.4 112) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 144.30084 112) (end 143.4 112) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B303E3) (status 10)) + (segment (start 142.44958 108.2) (end 142.4 108.24958) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 142.4 109) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 142.4 108.24958) (end 142.4 109) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B303CC) (status 10)) + (segment (start 137.09916 106.4) (end 138.2 106.4) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 138.2 106.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 137.09916 106.4) (end 137.4 106.70084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 137.4 107.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 137.4 106.70084) (end 137.4 107.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B303B7) (status 10)) + (segment (start 135.84958 108.2) (end 136.6 108.2) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 136.6 108.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 131.50084 106.8) (end 131.2 107.10084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 131.2 108) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 131.2 107.10084) (end 131.2 108) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30397) (status 10)) + (segment (start 132.75042 108.6) (end 132 108.6) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 132 108.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 131.50084 106.8) (end 131.8 106.50084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 131.8 105.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 131.8 106.50084) (end 131.8 105.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B3038C) (status 10)) + (segment (start 77.09916 123.2) (end 76.8 123.49916) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 76.8 124.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 76.8 123.49916) (end 76.8 124.4) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30358) (status 10)) + (segment (start 77.09916 123.2) (end 78.2 123.2) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 78.2 123.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 77.09916 123.2) (end 76.8 122.90084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 76.8 122) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 76.8 122.90084) (end 76.8 122) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30350) (status 10)) + (segment (start 72.64958 122.8) (end 72.6 122.84958) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 72.6 123.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 72.6 122.84958) (end 72.6 123.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30335) (status 10)) + (segment (start 72.64958 122.8) (end 72.6 122.75042) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 72.6 122) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 72.6 122.75042) (end 72.6 122) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B30331) (status 10)) + (segment (start 130.2 115.70084) (end 129.90084 116) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 129 116) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 129.90084 116) (end 129 116) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B2F3D7) (status 10)) + (segment (start 130.2 115.70084) (end 130.49916 116) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 131.4 116) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 130.49916 116) (end 131.4 116) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B2F3C4) (status 10)) + (segment (start 82.35 160) (end 82.35 157.4) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 82.35 157.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 165.2 155.29916) (end 165.2 156.4) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 165.2 156.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 165.2 155.29916) (end 165.49916 155) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 166.4 155) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 165.49916 155) (end 166.4 155) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B195B9) (status 10)) + (segment (start 165.2 155.29916) (end 164.90084 155) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 164 155) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 164.90084 155) (end 164 155) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B195B5) (status 10)) + (segment (start 156.09916 157.8) (end 155.8 157.50084) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 155.8 156.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 155.8 157.50084) (end 155.8 156.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B193C4) (status 10)) + (segment (start 156.09916 157.8) (end 157.2 157.8) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 157.2 157.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 156.09916 157.8) (end 155.8 158.09916) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 155.8 159.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 155.8 158.09916) (end 155.8 159.1) (width 0.4) (layer 4_bot) (net 63) (tstamp 53B193BC) (status 10)) + (segment (start 173.9999 121.6) (end 173.9999 120.6001) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 173.9999 120.6001) (end 174 120.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE36D8)) + (via (at 174 120.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 169 122.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 169.9999 122.2) (end 169 122.2) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 169.9999 121.1001) (end 170 121.1) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE4607)) + (via (at 170 121.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 169.9999 122.2) (end 169.9999 121.1001) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 132.4 110.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 132.40012 110.49988) (end 132.4 110.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53ADF166)) + (segment (start 133.17598 110.49988) (end 132.40012 110.49988) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 161 107.4) (end 161 108.3999) (width 0.4) (layer 4_bot) (net 63) (status 20)) + (via (at 161 107.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 162.8 108.3999) (end 162.8 107.4) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 162.8 107.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 169.9999 124) (end 169.9999 125.0999) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 170 125.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 169.9999 125.0999) (end 170 125.1) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE45FF)) + (segment (start 169.9999 124) (end 169 124) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 169 124) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82.2 125.65) (end 82.2 127.35) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 82.2 127.35) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 83.4 126.05) (end 83.4 127.35) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 83.4 127.35) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 83.4 126.05) (end 84.3 126.05) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 84.3 126.05) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 83.4 126.05) (end 83.4 124.85) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 83.4 124.85) (end 83.55 124.7) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE3897)) + (via (at 83.55 124.7) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82.2 125.65) (end 80.9 125.65) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 80.9 125.65) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82.2 125.65) (end 82.2 123.95) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 82.2 123.95) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 83.4 148.95) (end 83.4 147.65) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 83.4 147.65) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82.2 149.35) (end 80.9 149.35) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 80.9 149.35) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82.2 149.35) (end 82.2 147.65) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 82.2 147.65) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82.2 149.35) (end 82.2 151.05) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 82.2 151.05) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 83.4 148.95) (end 83.4 150.15) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 83.4 150.15) (end 83.55 150.3) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE3855)) + (via (at 83.55 150.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 83.4 148.95) (end 84.3 148.95) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 84.3 148.95) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82.35 160) (end 82.35 162.6) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 82.35 162.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82.35 160) (end 80.2 160) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 80.2 160) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 82.35 160) (end 84.5 160) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 84.5 160) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 162.8 121.6001) (end 162.8 122.6) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 162.8 122.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 161 121.6001) (end 161 122.6) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 161 122.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 161 121.6001) (end 160.0001 121.6001) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 160.0001 121.6001) (end 160 121.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE37BE)) + (via (at 160 121.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 161 108.3999) (end 160.0001 108.3999) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 160.0001 108.3999) (end 160 108.4) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE3795)) + (via (at 160 108.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 162.8 108.3999) (end 163.7999 108.3999) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 163.7999 108.3999) (end 163.8 108.4) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE3778)) + (via (at 163.8 108.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 173.9999 121.6) (end 173.9999 122.5999) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 173.9999 122.5999) (end 174 122.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE36E1)) + (via (at 174 122.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 173.9999 121.6) (end 173 121.6) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 173 121.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 98.2001 150.6) (end 99.2 150.6) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 99.2 150.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 98 147.8) (end 98 149) (width 0.4) (layer 4_bot) (net 63)) + (via (at 98 147.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 98 149) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 99.34874 147.8) (end 98 147.8) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 98 146.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 98 147.8) (end 98 146.6) (width 0.4) (layer 4_bot) (net 63) (tstamp 53AE1EBF)) + (via (at 136 119) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 136 119.64958) (end 136 119) (width 0.4) (layer 4_bot) (net 63) (tstamp 53ADF26A) (status 10)) + (segment (start 136.15042 119.8) (end 136 119.64958) (width 0.4) (layer 4_bot) (net 63) (status 30)) + (via (at 135.1 119) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 135.12416 118.97584) (end 135.1 119) (width 0.4) (layer 4_bot) (net 63) (tstamp 53ADF236)) + (segment (start 135.12416 117.50012) (end 135.12416 118.97584) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 137.4 112) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (via (at 142.4 110.5) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 142.39988 110.49988) (end 142.4 110.5) (width 0.4) (layer 4_bot) (net 63) (tstamp 53ADF16A)) + (segment (start 141.62402 110.49988) (end 142.39988 110.49988) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (segment (start 137.72512 110.49988) (end 137.72512 111.67488) (width 0.2) (layer 4_bot) (net 63) (status 10)) + (segment (start 137.07488 111.67488) (end 137.4 112) (width 0.2) (layer 4_bot) (net 63) (tstamp 53ADF17E)) + (segment (start 137.07488 111.67488) (end 137.07488 110.49988) (width 0.2) (layer 4_bot) (net 63) (status 20)) + (segment (start 137.72512 111.67488) (end 137.4 112) (width 0.2) (layer 4_bot) (net 63) (tstamp 53ADF182)) + (via (at 97.6 132.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63) (status 30)) + (segment (start 97.6 132.8) (end 97.6 135) (width 0.2) (layer 4_bot) (net 63) (status 30)) + (via (at 97.6 135) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63) (status 30)) + (segment (start 97.6 132.8) (end 99.8 132.8) (width 0.2) (layer 4_bot) (net 63) (status 30)) + (via (at 99.8 132.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63) (status 30)) + (segment (start 97.6 132.8) (end 95.4 132.8) (width 0.2) (layer 4_bot) (net 63) (status 30)) + (via (at 95.4 132.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63) (status 30)) + (segment (start 97.6 132.8) (end 97.6 130.6) (width 0.2) (layer 4_bot) (net 63) (status 30)) + (via (at 97.6 130.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63) (status 30)) + (segment (start 97.6 132.8) (end 99.8 135) (width 0.2) (layer 4_bot) (net 63) (status 30)) + (via (at 99.8 135) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63) (status 30)) + (segment (start 97.6 132.8) (end 95.4 135) (width 0.2) (layer 4_bot) (net 63) (status 30)) + (via (at 95.4 135) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63) (status 30)) + (segment (start 97.6 132.8) (end 99.8 130.6) (width 0.2) (layer 4_bot) (net 63) (status 30)) + (via (at 99.8 130.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63) (status 30)) + (segment (start 97.6 132.8) (end 95.4 130.6) (width 0.2) (layer 4_bot) (net 63) (status 30)) + (via (at 95.4 130.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63) (status 30)) + (segment (start 85.3 143.75) (end 86.1 143.75) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (segment (start 86.1 143.75) (end 86.45 143.4) (width 0.3) (layer 4_bot) (net 63) (tstamp 53AB3F31)) + (via (at 86.45 143.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 143.25) (end 84.15 143.25) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (via (at 84.15 143.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 139.75) (end 86.45 139.75) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (via (at 86.45 139.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 139.25) (end 84.15 139.25) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (via (at 84.15 139.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 130.25) (end 84.45 130.25) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (segment (start 84.45 130.25) (end 84.15 130.55) (width 0.3) (layer 4_bot) (net 63) (tstamp 53AA6CDF)) + (via (at 84.15 130.55) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 146.25) (end 86.45 146.25) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (via (at 86.45 146.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 141.75) (end 86.45 141.75) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (via (at 86.45 141.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 140.75) (end 86.45 140.75) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (via (at 86.45 140.75) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 142.25) (end 84.15 142.25) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (via (at 84.15 142.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 141.25) (end 84.15 141.25) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (via (at 84.15 141.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 85.3 140.25) (end 84.15 140.25) (width 0.3) (layer 4_bot) (net 63) (status 10)) + (via (at 84.15 140.25) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 97 141.64958) (end 97 142.4) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 97 142.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 98.6 141.64958) (end 98.6 142.4) (width 0.4) (layer 4_bot) (net 63) (status 10)) + (via (at 98.6 142.4) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 63)) + (segment (start 162.8 119.9999) (end 163.7999 119.9999) (width 0.4) (layer 4_bot) (net 64) (status 10)) + (segment (start 163.7999 119.9999) (end 164.5999 120.7999) (width 0.4) (layer 4_bot) (net 64) (tstamp 53AE0179)) + (segment (start 164.5999 120.7999) (end 164.5999 121.6) (width 0.4) (layer 4_bot) (net 64) (tstamp 53AE017B) (status 20)) + (segment (start 162.8 119.9999) (end 161 119.9999) (width 0.4) (layer 4_bot) (net 64) (status 30)) + (segment (start 161 119.9999) (end 157.3497 119.9999) (width 0.4) (layer 4_bot) (net 64) (status 30)) + (segment (start 157.3497 119.9999) (end 157.3496 120) (width 0.4) (layer 4_bot) (net 64) (tstamp 53AE0130) (status 30)) + (segment (start 164.5999 110) (end 162.8001 110) (width 0.4) (layer 4_bot) (net 65) (status 30)) + (segment (start 162.8001 110) (end 162.8 110.0001) (width 0.4) (layer 4_bot) (net 65) (tstamp 53AE012D) (status 30)) + (segment (start 162.8 110.0001) (end 161 110.0001) (width 0.4) (layer 4_bot) (net 65) (status 30)) + (segment (start 161 110.0001) (end 157.3497 110.0001) (width 0.4) (layer 4_bot) (net 65) (status 30)) + (segment (start 157.3497 110.0001) (end 157.3496 110) (width 0.4) (layer 4_bot) (net 65) (tstamp 53AE0127) (status 30)) + (segment (start 140.2001 108.2) (end 140.2001 107.1999) (width 0.4) (layer 4_bot) (net 66) (status 10)) + (segment (start 140.2001 107.1999) (end 143 104.4) (width 0.4) (layer 4_bot) (net 66) (tstamp 53AE01D6) (status 20)) + (segment (start 143 104.4) (end 143.55006 104.4) (width 0.4) (layer 4_bot) (net 66) (tstamp 53AE01D9) (status 30)) + (segment (start 171.6001 122.2) (end 171.6001 119.8) (width 0.4) (layer 4_bot) (net 67)) + (segment (start 171.6001 119.8) (end 171.6 119.8) (width 0.4) (layer 4_bot) (net 67)) + (segment (start 171.6 119.8) (end 168.1 116.3) (width 0.4) (layer 4_bot) (net 67)) + (segment (start 168.1 116.3) (end 157.9 116.3) (width 0.4) (layer 4_bot) (net 67)) + (segment (start 157.9 116.3) (end 154.2 112.6) (width 0.4) (layer 4_bot) (net 67)) + (segment (start 154.2 112.6) (end 154.2 108.8) (width 0.4) (layer 4_bot) (net 67)) + (segment (start 154.2 108.8) (end 148.4 103) (width 0.4) (layer 4_bot) (net 67)) + (segment (start 148.4 103) (end 145.4 103) (width 0.4) (layer 4_bot) (net 67)) + (segment (start 142 103) (end 145.4 103) (width 0.4) (layer 4_bot) (net 67)) + (segment (start 140.04994 104.4) (end 140.6 104.4) (width 0.4) (layer 4_bot) (net 67) (tstamp 53AE01C4) (status 30)) + (segment (start 142 103) (end 140.6 104.4) (width 0.4) (layer 4_bot) (net 67) (tstamp 53AE01C0) (status 20)) + (segment (start 173.3999 124) (end 171.6001 124) (width 0.4) (layer 4_bot) (net 67) (status 30)) + (segment (start 171.6001 124) (end 171.6001 122.2) (width 0.4) (layer 4_bot) (net 67) (tstamp 53AE45E8) (status 30)) + (segment (start 140.04994 104.4) (end 137.2001 104.4) (width 0.4) (layer 4_bot) (net 67) (status 30)) + (segment (start 96.65126 148.74996) (end 96.65126 150.54864) (width 0.2) (layer 4_bot) (net 68) (status 30)) + (segment (start 96.65126 150.54864) (end 96.5999 150.6) (width 0.2) (layer 4_bot) (net 68) (tstamp 53AE1EEA) (status 30)) + (segment (start 85.3 147.25) (end 85.3 147.75) (width 0.3) (layer 4_bot) (net 69) (status 10)) + (segment (start 85.3 147.75) (end 85.95 148.4) (width 0.4) (layer 4_bot) (net 69) (tstamp 53C5B93F)) + (segment (start 85.95 148.4) (end 90.4 148.4) (width 0.4) (layer 4_bot) (net 69) (tstamp 53C5B940) (status 20)) + (segment (start 90.4 148.4) (end 90.44938 148.4) (width 0.4) (layer 4_bot) (net 69) (tstamp 53C5B941) (status 30)) + (segment (start 166.2001 121.6) (end 166.2001 118.5999) (width 0.4) (layer 4_bot) (net 70) (status 30)) + (segment (start 166.2001 118.5999) (end 166.3 118.5) (width 0.4) (layer 4_bot) (net 70) (tstamp 53B18C8E) (status 30)) + (segment (start 173.8 111.1) (end 168.3 111.1) (width 0.4) (layer 4_bot) (net 71) (status 10)) + (segment (start 167.2 110) (end 168.3 111.1) (width 0.4) (layer 4_bot) (net 71) (tstamp 53AE0174)) + (segment (start 167.2 110) (end 166.2001 110) (width 0.4) (layer 4_bot) (net 71) (status 20)) + (segment (start 175.6001 121.6) (end 175.6001 118.5999) (width 0.4) (layer 4_bot) (net 72) (status 30)) + (segment (start 175.6001 118.5999) (end 175.7 118.5) (width 0.4) (layer 4_bot) (net 72) (tstamp 53B18C88) (status 30)) + (segment (start 178.5 118.5) (end 177.6 119.4) (width 0.4) (layer 4_bot) (net 73) (status 30)) + (segment (start 177.6 122.2) (end 175.8 124) (width 0.4) (layer 4_bot) (net 73) (tstamp 53AE45C2)) + (segment (start 175.8 124) (end 175.0001 124) (width 0.4) (layer 4_bot) (net 73) (tstamp 53AE45C3) (status 20)) + (segment (start 177.6 119.4) (end 177.6 122.2) (width 0.4) (layer 4_bot) (net 73) (tstamp 53B18C82) (status 10)) + (segment (start 165.45 150.9) (end 169.205 150.9) (width 0.2) (layer 4_bot) (net 78) (status 30)) + (segment (start 169.205 150.9) (end 169.235 150.87) (width 0.2) (layer 4_bot) (net 78) (tstamp 53AB1836) (status 30)) + (segment (start 165.45 150) (end 166.9 150) (width 0.2) (layer 4_bot) (net 79) (status 10)) + (segment (start 172.27 150.87) (end 174.285 150.87) (width 0.2) (layer 4_bot) (net 79) (tstamp 53AB1831) (status 20)) + (segment (start 171.3 149.9) (end 172.27 150.87) (width 0.2) (layer 4_bot) (net 79) (tstamp 53AB182F)) + (segment (start 167 149.9) (end 171.3 149.9) (width 0.2) (layer 4_bot) (net 79) (tstamp 53AB182E)) + (segment (start 166.9 150) (end 167 149.9) (width 0.2) (layer 4_bot) (net 79) (tstamp 53AB182D)) + (segment (start 165.45 148.3) (end 169.205 148.3) (width 0.2) (layer 4_bot) (net 80) (status 30)) + (segment (start 169.205 148.3) (end 169.235 148.33) (width 0.2) (layer 4_bot) (net 80) (tstamp 53AB1834) (status 30)) + (segment (start 165.45 149.2) (end 166.9 149.2) (width 0.2) (layer 4_bot) (net 81) (status 10)) + (segment (start 172.27 148.33) (end 174.285 148.33) (width 0.2) (layer 4_bot) (net 81) (tstamp 53AB182A) (status 20)) + (segment (start 171.3 149.3) (end 172.27 148.33) (width 0.2) (layer 4_bot) (net 81) (tstamp 53AB1828)) + (segment (start 167 149.3) (end 171.3 149.3) (width 0.2) (layer 4_bot) (net 81) (tstamp 53AB1827)) + (segment (start 166.9 149.2) (end 167 149.3) (width 0.2) (layer 4_bot) (net 81) (tstamp 53AB1826)) + (segment (start 165.45 145.8) (end 169.225 145.8) (width 0.2) (layer 4_bot) (net 82) (status 30)) + (segment (start 169.225 145.8) (end 169.235 145.79) (width 0.2) (layer 4_bot) (net 82) (tstamp 53AB1824) (status 30)) + (segment (start 165.45 144.9) (end 166.9 144.9) (width 0.2) (layer 4_bot) (net 83) (status 10)) + (segment (start 172.29 145.79) (end 174.285 145.79) (width 0.2) (layer 4_bot) (net 83) (tstamp 53AB181F) (status 20)) + (segment (start 171.3 144.8) (end 172.29 145.79) (width 0.2) (layer 4_bot) (net 83) (tstamp 53AB181D)) + (segment (start 167 144.8) (end 171.3 144.8) (width 0.2) (layer 4_bot) (net 83) (tstamp 53AB181C)) + (segment (start 166.9 144.9) (end 167 144.8) (width 0.2) (layer 4_bot) (net 83) (tstamp 53AB181B)) + (segment (start 165.45 143.2) (end 169.185 143.2) (width 0.2) (layer 4_bot) (net 84) (status 30)) + (segment (start 169.185 143.2) (end 169.235 143.25) (width 0.2) (layer 4_bot) (net 84) (tstamp 53AB1822) (status 30)) + (segment (start 165.45 144.1) (end 166.9 144.1) (width 0.2) (layer 4_bot) (net 85) (status 10)) + (segment (start 172.25 143.25) (end 174.285 143.25) (width 0.2) (layer 4_bot) (net 85) (tstamp 53AB1818) (status 20)) + (segment (start 171.3 144.2) (end 172.25 143.25) (width 0.2) (layer 4_bot) (net 85) (tstamp 53AB1816)) + (segment (start 167 144.2) (end 171.3 144.2) (width 0.2) (layer 4_bot) (net 85) (tstamp 53AB1815)) + (segment (start 166.9 144.1) (end 167 144.2) (width 0.2) (layer 4_bot) (net 85) (tstamp 53AB1814)) + (segment (start 161 159.0001) (end 161 159.8) (width 0.2) (layer 4_bot) (net 91) (status 10)) + (segment (start 162.87 165.27) (end 162.87 167.365) (width 0.2) (layer 4_bot) (net 91) (tstamp 53ACF435) (status 20)) + (segment (start 161.6 164) (end 162.87 165.27) (width 0.2) (layer 4_bot) (net 91) (tstamp 53ACF431)) + (segment (start 161.6 160.4) (end 161.6 164) (width 0.2) (layer 4_bot) (net 91) (tstamp 53ACF42F)) + (segment (start 161 159.8) (end 161.6 160.4) (width 0.2) (layer 4_bot) (net 91) (tstamp 53ACF42C)) + (segment (start 162.8 159.0001) (end 162.8 162.245) (width 0.2) (layer 4_bot) (net 92) (status 30)) + (segment (start 162.8 162.245) (end 162.87 162.315) (width 0.2) (layer 4_bot) (net 92) (tstamp 53ACF42A) (status 30)) + (segment (start 146.0001 158.2) (end 146.0001 159.2001) (width 0.2) (layer 4_bot) (net 98) (status 10)) + (segment (start 146.4 159.6) (end 146.4 164) (width 0.2) (layer 4_bot) (net 98) (tstamp 53ADE5E8)) + (segment (start 146.0001 159.2001) (end 146.4 159.6) (width 0.2) (layer 4_bot) (net 98) (tstamp 53ADE5E7)) + (segment (start 145.09 167.365) (end 145.09 165.31) (width 0.2) (layer 4_bot) (net 98) (status 10)) + (segment (start 145.09 165.31) (end 146.4 164) (width 0.2) (layer 4_bot) (net 98) (tstamp 53ADAA05)) + (segment (start 134.45 162.7) (end 134.45 161.25) (width 0.2) (layer 4_bot) (net 99) (status 10)) + (segment (start 145.09 159.99) (end 145.09 162.315) (width 0.2) (layer 4_bot) (net 99) (tstamp 53ADA9F8) (status 20)) + (segment (start 144.4 159.3) (end 145.09 159.99) (width 0.2) (layer 4_bot) (net 99) (tstamp 53ADA9F6)) + (segment (start 136.4 159.3) (end 144.4 159.3) (width 0.2) (layer 4_bot) (net 99) (tstamp 53ADA9F4)) + (segment (start 134.45 161.25) (end 136.4 159.3) (width 0.2) (layer 4_bot) (net 99) (tstamp 53ADA9F1)) + (segment (start 142.55 167.365) (end 142.55 169.65) (width 0.2) (layer 4_bot) (net 100) (status 10)) + (segment (start 134.4 165.3) (end 134.45 165.3) (width 0.2) (layer 4_bot) (net 100) (tstamp 53F38FE6) (status 30)) + (segment (start 134.4 168.3) (end 134.4 165.3) (width 0.2) (layer 4_bot) (net 100) (tstamp 53F38FE4) (status 20)) + (segment (start 136.4 170.3) (end 134.4 168.3) (width 0.2) (layer 4_bot) (net 100) (tstamp 53F38FE2)) + (segment (start 141.9 170.3) (end 136.4 170.3) (width 0.2) (layer 4_bot) (net 100) (tstamp 53F38FE0)) + (segment (start 142.55 169.65) (end 141.9 170.3) (width 0.2) (layer 4_bot) (net 100) (tstamp 53F38FDE)) + (segment (start 142.55 162.315) (end 142.55 164.45) (width 0.2) (layer 4_bot) (net 101) (status 10)) + (segment (start 134.5 164.4) (end 134.45 164.4) (width 0.2) (layer 4_bot) (net 101) (tstamp 53F38FF4) (status 30)) + (segment (start 135.4 164.4) (end 134.5 164.4) (width 0.2) (layer 4_bot) (net 101) (tstamp 53F38FF3) (status 20)) + (segment (start 135.7 164.7) (end 135.4 164.4) (width 0.2) (layer 4_bot) (net 101) (tstamp 53F38FF2)) + (segment (start 135.7 168.7) (end 135.7 164.7) (width 0.2) (layer 4_bot) (net 101) (tstamp 53F38FF0)) + (segment (start 136.7 169.7) (end 135.7 168.7) (width 0.2) (layer 4_bot) (net 101) (tstamp 53F38FEE)) + (segment (start 140.8 169.7) (end 136.7 169.7) (width 0.2) (layer 4_bot) (net 101) (tstamp 53F38FED)) + (segment (start 141.3 169.2) (end 140.8 169.7) (width 0.2) (layer 4_bot) (net 101) (tstamp 53F38FEB)) + (segment (start 141.3 165.7) (end 141.3 169.2) (width 0.2) (layer 4_bot) (net 101) (tstamp 53F38FE9)) + (segment (start 142.55 164.45) (end 141.3 165.7) (width 0.2) (layer 4_bot) (net 101) (tstamp 53F38FE7)) + (segment (start 120.77 148.33) (end 118.63 148.33) (width 0.2) (layer 4_bot) (net 103) (status 10)) + (segment (start 99.8 127.396004) (end 99.8 128.6) (width 0.2) (layer 4_bot) (net 103) (status 20)) + (segment (start 114 133.2) (end 117 133.2) (width 0.2) (layer 4_bot) (net 103) (tstamp 53AB7418)) + (segment (start 107.8 127) (end 114 133.2) (width 0.2) (layer 4_bot) (net 103) (tstamp 53AB740F)) + (segment (start 100.196004 127) (end 107.8 127) (width 0.2) (layer 4_bot) (net 103) (tstamp 53AB740B)) + (segment (start 99.8 127.396004) (end 100.196004 127) (width 0.2) (layer 4_bot) (net 103) (tstamp 53AB7405)) + (via (at 117 133.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 103)) + (segment (start 117 146.7) (end 117 133.2) (width 0.2) (layer 1_top) (net 103)) + (segment (start 118.6 148.3) (end 117 146.7) (width 0.2) (layer 1_top) (net 103) (tstamp 53F39E2C)) + (via (at 118.6 148.3) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 103)) + (segment (start 118.63 148.33) (end 118.6 148.3) (width 0.2) (layer 4_bot) (net 103) (tstamp 53F39E2A)) + (segment (start 120.77 145.79) (end 118.61 145.79) (width 0.2) (layer 4_bot) (net 104) (status 10)) + (segment (start 108.2 129.2) (end 114.6 135.6) (width 0.2) (layer 4_bot) (net 104)) + (segment (start 101.8 129.4) (end 101.8 129.8) (width 0.2) (layer 4_bot) (net 104) (status 20)) + (segment (start 101.8 129.4) (end 102 129.2) (width 0.2) (layer 4_bot) (net 104) (tstamp 53AB7382)) + (segment (start 102 129.2) (end 108.2 129.2) (width 0.2) (layer 4_bot) (net 104) (tstamp 53AB7384)) + (segment (start 114.6 135.6) (end 117.8 135.6) (width 0.2) (layer 4_bot) (net 104) (tstamp 53ACCDD8)) + (via (at 117.8 135.6) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 104)) + (segment (start 117.8 145) (end 117.8 135.6) (width 0.2) (layer 1_top) (net 104)) + (segment (start 118.6 145.8) (end 117.8 145) (width 0.2) (layer 1_top) (net 104) (tstamp 53F39E94)) + (via (at 118.6 145.8) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 104)) + (segment (start 118.61 145.79) (end 118.6 145.8) (width 0.2) (layer 4_bot) (net 104) (tstamp 53F39E92)) + (segment (start 120.965 145.8) (end 120.975 145.79) (width 0.2) (layer 4_bot) (net 104) (tstamp 53AB765C) (status 30)) + (segment (start 121 145.765) (end 120.975 145.79) (width 0.2) (layer 4_bot) (net 104) (tstamp 53AB73A7) (status 30)) + (segment (start 126.025 135.63) (end 123.83 135.63) (width 0.2) (layer 4_bot) (net 110) (status 10)) + (segment (start 108.2 128.6) (end 100.6 128.6) (width 0.2) (layer 4_bot) (net 110) (tstamp 53AB7347) (status 20)) + (segment (start 114.25 134.65) (end 108.2 128.6) (width 0.2) (layer 4_bot) (net 110) (tstamp 53AB7345)) + (segment (start 122.85 134.65) (end 114.25 134.65) (width 0.2) (layer 4_bot) (net 110) (tstamp 53AB7343)) + (segment (start 123.83 135.63) (end 122.85 134.65) (width 0.2) (layer 4_bot) (net 110) (tstamp 53AB733F)) + (segment (start 126.23 133.09) (end 125.11 133.09) (width 0.2) (layer 4_bot) (net 112) (status 30)) + (segment (start 124.1 134.1) (end 114.3 134.1) (width 0.2) (layer 4_bot) (net 112) (tstamp 53AB7335)) + (segment (start 114.3 134.1) (end 107.6 127.4) (width 0.2) (layer 4_bot) (net 112) (tstamp 53AB7337)) + (segment (start 107.6 127.4) (end 100.4 127.4) (width 0.2) (layer 4_bot) (net 112) (tstamp 53AB7339)) + (segment (start 100.4 127.4) (end 100.2 127.6) (width 0.2) (layer 4_bot) (net 112) (tstamp 53AB733C)) + (segment (start 100.2 127.6) (end 100.2 128.6) (width 0.2) (layer 4_bot) (net 112) (tstamp 53AB733D) (status 20)) + (segment (start 125.11 133.09) (end 124.1 134.1) (width 0.2) (layer 4_bot) (net 112) (tstamp 53F39E10) (status 10)) + (segment (start 130.9 133.1) (end 126.2 133.1) (width 0.2) (layer 4_bot) (net 112) (status 20)) + (segment (start 138.5 121.7001) (end 138.5 122.6) (width 0.2) (layer 4_bot) (net 112) (status 10)) + (segment (start 138.3 123.2) (end 130.9 123.2) (width 0.2) (layer 4_bot) (net 112) (tstamp 53AE2874)) + (segment (start 138.5 122.6) (end 138.3 123.2) (width 0.2) (layer 4_bot) (net 112) (tstamp 53AE2871)) + (via (at 130.9 133.1) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 112)) + (segment (start 130.9 133.1) (end 130.9 123.2) (width 0.2) (layer 1_top) (net 112) (tstamp 53F39D68)) + (via (at 130.9 123.2) (size 0.6858) (drill 0.3302) (layers 1_top 4_bot) (net 112)) + (segment (start 126.2 133.1) (end 126.23 133.09) (width 0.2) (layer 4_bot) (net 112) (tstamp 53F39D73) (status 30)) + (segment (start 101.8 135) (end 103 135) (width 0.2) (layer 4_bot) (net 115) (status 10)) + (segment (start 162.8 156.6) (end 161.4 155.2) (width 0.2) (layer 4_bot) (net 115) (tstamp 53ACF47E)) + (segment (start 162.8 156.6) (end 162.8 157.3999) (width 0.2) (layer 4_bot) (net 115) (status 20)) + (segment (start 134.9 155.2) (end 161.4 155.2) (width 0.2) (layer 4_bot) (net 115) (tstamp 53ADA619)) + (segment (start 129.101998 149.401998) (end 134.9 155.2) (width 0.2) (layer 4_bot) (net 115) (tstamp 53ADA608)) + (segment (start 117.401998 149.401998) (end 129.101998 149.401998) (width 0.2) (layer 4_bot) (net 115) (tstamp 53ADA5F7)) + (segment (start 103 135) (end 117.401998 149.401998) (width 0.2) (layer 4_bot) (net 115) (tstamp 53ADA5F4)) + (segment (start 101.8 135.4) (end 102.8 135.4) (width 0.2) (layer 4_bot) (net 116) (status 10)) + (segment (start 159.9999 157.3999) (end 158.4 155.8) (width 0.2) (layer 4_bot) (net 116) (tstamp 53ACF476)) + (segment (start 159.9999 157.3999) (end 161 157.3999) (width 0.2) (layer 4_bot) (net 116) (status 20)) + (segment (start 134.4 155.8) (end 158.4 155.8) (width 0.2) (layer 4_bot) (net 116) (tstamp 53ADA5DD)) + (segment (start 128.4 149.8) (end 134.4 155.8) (width 0.2) (layer 4_bot) (net 116) (tstamp 53ADA5DA)) + (segment (start 117.2 149.8) (end 128.4 149.8) (width 0.2) (layer 4_bot) (net 116) (tstamp 53ADA5D7)) + (segment (start 102.8 135.4) (end 117.2 149.8) (width 0.2) (layer 4_bot) (net 116) (tstamp 53ADA5D4)) + (segment (start 144.3999 158.2) (end 135 158.2) (width 0.2) (layer 4_bot) (net 117) (status 10)) + (segment (start 101.8 136.2) (end 101.8 135.8) (width 0.2) (layer 4_bot) (net 117) (tstamp 53ADAA1D) (status 20)) + (segment (start 117.8 152.2) (end 101.8 136.2) (width 0.2) (layer 4_bot) (net 117) (tstamp 53ADAA1C)) + (segment (start 129 152.2) (end 117.8 152.2) (width 0.2) (layer 4_bot) (net 117) (tstamp 53ADAA10)) + (segment (start 135 158.2) (end 129 152.2) (width 0.2) (layer 4_bot) (net 117) (tstamp 53ADAA0E)) + (segment (start 97.2 143.6) (end 101 143.6) (width 0.2) (layer 4_bot) (net 118)) + (segment (start 97 137) (end 97 139) (width 0.2) (layer 4_bot) (net 118) (status 10)) + (segment (start 96.2 142.6) (end 97.2 143.6) (width 0.2) (layer 4_bot) (net 118) (tstamp 53AB45A4)) + (segment (start 96.2 139.8) (end 96.2 142.6) (width 0.2) (layer 4_bot) (net 118) (tstamp 53AB45A2)) + (segment (start 97 139) (end 96.2 139.8) (width 0.2) (layer 4_bot) (net 118) (tstamp 53AB45A0)) + (segment (start 122.7 165.3) (end 132.75 165.3) (width 0.2) (layer 4_bot) (net 118) (tstamp 53ACCCAC) (status 20)) + (segment (start 101 143.6) (end 122.7 165.3) (width 0.2) (layer 4_bot) (net 118) (tstamp 53ACCCA7)) + (segment (start 98.4 143.2) (end 101.8 143.2) (width 0.2) (layer 4_bot) (net 119)) + (segment (start 97.8 142.6) (end 98.4 143.2) (width 0.2) (layer 4_bot) (net 119) (tstamp 53AB45D3)) + (segment (start 97.8 137) (end 97.8 142.6) (width 0.2) (layer 4_bot) (net 119) (status 10)) + (segment (start 123 164.4) (end 132.75 164.4) (width 0.2) (layer 4_bot) (net 119) (tstamp 53ACCC9F) (status 20)) + (segment (start 101.8 143.2) (end 123 164.4) (width 0.2) (layer 4_bot) (net 119) (tstamp 53ACCC9C)) + (segment (start 103.4 142.4) (end 103.4 139.4) (width 0.2) (layer 4_bot) (net 120)) + (segment (start 101 137) (end 100.6 137) (width 0.2) (layer 4_bot) (net 120) (tstamp 53ADE06B) (status 20)) + (segment (start 103.4 139.4) (end 101 137) (width 0.2) (layer 4_bot) (net 120) (tstamp 53ADE067)) + (segment (start 132.75 162.7) (end 123.7 162.7) (width 0.2) (layer 4_bot) (net 120) (status 10)) + (segment (start 123.7 162.7) (end 103.4 142.4) (width 0.2) (layer 4_bot) (net 120) (tstamp 53ADAA3C)) + (segment (start 100.598002 137) (end 100.6 137) (width 0.2) (layer 4_bot) (net 120) (tstamp 53ADAA43) (status 30)) + (segment (start 139.3 139.7) (end 143 143.4) (width 0.2) (layer 4_bot) (net 121)) + (segment (start 103.8 131) (end 107.6 131) (width 0.2) (layer 4_bot) (net 121) (tstamp 53AB6D30)) + (segment (start 101.8 131.4) (end 103.4 131.4) (width 0.2) (layer 4_bot) (net 121) (status 10)) + (segment (start 116.3 139.7) (end 107.6 131) (width 0.2) (layer 4_bot) (net 121) (tstamp 53AB198A)) + (segment (start 116.3 139.7) (end 139.3 139.7) (width 0.2) (layer 4_bot) (net 121)) + (segment (start 103.4 131.4) (end 103.8 131) (width 0.2) (layer 4_bot) (net 121)) + (segment (start 161.8 145.8) (end 163.75 145.8) (width 0.2) (layer 4_bot) (net 121) (tstamp 53ACCFBA) (status 20)) + (segment (start 159.4 143.4) (end 161.8 145.8) (width 0.2) (layer 4_bot) (net 121) (tstamp 53ACCFB8)) + (segment (start 143 143.4) (end 159.4 143.4) (width 0.2) (layer 4_bot) (net 121) (tstamp 53ACCFB3)) + (segment (start 101.8 131.398002) (end 101.8 131.4) (width 0.2) (layer 4_bot) (net 121) (tstamp 53AB250F) (status 30)) + (segment (start 101.801998 131.4) (end 101.8 131.398002) (width 0.2) (layer 4_bot) (net 121) (tstamp 53AB250E) (status 30)) + (segment (start 139.95 139.15) (end 143.2 142.4) (width 0.2) (layer 4_bot) (net 122)) + (segment (start 101.8 131) (end 103.2 131) (width 0.2) (layer 4_bot) (net 122) (status 10)) + (segment (start 103.2 131) (end 103.6 130.6) (width 0.2) (layer 4_bot) (net 122) (tstamp 53AB662D)) + (segment (start 139.95 139.15) (end 116.35 139.15) (width 0.2) (layer 4_bot) (net 122) (tstamp 53AB199E)) + (segment (start 116.35 139.15) (end 107.8 130.6) (width 0.2) (layer 4_bot) (net 122) (tstamp 53AB19A1)) + (segment (start 103.6 130.6) (end 107.8 130.6) (width 0.2) (layer 4_bot) (net 122)) + (segment (start 162.1 144.9) (end 163.75 144.9) (width 0.2) (layer 4_bot) (net 122) (tstamp 53ACCFAB) (status 20)) + (segment (start 159.6 142.4) (end 162.1 144.9) (width 0.2) (layer 4_bot) (net 122) (tstamp 53ACCFA9)) + (segment (start 143.2 142.4) (end 159.6 142.4) (width 0.2) (layer 4_bot) (net 122) (tstamp 53ACCFA5)) + (segment (start 143.4 137.2) (end 147.6 141.4) (width 0.2) (layer 4_bot) (net 123)) + (segment (start 103.401998 130.198002) (end 107.998002 130.198002) (width 0.2) (layer 4_bot) (net 123) (tstamp 53AB6D23)) + (segment (start 101.8 130.6) (end 103 130.6) (width 0.2) (layer 4_bot) (net 123) (status 10)) + (segment (start 115 137.2) (end 143.4 137.2) (width 0.2) (layer 4_bot) (net 123) (tstamp 53AB6414)) + (segment (start 107.998002 130.198002) (end 115 137.2) (width 0.2) (layer 4_bot) (net 123) (tstamp 53AB6411)) + (segment (start 103 130.6) (end 103.401998 130.198002) (width 0.2) (layer 4_bot) (net 123)) + (segment (start 162.5 144.1) (end 163.75 144.1) (width 0.2) (layer 4_bot) (net 123) (tstamp 53ACCF98) (status 20)) + (segment (start 159.8 141.4) (end 162.5 144.1) (width 0.2) (layer 4_bot) (net 123) (tstamp 53ACCF96)) + (segment (start 147.6 141.4) (end 159.8 141.4) (width 0.2) (layer 4_bot) (net 123) (tstamp 53ACCF8F)) + (segment (start 101.8 130.598002) (end 101.8 130.6) (width 0.2) (layer 4_bot) (net 123) (tstamp 53AB2508) (status 30)) + (segment (start 101.801998 130.6) (end 101.8 130.598002) (width 0.2) (layer 4_bot) (net 123) (tstamp 53AB2507) (status 30)) + (segment (start 101.8 130.601998) (end 101.8 130.6) (width 0.2) (layer 4_bot) (net 123) (tstamp 53AB19B4) (status 30)) + (segment (start 147.8 140.4) (end 160 140.4) (width 0.2) (layer 4_bot) (net 124)) + (segment (start 160 140.4) (end 162.8 143.2) (width 0.2) (layer 4_bot) (net 124) (tstamp 53ACCF7E)) + (segment (start 102.8 130.2) (end 103.2 129.8) (width 0.2) (layer 4_bot) (net 124)) + (segment (start 147.8 140.4) (end 144.05 136.65) (width 0.2) (layer 4_bot) (net 124) (tstamp 53ACCF7C)) + (segment (start 144.05 136.65) (end 115.05 136.65) (width 0.2) (layer 4_bot) (net 124) (tstamp 53AB63D9)) + (segment (start 115.05 136.65) (end 108.2 129.8) (width 0.2) (layer 4_bot) (net 124) (tstamp 53AB63DE)) + (segment (start 163.75 143.2) (end 162.8 143.2) (width 0.2) (layer 4_bot) (net 124) (status 10)) + (segment (start 102.8 130.2) (end 101.8 130.2) (width 0.2) (layer 4_bot) (net 124) (status 20)) + (segment (start 103.2 129.8) (end 108.2 129.8) (width 0.2) (layer 4_bot) (net 124) (tstamp 53AB6D1D)) + (segment (start 101.8 133.8) (end 103.6 133.8) (width 0.2) (layer 4_bot) (net 125) (status 10)) + (segment (start 161.7 150.9) (end 163.75 150.9) (width 0.2) (layer 4_bot) (net 125) (tstamp 53ACEBB4) (status 20)) + (segment (start 161.2 151.4) (end 161.7 150.9) (width 0.2) (layer 4_bot) (net 125) (tstamp 53ACEBAE)) + (segment (start 134.6 151.4) (end 161.2 151.4) (width 0.2) (layer 4_bot) (net 125) (tstamp 53ACEBAC)) + (segment (start 130 146.8) (end 134.6 151.4) (width 0.2) (layer 4_bot) (net 125) (tstamp 53ACEBAA)) + (segment (start 116.6 146.8) (end 130 146.8) (width 0.2) (layer 4_bot) (net 125) (tstamp 53ACEBA8)) + (segment (start 103.6 133.8) (end 116.6 146.8) (width 0.2) (layer 4_bot) (net 125) (tstamp 53ACEBA3)) + (segment (start 101.8 133.4) (end 103.8 133.4) (width 0.2) (layer 4_bot) (net 126) (status 10)) + (segment (start 161.2 150) (end 163.75 150) (width 0.2) (layer 4_bot) (net 126) (tstamp 53ACD1A6) (status 20)) + (segment (start 160.4 150.8) (end 161.2 150) (width 0.2) (layer 4_bot) (net 126) (tstamp 53ACD1A4)) + (segment (start 135.2 150.8) (end 160.4 150.8) (width 0.2) (layer 4_bot) (net 126) (tstamp 53ACD19E)) + (segment (start 129.2 144.8) (end 135.2 150.8) (width 0.2) (layer 4_bot) (net 126) (tstamp 53ACD19B)) + (segment (start 115.2 144.8) (end 129.2 144.8) (width 0.2) (layer 4_bot) (net 126) (tstamp 53ACD198)) + (segment (start 103.8 133.4) (end 115.2 144.8) (width 0.2) (layer 4_bot) (net 126) (tstamp 53ACD192)) + (segment (start 140 147) (end 142.2 147) (width 0.2) (layer 4_bot) (net 127)) + (segment (start 163 149.2) (end 163.75 149.2) (width 0.2) (layer 4_bot) (net 127) (tstamp 53ACEC9C) (status 20)) + (segment (start 159.2 145.4) (end 163 149.2) (width 0.2) (layer 4_bot) (net 127) (tstamp 53ACEC8E)) + (segment (start 143.8 145.4) (end 159.2 145.4) (width 0.2) (layer 4_bot) (net 127) (tstamp 53ACEC8C)) + (segment (start 142.2 147) (end 143.8 145.4) (width 0.2) (layer 4_bot) (net 127) (tstamp 53ACEC89)) + (segment (start 135.25 142.25) (end 113.85 142.25) (width 0.2) (layer 4_bot) (net 127)) + (segment (start 104.2 132.6) (end 101.8 132.6) (width 0.2) (layer 4_bot) (net 127) (tstamp 53ACD0FF) (status 20)) + (segment (start 113.85 142.25) (end 104.2 132.6) (width 0.2) (layer 4_bot) (net 127) (tstamp 53ACD0FA)) + (segment (start 140 147) (end 135.25 142.25) (width 0.2) (layer 4_bot) (net 127) (tstamp 53ACEC87)) + (segment (start 135.9 141.7) (end 117.7 141.7) (width 0.2) (layer 4_bot) (net 128)) + (segment (start 163.1 148.3) (end 159.2 144.4) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACCFC4)) + (segment (start 159.2 144.4) (end 143.6 144.4) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACCFC6)) + (segment (start 143.6 144.4) (end 142 146) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACCFC8)) + (segment (start 142 146) (end 140.2 146) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACCFCE)) + (segment (start 140.2 146) (end 135.9 141.7) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACCFD0)) + (segment (start 163.75 148.3) (end 163.1 148.3) (width 0.2) (layer 4_bot) (net 128) (status 10)) + (segment (start 101.8 131.798002) (end 101.8 131.8) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACD04E) (status 30)) + (segment (start 103.603996 131.798002) (end 101.8 131.798002) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACD04B) (status 20)) + (segment (start 104.003996 131.398002) (end 103.603996 131.798002) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACD047)) + (segment (start 107.398002 131.398002) (end 104.003996 131.398002) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACD045)) + (segment (start 117.7 141.7) (end 107.398002 131.398002) (width 0.2) (layer 4_bot) (net 128) (tstamp 53ACD03B)) (zone (net 0) (net_name "") (layer 2_pwr) (tstamp 53AA1C68) (hatch edge 0.508) (connect_pads (clearance 0.2)) @@ -4840,7 +4390,7 @@ (fill (arc_segments 16) (thermal_gap 0.2) (thermal_bridge_width 0.3)) (polygon (pts - (xy 70.2 165.6) (xy 79.4 165.6) (xy 79.4 168.8) (xy 70.2 168.8) + (xy 75.2 140) (xy 75.2 135) (xy 77.8 135) (xy 77.8 140) ) ) ) @@ -4851,7 +4401,7 @@ (fill (arc_segments 16) (thermal_gap 0.2) (thermal_bridge_width 0.3)) (polygon (pts - (xy 70.2 165.6) (xy 79.4 165.6) (xy 79.4 168.8) (xy 70.2 168.8) + (xy 75.2 140) (xy 75.2 135) (xy 77.8 135) (xy 77.8 140) ) ) ) @@ -4885,7 +4435,7 @@ ) ) ) - (zone (net 99) (net_name GND) (layer 3_gnd) (tstamp 53AA6EAC) (hatch edge 0.508) + (zone (net 63) (net_name GND) (layer 3_gnd) (tstamp 53AA6EAC) (hatch edge 0.508) (connect_pads (clearance 0.2)) (min_thickness 0.2) (fill (arc_segments 16) (thermal_gap 0.2) (thermal_bridge_width 0.3)) @@ -4901,7 +4451,7 @@ (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts - (xy 70.2 165.6) (xy 79.4 165.6) (xy 79.4 168.8) (xy 70.2 168.8) + (xy 75.2 140) (xy 75.2 135) (xy 77.8 135) (xy 77.8 140) ) ) ) @@ -4911,11 +4461,11 @@ (fill (arc_segments 16) (thermal_gap 0.508) (thermal_bridge_width 0.508)) (polygon (pts - (xy 70.2 165.6) (xy 79.4 165.6) (xy 79.4 168.8) (xy 70.2 168.8) + (xy 75.2 140) (xy 75.2 135) (xy 77.8 135) (xy 77.8 140) ) ) ) - (zone (net 99) (net_name GND) (layer 4_bot) (tstamp 53B315F1) (hatch edge 0.508) + (zone (net 63) (net_name GND) (layer 4_bot) (tstamp 53B315F1) (hatch edge 0.508) (connect_pads (clearance 0.2)) (min_thickness 0.2) (fill (arc_segments 16) (thermal_gap 0.2) (thermal_bridge_width 0.3)) @@ -4941,7 +4491,7 @@ ) ) ) - (zone (net 99) (net_name GND) (layer 2_pwr) (tstamp 53B317F9) (hatch edge 0.508) + (zone (net 63) (net_name GND) (layer 2_pwr) (tstamp 53B317F9) (hatch edge 0.508) (connect_pads (clearance 0.2)) (min_thickness 0.2) (fill (arc_segments 16) (thermal_gap 0.2) (thermal_bridge_width 0.3)) @@ -4967,7 +4517,7 @@ ) ) ) - (zone (net 99) (net_name GND) (layer 1_top) (tstamp 53B315F1) (hatch edge 0.508) + (zone (net 63) (net_name GND) (layer 1_top) (tstamp 53B315F1) (hatch edge 0.508) (connect_pads (clearance 0.2)) (min_thickness 0.2) (fill (arc_segments 16) (thermal_gap 0.2) (thermal_bridge_width 0.3)) diff --git a/hardware/portapack_h1/portapack_h1.net b/hardware/portapack_h1/portapack_h1.net index 066a9db87..40e54ccb3 100644 --- a/hardware/portapack_h1/portapack_h1.net +++ b/hardware/portapack_h1/portapack_h1.net @@ -1,66 +1,122 @@ (export (version D) (design - (source portapack_h1.sch) - (date "Thursday, July 17, 2014 'AMt' 08:44:16 AM") - (tool "eeschema (2014-03-01 BZR 4730)-product")) + (source /Users/jboone/src/portapack-hackrf/hardware/portapack_h1/portapack_h1.sch) + (date "Friday, August 21, 2015 'PMt' 04:27:19 PM") + (tool "Eeschema (2015-08-20 BZR 6109)-product") + (sheet (number 1) (name /) (tstamps /) + (title_block + (title "PortaPack H1") + (company "ShareBrained Technology, Inc.") + (rev 20150821) + (date "21 Aug 2015") + (source portapack_h1.sch) + (comment (number 1) (value "Copyright © 2014, 2015 Jared Boone")) + (comment (number 2) (value "License: GNU General Public License, version 2")) + (comment (number 3) (value "")) + (comment (number 4) (value "")))) + (sheet (number 2) (name /audio/) (tstamps /53A8BFC3/) + (title_block + (title "PortaPack H1") + (company "ShareBrained Technology, Inc.") + (rev 20150821) + (date "21 Aug 2015") + (source audio.sch) + (comment (number 1) (value "Copyright © 2014, 2015 Jared Boone")) + (comment (number 2) (value "License: GNU General Public License, version 2")) + (comment (number 3) (value "")) + (comment (number 4) (value "")))) + (sheet (number 3) (name /lcd_sw_sd/) (tstamps /53A9129D/) + (title_block + (title "PortaPack H1") + (company "ShareBrained Technology, Inc.") + (rev 20150821) + (date "21 Aug 2015") + (source lcd_sw_sd.sch) + (comment (number 1) (value "Copyright © 2014, 2015 Jared Boone")) + (comment (number 2) (value "License: GNU General Public License, version 2")) + (comment (number 3) (value "")) + (comment (number 4) (value "")))) + (sheet (number 4) (name /hackrf_if/) (tstamps /53A8C780/) + (title_block + (title "PortaPack H1") + (company "ShareBrained Technology, Inc.") + (rev 20150821) + (date "21 Aug 2015") + (source hackrf_if.sch) + (comment (number 1) (value "Copyright © 2014, 2015 Jared Boone")) + (comment (number 2) (value "License: GNU General Public License, version 2")) + (comment (number 3) (value "")) + (comment (number 4) (value ""))))) (components (comp (ref H1) (value HOLE1) + (footprint hole:HOLE_3200UM_VIAS) (libsource (lib hole) (part HOLE1)) (sheetpath (names /) (tstamps /)) (tstamp 5369BBC4)) (comp (ref H2) (value HOLE1) + (footprint hole:HOLE_3200UM_VIAS) (libsource (lib hole) (part HOLE1)) (sheetpath (names /) (tstamps /)) (tstamp 5369BBD8)) (comp (ref H3) (value HOLE1) + (footprint hole:HOLE_3200UM_VIAS) (libsource (lib hole) (part HOLE1)) (sheetpath (names /) (tstamps /)) (tstamp 5369BBEC)) (comp (ref H4) (value HOLE1) + (footprint hole:HOLE_3200UM_VIAS) (libsource (lib hole) (part HOLE1)) (sheetpath (names /) (tstamps /)) (tstamp 5369BC00)) (comp (ref H5) (value HOLE1) + (footprint hole:HOLE_3200UM_VIAS) (libsource (lib hole) (part HOLE1)) (sheetpath (names /) (tstamps /)) (tstamp 5369BC14)) (comp (ref LOGO1) (value SHAREBRAINED) + (footprint sharebrained:sharebrained_text_300) (libsource (lib sharebrained) (part SHAREBRAINED)) (sheetpath (names /) (tstamps /)) (tstamp 53B1AE0D)) (comp (ref LOGO2) (value PORTAPACK_H1) + (footprint sharebrained:portapack_text_300) (libsource (lib sharebrained) (part PORTAPACK_H1)) (sheetpath (names /) (tstamps /)) (tstamp 53B1B509)) (comp (ref FID1) (value FIDUCIAL) + (footprint fiducial:FIDUCIAL_65MIL) (libsource (lib fiducial) (part FIDUCIAL)) (sheetpath (names /) (tstamps /)) (tstamp 53B309AC)) (comp (ref FID2) (value FIDUCIAL) + (footprint fiducial:FIDUCIAL_65MIL) (libsource (lib fiducial) (part FIDUCIAL)) (sheetpath (names /) (tstamps /)) (tstamp 53B30B4C)) (comp (ref FID3) (value FIDUCIAL) + (footprint fiducial:FIDUCIAL_65MIL) (libsource (lib fiducial) (part FIDUCIAL)) (sheetpath (names /) (tstamps /)) (tstamp 53B30CEC)) (comp (ref FID4) (value FIDUCIAL) + (footprint fiducial:FIDUCIAL_65MIL) (libsource (lib fiducial) (part FIDUCIAL)) (sheetpath (names /) (tstamps /)) (tstamp 53B30E8C)) (comp (ref C18) (value 220U) + (footprint ipc_capae:IPC_CAPAE830X620N) (fields (field (name Mfr) Nichicon) (field (name Part) UWX1A221MCL1GB)) @@ -69,6 +125,7 @@ (tstamp 53A8C256)) (comp (ref C19) (value 220U) + (footprint ipc_capae:IPC_CAPAE830X620N) (fields (field (name Mfr) Nichicon) (field (name Part) UWX1A221MCL1GB)) @@ -77,6 +134,7 @@ (tstamp 53A8C25E)) (comp (ref R11) (value 47K) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) (field (name Part) RC0603FR-0747KL)) @@ -85,6 +143,7 @@ (tstamp 53A8C264)) (comp (ref R12) (value 47K) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) (field (name Part) RC0603FR-0747KL)) @@ -93,6 +152,7 @@ (tstamp 53A8C26A)) (comp (ref C22) (value 220P) + (footprint ipc_capc:IPC_CAPC1608X95N) (fields (field (name Mfr) Murata) (field (name Part) GRM1885C1H221JA01)) @@ -101,6 +161,7 @@ (tstamp 53A8C27E)) (comp (ref C23) (value 220P) + (footprint ipc_capc:IPC_CAPC1608X95N) (fields (field (name Mfr) Murata) (field (name Part) GRM1885C1H221JA01)) @@ -109,6 +170,7 @@ (tstamp 53A8C284)) (comp (ref R17) (value 47K) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) (field (name Part) RC0603FR-0747KL)) @@ -117,11 +179,16 @@ (tstamp 53A8C296)) (comp (ref R18) (value 680R) + (footprint ipc_resc:IPC_RESC1608X55N) + (fields + (field (name Mfr) Yageo) + (field (name Part) RC0603FR-07681RL)) (libsource (lib passive) (part R)) (sheetpath (names /audio/) (tstamps /53A8BFC3/)) (tstamp 53A8C29C)) (comp (ref C25) (value 220P) + (footprint ipc_capc:IPC_CAPC1608X95N) (fields (field (name Mfr) Murata) (field (name Part) GRM1885C1H221JA01)) @@ -130,6 +197,7 @@ (tstamp 53A8C2A2)) (comp (ref C24) (value 1U) + (footprint ipc_capae:IPC_CAPAE430X540N) (fields (field (name Mfr) Kemet) (field (name Part) EDK105M050A9BAA)) @@ -137,31 +205,26 @@ (sheetpath (names /audio/) (tstamps /53A8BFC3/)) (tstamp 53A8C2AA)) (comp (ref R10) - (value 47K) + (value 0R) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) - (field (name Part) RC0603FR-0747KL)) + (field (name Part) RC0603JR-070RL)) (libsource (lib passive) (part R)) (sheetpath (names /audio/) (tstamps /53A8BFC3/)) (tstamp 53A8C2B0)) (comp (ref P2) (value TRRS_SW_JACK) + (footprint cui:CUI_SJ-43516-SMT) (fields (field (name Mfr) CUI) (field (name Part) SJ-43514-SMT)) (libsource (lib trs_jack) (part TRRS_SW_JACK)) (sheetpath (names /audio/) (tstamps /53A8BFC3/)) (tstamp 53A8C2C6)) - (comp (ref X1) - (value MIC_ELECTRET) - (fields - (field (name Mfr) CUI) - (field (name Part) CMA-4544PF-W)) - (libsource (lib microphone) (part MIC_ELECTRET)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53A8C2D6)) (comp (ref L4) (value L) + (footprint ipc_indc:IPC_INDC1608X95N) (fields (field (name Mfr) Murata) (field (name Part) BLM18HE152SN1D)) @@ -170,6 +233,7 @@ (tstamp 53A8C2E2)) (comp (ref L5) (value L) + (footprint ipc_indc:IPC_INDC1608X95N) (fields (field (name Mfr) Murata) (field (name Part) BLM18HE152SN1D)) @@ -178,6 +242,7 @@ (tstamp 53A8C2E8)) (comp (ref L6) (value L) + (footprint ipc_indc:IPC_INDC1608X95N) (fields (field (name Mfr) Murata) (field (name Part) BLM18HE152SN1D)) @@ -186,6 +251,7 @@ (tstamp 53A8C2EE)) (comp (ref L9) (value L) + (footprint ipc_indc:IPC_INDC1608X95N) (fields (field (name Mfr) Murata) (field (name Part) BLM18HE152SN1D)) @@ -194,6 +260,7 @@ (tstamp 53A8C2F4)) (comp (ref U1) (value WM8731SEDS) + (footprint ipc_sop:IPC_SOP65P780X200-28N) (fields (field (name Mfr) Wolfson) (field (name Part) WM8731SEDS/V)) @@ -202,6 +269,7 @@ (tstamp 53A8C66D)) (comp (ref C6) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -210,6 +278,7 @@ (tstamp 53A8C687)) (comp (ref C10) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -218,6 +287,7 @@ (tstamp 53A8C68D)) (comp (ref C3) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -226,6 +296,7 @@ (tstamp 53A8C69F)) (comp (ref C2) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -234,6 +305,7 @@ (tstamp 53A8C6A5)) (comp (ref C5) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -242,6 +314,7 @@ (tstamp 53A8C6AB)) (comp (ref C4) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -250,6 +323,7 @@ (tstamp 53A8C6B1)) (comp (ref C12) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -258,6 +332,7 @@ (tstamp 53A8C6F0)) (comp (ref C8) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -266,6 +341,7 @@ (tstamp 53A8C6F6)) (comp (ref C9) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -274,6 +350,7 @@ (tstamp 53A8C708)) (comp (ref C7) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -282,6 +359,7 @@ (tstamp 53A8C70E)) (comp (ref C13) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -290,6 +368,7 @@ (tstamp 53A8C720)) (comp (ref C11) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -298,190 +377,16 @@ (tstamp 53A8C72C)) (comp (ref RP1) (value 220R) + (footprint ipc_resc:IPC_RESCAXS80P160X320X60-8N) (fields (field (name Mfr) Panasonic) (field (name Part) EXB-38V221JV)) (libsource (lib passive) (part RPACK4)) (sheetpath (names /audio/) (tstamps /53A8BFC3/)) (tstamp 53AB09AD)) - (comp (ref P1) - (value TRS_JACK) - (fields - (field (name Mfr) Switchcraft) - (field (name Part) 35RASMT2BHNTRX)) - (libsource (lib trs_jack) (part TRS_JACK)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF0914)) - (comp (ref P3) - (value TRS_JACK) - (fields - (field (name Mfr) Switchcraft) - (field (name Part) 35RASMT2BHNTRX)) - (libsource (lib trs_jack) (part TRS_JACK)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF0926)) - (comp (ref L10) - (value L) - (fields - (field (name Mfr) Murata) - (field (name Part) BLM18HE152SN1D)) - (libsource (lib passive) (part L)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF0931)) - (comp (ref L1) - (value L) - (fields - (field (name Mfr) Murata) - (field (name Part) BLM18HE152SN1D)) - (libsource (lib passive) (part L)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF093C)) - (comp (ref R7) - (value 5K6) - (fields - (field (name Mfr) Yageo) - (field (name Part) RC0603FR-075K6L)) - (libsource (lib passive) (part R)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF0B74)) - (comp (ref R6) - (value 5K6) - (fields - (field (name Mfr) Yageo) - (field (name Part) RC0603FR-075K6L)) - (libsource (lib passive) (part R)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF0B7F)) - (comp (ref R8) - (value 5K6) - (fields - (field (name Mfr) Yageo) - (field (name Part) RC0603FR-075K6L)) - (libsource (lib passive) (part R)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF0B8A)) - (comp (ref R9) - (value 5K6) - (fields - (field (name Mfr) Yageo) - (field (name Part) RC0603FR-075K6L)) - (libsource (lib passive) (part R)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF0B95)) - (comp (ref C15) - (value 220P) - (fields - (field (name Mfr) Murata) - (field (name Part) GRM1885C1H221JA01)) - (libsource (lib passive) (part C)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF112C)) - (comp (ref C14) - (value 220P) - (fields - (field (name Mfr) Murata) - (field (name Part) GRM1885C1H221JA01)) - (libsource (lib passive) (part C)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF1137)) - (comp (ref C16) - (value 1U) - (fields - (field (name Mfr) Kemet) - (field (name Part) EDK105M050A9BAA)) - (libsource (lib passive) (part CP)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF15D9)) - (comp (ref C17) - (value 1U) - (fields - (field (name Mfr) Kemet) - (field (name Part) EDK105M050A9BAA)) - (libsource (lib passive) (part CP)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF15E8)) - (comp (ref L2) - (value L) - (fields - (field (name Mfr) Murata) - (field (name Part) BLM18HE152SN1D)) - (libsource (lib passive) (part L)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF20F3)) - (comp (ref L3) - (value L) - (fields - (field (name Mfr) Murata) - (field (name Part) BLM18HE152SN1D)) - (libsource (lib passive) (part L)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF20FE)) - (comp (ref L7) - (value L) - (fields - (field (name Mfr) Murata) - (field (name Part) BLM18HE152SN1D)) - (libsource (lib passive) (part L)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF25CC)) - (comp (ref L8) - (value L) - (fields - (field (name Mfr) Murata) - (field (name Part) BLM18HE152SN1D)) - (libsource (lib passive) (part L)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF25D7)) - (comp (ref R15) - (value 100R) - (fields - (field (name Mfr) Yageo) - (field (name Part) RC0603FR-07100RL)) - (libsource (lib passive) (part R)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF2725)) - (comp (ref R16) - (value 100R) - (fields - (field (name Mfr) Yageo) - (field (name Part) RC0603FR-07100RL)) - (libsource (lib passive) (part R)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF2730)) - (comp (ref R14) - (value 47K) - (fields - (field (name Mfr) Yageo) - (field (name Part) RC0603FR-0747KL)) - (libsource (lib passive) (part R)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF273B)) - (comp (ref R13) - (value 47K) - (fields - (field (name Mfr) Yageo) - (field (name Part) RC0603FR-0747KL)) - (libsource (lib passive) (part R)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF2746)) - (comp (ref C21) - (value 10U) - (fields - (field (name Mfr) Kemet) - (field (name Part) EDK106M025A9BAA)) - (libsource (lib passive) (part CP)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF2753)) - (comp (ref C20) - (value 10U) - (fields - (field (name Mfr) Kemet) - (field (name Part) EDK106M025A9BAA)) - (libsource (lib passive) (part CP)) - (sheetpath (names /audio/) (tstamps /53A8BFC3/)) - (tstamp 53AF2762)) (comp (ref R20) (value 47K) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) (field (name Part) RC0603FR-0747KL)) @@ -490,6 +395,7 @@ (tstamp 53A91635)) (comp (ref J3) (value KINGTECH_DW0240A2BZ_FPC) + (footprint molex:MOLEX_54132-40XX_LR) (fields (field (name Mfr) FCI) (field (name Part) 62684-401100ALF)) @@ -498,6 +404,7 @@ (tstamp 53A91651)) (comp (ref R19) (value 47K) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) (field (name Part) RC0603FR-0747KL)) @@ -506,14 +413,16 @@ (tstamp 53A91657)) (comp (ref J2) (value MICROSD_DETSW) + (footprint alps:ALPS_SCHA4B0100) (fields (field (name Mfr) ALPS) - (field (name Part) SCHA4B0100)) + (field (name Part) SCHA4B0415)) (libsource (lib sd) (part MICROSD_DETSW)) (sheetpath (names /lcd_sw_sd/) (tstamps /53A9129D/)) (tstamp 53A8C6D0)) (comp (ref C27) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -522,6 +431,7 @@ (tstamp 53AA73CE)) (comp (ref SW1) (value CK_TSWB-3N-CB) + (footprint ck:CK_TSWB-3N-CB222_LFS) (fields (field (name Mfr) C&K) (field (name Part) "TSWB-3N-CB111 LFS")) @@ -530,6 +440,7 @@ (tstamp 53A8C6FD)) (comp (ref C26) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -538,11 +449,13 @@ (tstamp 53A8C71C)) (comp (ref LCD1) (value KINGTECH_DW0240A2BZ_PANEL) + (footprint lcd_kingtech:KINGTECH_DW0240A2BZ_PANEL) (libsource (lib lcd_kingtech) (part KINGTECH_DW0240A2BZ_PANEL)) (sheetpath (names /lcd_sw_sd/) (tstamps /53A9129D/)) (tstamp 53A8C752)) (comp (ref Q1) (value MOSFET_N) + (footprint ipc_sot:IPC_SOT95P230X110-3N) (fields (field (name Mfr) NXP) (field (name Part) 2N7002P,215)) @@ -551,30 +464,34 @@ (tstamp 53C5B6EB)) (comp (ref P20) (value HACKRF_ONE_P20) + (footprint header:HEADER_11X2_REV_SM_254_AP) (fields - (field (name Mfr) Harwin) - (field (name Part) M20-8761146)) + (field (name Mfr) MLE) + (field (name Part) TSHSM-111-D-06-T-V-S-P-TR-AP-LF)) (libsource (lib hackrf_expansion) (part HACKRF_ONE_P20)) (sheetpath (names /hackrf_if/) (tstamps /53A8C780/)) (tstamp 53A8CDAE)) (comp (ref P22) (value HACKRF_ONE_P22) + (footprint header:HEADER_13X2_REV_SM_254_AP) (fields - (field (name Mfr) Harwin) - (field (name Part) M20-8761346)) + (field (name Mfr) MLE) + (field (name Part) TSHSM-113-D-06-T-V-S-P-TR-AP-LF)) (libsource (lib hackrf_expansion) (part HACKRF_ONE_P22)) (sheetpath (names /hackrf_if/) (tstamps /53A8C780/)) (tstamp 53A8CDB6)) (comp (ref P28) (value HACKRF_ONE_P28) + (footprint header:HEADER_11X2_REV_SM_254_AP) (fields - (field (name Mfr) Harwin) - (field (name Part) M20-8761146)) + (field (name Mfr) MLE) + (field (name Part) TSHSM-111-D-06-T-V-S-P-TR-AP-LF)) (libsource (lib hackrf_expansion) (part HACKRF_ONE_P28)) (sheetpath (names /hackrf_if/) (tstamps /53A8C780/)) (tstamp 53A8CDBE)) (comp (ref U3) (value 5M40ZE64) + (footprint ipc_qfp:IPC_QFP40P900X900X120-65N) (fields (field (name Mfr) Altera) (field (name Part) 5M40ZE64C5N)) @@ -583,6 +500,7 @@ (tstamp 53A8D11B)) (comp (ref C28) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -591,6 +509,7 @@ (tstamp 53A8D527)) (comp (ref BT1) (value BATTERY) + (footprint bat_coin:MPD_BU2032SM-BT-G) (fields (field (name Mfr) MPD) (field (name Part) BU2032SM-BT-GTR)) @@ -599,6 +518,7 @@ (tstamp 53A8D535)) (comp (ref C30) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -607,6 +527,7 @@ (tstamp 53A8D542)) (comp (ref C29) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -615,6 +536,7 @@ (tstamp 53A8D548)) (comp (ref C31) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -623,6 +545,7 @@ (tstamp 53A8D54E)) (comp (ref C33) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -631,6 +554,7 @@ (tstamp 53A8D56C)) (comp (ref C35) (value 100N) + (footprint ipc_capc:IPC_CAPC1005X55N) (fields (field (name Mfr) Murata) (field (name Part) GRM155R61A104KA01)) @@ -639,6 +563,7 @@ (tstamp 53A8D572)) (comp (ref U2) (value REGULATOR_SOT23_5) + (footprint ipc_sot:IPC_SOT95P280X110-5N) (fields (field (name Mfr) Toshiba) (field (name Part) TCR2EF18,LM)) @@ -647,6 +572,7 @@ (tstamp 53A8D586)) (comp (ref C38) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -655,6 +581,7 @@ (tstamp 53A8D58C)) (comp (ref C40) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -663,11 +590,13 @@ (tstamp 53A8D592)) (comp (ref C39) (value DNI) + (footprint ipc_capc:IPC_CAPC1608X90N) (libsource (lib passive) (part C)) (sheetpath (names /hackrf_if/) (tstamps /53A8C780/)) (tstamp 53A8D5AA)) (comp (ref C32) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -676,6 +605,7 @@ (tstamp 53A8D5C2)) (comp (ref C34) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -684,6 +614,7 @@ (tstamp 53A8D5C8)) (comp (ref C36) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -692,6 +623,7 @@ (tstamp 53A8D5DA)) (comp (ref C37) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -699,7 +631,8 @@ (sheetpath (names /hackrf_if/) (tstamps /53A8C780/)) (tstamp 53A8D5E0)) (comp (ref C41) - (value 10U) + (value DNI) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -708,6 +641,7 @@ (tstamp 53A8D62C)) (comp (ref R22) (value 220R) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) (field (name Part) RC0603FR-07220RL)) @@ -716,6 +650,7 @@ (tstamp 53A915E9)) (comp (ref RP4) (value 220R) + (footprint ipc_resc:IPC_RESCAXS80P160X320X60-8N) (fields (field (name Mfr) Panasonic) (field (name Part) EXB-38V221JV)) @@ -724,6 +659,7 @@ (tstamp 53AB047A)) (comp (ref RP6) (value 220R) + (footprint ipc_resc:IPC_RESCAXS80P160X320X60-8N) (fields (field (name Mfr) Panasonic) (field (name Part) EXB-38V221JV)) @@ -732,6 +668,7 @@ (tstamp 53AB04B9)) (comp (ref RP7) (value 220R) + (footprint ipc_resc:IPC_RESCAXS80P160X320X60-8N) (fields (field (name Mfr) Panasonic) (field (name Part) EXB-38V221JV)) @@ -740,6 +677,7 @@ (tstamp 53AB04D6)) (comp (ref R1) (value 220R) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) (field (name Part) RC0603FR-07220RL)) @@ -748,6 +686,7 @@ (tstamp 53AB79CA)) (comp (ref R2) (value 220R) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) (field (name Part) RC0603FR-07220RL)) @@ -756,6 +695,7 @@ (tstamp 53AB79D5)) (comp (ref R3) (value 220R) + (footprint ipc_resc:IPC_RESC1608X55N) (fields (field (name Mfr) Yageo) (field (name Part) RC0603FR-07220RL)) @@ -764,6 +704,7 @@ (tstamp 53AB79EA)) (comp (ref C42) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -772,6 +713,7 @@ (tstamp 53B1911F)) (comp (ref C43) (value 10U) + (footprint ipc_capc:IPC_CAPC2012X140N) (fields (field (name Mfr) Murata) (field (name Part) GRM21BR61A106KE19)) @@ -779,185 +721,6 @@ (sheetpath (names /hackrf_if/) (tstamps /53A8C780/)) (tstamp 53B1A065))) (libparts - (libpart (lib wolfson) (part WM8731SEDS) - (footprints - (fp IPC_SOP65P780X200-28N)) - (fields - (field (name Reference) U) - (field (name Value) WM8731SEDS)) - (pins - (pin (num 1) (name DBVDD) (type power_in)) - (pin (num 2) (name CLKOUT) (type output)) - (pin (num 3) (name BCLK) (type BiDi)) - (pin (num 4) (name DACDAT) (type input)) - (pin (num 5) (name DACLRC) (type BiDi)) - (pin (num 6) (name ADCDAT) (type output)) - (pin (num 7) (name ADCLRC) (type BiDi)) - (pin (num 8) (name HPVDD) (type power_in)) - (pin (num 9) (name LHPOUT) (type output)) - (pin (num 10) (name RHPOUT) (type output)) - (pin (num 11) (name HPGND) (type power_in)) - (pin (num 12) (name LOUT) (type output)) - (pin (num 13) (name ROUT) (type output)) - (pin (num 14) (name AVDD) (type power_in)) - (pin (num 15) (name AGND) (type power_in)) - (pin (num 16) (name VMID) (type output)) - (pin (num 17) (name MICBIAS) (type output)) - (pin (num 18) (name MICIN) (type input)) - (pin (num 19) (name RLINEIN) (type input)) - (pin (num 20) (name LLINEIN) (type input)) - (pin (num 21) (name MODE) (type input)) - (pin (num 22) (name CSB) (type input)) - (pin (num 23) (name SDIN) (type BiDi)) - (pin (num 24) (name SCLK) (type input)) - (pin (num 25) (name XTI/MCLK) (type input)) - (pin (num 26) (name XTO) (type output)) - (pin (num 27) (name DCVDD) (type power_in)) - (pin (num 28) (name DGND) (type power_in)))) - (libpart (lib passive) (part C) - (footprints - (fp IPC_CAPC*)) - (fields - (field (name Reference) C) - (field (name Value) C)) - (pins - (pin (num 1) (name ~) (type passive)) - (pin (num 2) (name ~) (type passive)))) - (libpart (lib passive) (part CP) - (aliases - (alias CAPAPOL)) - (footprints - (fp IPC_CAPCP*) - (fp IPC_CAPAE*) - (fp IPC_CAPMP*)) - (fields - (field (name Reference) C) - (field (name Value) CP)) - (pins - (pin (num 1) (name ~) (type passive)) - (pin (num 2) (name ~) (type passive)))) - (libpart (lib passive) (part L) - (footprints - (fp IPC_INDC*)) - (fields - (field (name Reference) L) - (field (name Value) L)) - (pins - (pin (num 1) (name 1) (type passive)) - (pin (num 2) (name 2) (type passive)))) - (libpart (lib passive) (part R) - (footprints - (fp IPC_RESC*)) - (fields - (field (name Reference) R) - (field (name Value) R)) - (pins - (pin (num 1) (name ~) (type passive)) - (pin (num 2) (name ~) (type passive)))) - (libpart (lib passive) (part RPACK4) - (footprints - (fp IPC_RESCAXS80P160X320X60-8N)) - (fields - (field (name Reference) RP) - (field (name Value) RPACK4)) - (pins - (pin (num 1) (name ~) (type passive)) - (pin (num 2) (name ~) (type passive)) - (pin (num 3) (name ~) (type passive)) - (pin (num 4) (name ~) (type passive)) - (pin (num 5) (name ~) (type passive)) - (pin (num 6) (name ~) (type passive)) - (pin (num 7) (name ~) (type passive)) - (pin (num 8) (name ~) (type passive)))) - (libpart (lib trs_jack) (part TRRS_SW_JACK) - (footprints - (fp CUI_SJ-43516-SMT)) - (fields - (field (name Reference) P) - (field (name Value) TRRS_SW_JACK)) - (pins - (pin (num 1) (name S) (type passive)) - (pin (num 2) (name T) (type passive)) - (pin (num 3) (name R1) (type passive)) - (pin (num 4) (name R2) (type passive)) - (pin (num 5) (name TSW) (type passive)) - (pin (num 6) (name RSW) (type passive)))) - (libpart (lib trs_jack) (part TRS_JACK) - (footprints - (fp CUI_SJ1-352XN) - (fp CUI_SJ-3523-SMT) - (fp CUI_SJ-3524-SMT)) - (fields - (field (name Reference) P) - (field (name Value) TRS_JACK)) - (pins - (pin (num 1) (name S) (type passive)) - (pin (num 2) (name T) (type passive)) - (pin (num 3) (name R) (type passive)))) - (libpart (lib battery) (part BATTERY) - (footprints - (fp MPD_BU2032SM-BT-G)) - (fields - (field (name Reference) BT) - (field (name Value) BATTERY)) - (pins - (pin (num 1) (name +) (type passive)) - (pin (num 2) (name -) (type passive)))) - (libpart (lib mosfet) (part MOSFET_N) - (footprints - (fp IPC_SOT95P230X110-3N)) - (fields - (field (name Reference) Q) - (field (name Value) MOSFET_N)) - (pins - (pin (num 1) (name G) (type passive)) - (pin (num 2) (name S) (type passive)) - (pin (num 3) (name D) (type passive)))) - (libpart (lib microphone) (part MIC_ELECTRET) - (footprints - (fp CUI_CMA-4544PF-W)) - (fields - (field (name Reference) U) - (field (name Value) MIC_ELECTRET)) - (pins - (pin (num 1) (name +) (type output)) - (pin (num 2) (name -) (type output)))) - (libpart (lib sd) (part MICROSD_DETSW) - (footprints - (fp HIROSE_DM3D) - (fp ALPS_SCHA4B0400)) - (fields - (field (name Reference) J) - (field (name Value) MICROSD_DETSW)) - (pins - (pin (num 0) (name GND) (type power_in)) - (pin (num 1) (name DAT2) (type BiDi)) - (pin (num 2) (name DAT3/CD) (type BiDi)) - (pin (num 3) (name CMD) (type BiDi)) - (pin (num 4) (name VDD) (type power_in)) - (pin (num 5) (name CLK) (type input)) - (pin (num 6) (name VSS) (type power_in)) - (pin (num 7) (name DAT0) (type BiDi)) - (pin (num 8) (name DAT1) (type BiDi)) - (pin (num A) (name DETA) (type passive)) - (pin (num B) (name DETB) (type passive)) - (pin (num SH) (name SHIELD) (type passive)))) - (libpart (lib ck) (part CK_TSWB-3N-CB) - (footprints - (fp CK_TSWB-3N-CB*)) - (fields - (field (name Reference) SW) - (field (name Value) CK_TSWB-3N-CB)) - (pins - (pin (num A) (name ROT_A) (type BiDi)) - (pin (num B) (name ROT_B) (type BiDi)) - (pin (num CA) (name COM_A) (type BiDi)) - (pin (num CB) (name COM_B) (type BiDi)) - (pin (num S1) (name SEL) (type BiDi)) - (pin (num S2) (name D) (type BiDi)) - (pin (num S3) (name R) (type BiDi)) - (pin (num S4) (name U) (type BiDi)) - (pin (num S5) (name L) (type BiDi)))) (libpart (lib altera) (part 5M40ZE64) (footprints (fp IPC_QFP40P900X900X120-65N)) @@ -1030,12 +793,293 @@ (pin (num 63) (name IO/DIFFIO_T1p) (type BiDi)) (pin (num 64) (name IO/DIFFIO_L1p) (type BiDi)) (pin (num 65) (name GND) (type power_in)))) + (libpart (lib ck) (part CK_TSWB-3N-CB) + (footprints + (fp CK_TSWB-3N-CB*)) + (fields + (field (name Reference) SW) + (field (name Value) CK_TSWB-3N-CB)) + (pins + (pin (num A) (name ROT_A) (type BiDi)) + (pin (num B) (name ROT_B) (type BiDi)) + (pin (num CA) (name COM_A) (type BiDi)) + (pin (num CB) (name COM_B) (type BiDi)) + (pin (num S1) (name SEL) (type BiDi)) + (pin (num S2) (name D) (type BiDi)) + (pin (num S3) (name R) (type BiDi)) + (pin (num S4) (name U) (type BiDi)) + (pin (num S5) (name L) (type BiDi)))) + (libpart (lib battery) (part BATTERY) + (footprints + (fp MPD_BU2032SM-BT-G)) + (fields + (field (name Reference) BT) + (field (name Value) BATTERY)) + (pins + (pin (num 1) (name +) (type passive)) + (pin (num 2) (name -) (type passive)))) + (libpart (lib trs_jack) (part TRRS_SW_JACK) + (footprints + (fp CUI_SJ-43516-SMT)) + (fields + (field (name Reference) P) + (field (name Value) TRRS_SW_JACK)) + (pins + (pin (num 1) (name S) (type passive)) + (pin (num 2) (name T) (type passive)) + (pin (num 3) (name R1) (type passive)) + (pin (num 4) (name R2) (type passive)) + (pin (num 5) (name TSW) (type passive)) + (pin (num 6) (name RSW) (type passive)))) + (libpart (lib hackrf_expansion) (part HACKRF_ONE_P28) + (footprints + (fp HEADER_11X2_*_254)) + (fields + (field (name Reference) J) + (field (name Value) HACKRF_ONE_P28)) + (pins + (pin (num 1) (name VCC) (type power_out)) + (pin (num 2) (name GND) (type power_in)) + (pin (num 3) (name SD_CD) (type BiDi)) + (pin (num 4) (name SD_DAT3) (type BiDi)) + (pin (num 5) (name SD_DAT2) (type BiDi)) + (pin (num 6) (name SD_DAT1) (type BiDi)) + (pin (num 7) (name SD_DAT0) (type BiDi)) + (pin (num 8) (name SD_VOLT0) (type BiDi)) + (pin (num 9) (name SD_CMD) (type BiDi)) + (pin (num 10) (name SD_POW) (type BiDi)) + (pin (num 11) (name SD_CLK) (type BiDi)) + (pin (num 12) (name GND) (type power_in)) + (pin (num 13) (name GCLK2) (type output)) + (pin (num 14) (name GCK1) (type output)) + (pin (num 15) (name B1AUX14) (type BiDi)) + (pin (num 16) (name B1AUX13) (type BiDi)) + (pin (num 17) (name CPLD_TCK) (type output)) + (pin (num 18) (name BANK2F3M2) (type BiDi)) + (pin (num 19) (name CPLD_TDI) (type input)) + (pin (num 20) (name BANK2F3M6) (type BiDi)) + (pin (num 21) (name BANK2F3M12) (type BiDi)) + (pin (num 22) (name BANK2F3M4) (type BiDi)))) + (libpart (lib hackrf_expansion) (part HACKRF_ONE_P22) + (footprints + (fp HEADER_13X2_*_254)) + (fields + (field (name Reference) J) + (field (name Value) HACKRF_ONE_P22)) + (pins + (pin (num 1) (name CLKOUT) (type output)) + (pin (num 2) (name CLKIN) (type input)) + (pin (num 3) (name RESET#) (type output)) + (pin (num 4) (name GND) (type power_in)) + (pin (num 5) (name I2C1_SCL) (type output)) + (pin (num 6) (name I2C1_SDA) (type BiDi)) + (pin (num 7) (name SPIFI_MISO) (type input)) + (pin (num 8) (name SPIFI_SCK) (type output)) + (pin (num 9) (name SPIFI_MOSI) (type output)) + (pin (num 10) (name GND) (type power_in)) + (pin (num 11) (name VCC) (type power_out)) + (pin (num 12) (name I2S0_RX_SCK) (type output)) + (pin (num 13) (name I2S0_RX_SDA) (type input)) + (pin (num 14) (name I2S0_RX_MCLK) (type output)) + (pin (num 15) (name I2S0_RX_WS) (type output)) + (pin (num 16) (name I2S0_TX_SCK) (type output)) + (pin (num 17) (name I2S0_TX_MCLK) (type output)) + (pin (num 18) (name GND) (type power_in)) + (pin (num 19) (name U0_RXD) (type input)) + (pin (num 20) (name U0_TXD) (type output)) + (pin (num 21) (name P2_9) (type BiDi)) + (pin (num 22) (name P2_13) (type BiDi)) + (pin (num 23) (name P2_8) (type BiDi)) + (pin (num 24) (name SDA) (type BiDi)) + (pin (num 25) (name CLK6) (type output)) + (pin (num 26) (name SCL) (type output)))) + (libpart (lib hackrf_expansion) (part HACKRF_ONE_P20) + (footprints + (fp HEADER_11X2_*_254)) + (fields + (field (name Reference) J) + (field (name Value) HACKRF_ONE_P20)) + (pins + (pin (num 1) (name VBAT) (type power_in)) + (pin (num 2) (name RTC_ALARM) (type output)) + (pin (num 3) (name VCC) (type power_out)) + (pin (num 4) (name WAKEUP) (type input)) + (pin (num 5) (name GPIO3_8) (type BiDi)) + (pin (num 6) (name GPIO3_9) (type BiDi)) + (pin (num 7) (name GPIO3_10) (type BiDi)) + (pin (num 8) (name GPIO3_11) (type BiDi)) + (pin (num 9) (name GPIO3_12) (type BiDi)) + (pin (num 10) (name GPIO3_13) (type BiDi)) + (pin (num 11) (name GPIO3_14) (type BiDi)) + (pin (num 12) (name GPIO3_15) (type BiDi)) + (pin (num 13) (name GND) (type power_in)) + (pin (num 14) (name ADC0_6) (type input)) + (pin (num 15) (name GND) (type power_in)) + (pin (num 16) (name ADC0_2) (type input)) + (pin (num 17) (name VBUSCTRL) (type input)) + (pin (num 18) (name ADC0_5) (type input)) + (pin (num 19) (name GND) (type power_in)) + (pin (num 20) (name ADC0_0) (type input)) + (pin (num 21) (name VBUS) (type output)) + (pin (num 22) (name VIN) (type power_in)))) + (libpart (lib wolfson) (part WM8731SEDS) + (footprints + (fp IPC_SOP65P780X200-28N)) + (fields + (field (name Reference) U) + (field (name Value) WM8731SEDS)) + (pins + (pin (num 1) (name DBVDD) (type power_in)) + (pin (num 2) (name CLKOUT) (type output)) + (pin (num 3) (name BCLK) (type BiDi)) + (pin (num 4) (name DACDAT) (type input)) + (pin (num 5) (name DACLRC) (type BiDi)) + (pin (num 6) (name ADCDAT) (type output)) + (pin (num 7) (name ADCLRC) (type BiDi)) + (pin (num 8) (name HPVDD) (type power_in)) + (pin (num 9) (name LHPOUT) (type output)) + (pin (num 10) (name RHPOUT) (type output)) + (pin (num 11) (name HPGND) (type power_in)) + (pin (num 12) (name LOUT) (type output)) + (pin (num 13) (name ROUT) (type output)) + (pin (num 14) (name AVDD) (type power_in)) + (pin (num 15) (name AGND) (type power_in)) + (pin (num 16) (name VMID) (type output)) + (pin (num 17) (name MICBIAS) (type output)) + (pin (num 18) (name MICIN) (type input)) + (pin (num 19) (name RLINEIN) (type input)) + (pin (num 20) (name LLINEIN) (type input)) + (pin (num 21) (name MODE) (type input)) + (pin (num 22) (name CSB) (type input)) + (pin (num 23) (name SDIN) (type BiDi)) + (pin (num 24) (name SCLK) (type input)) + (pin (num 25) (name XTI/MCLK) (type input)) + (pin (num 26) (name XTO) (type output)) + (pin (num 27) (name DCVDD) (type power_in)) + (pin (num 28) (name DGND) (type power_in)))) + (libpart (lib mosfet) (part MOSFET_N) + (footprints + (fp IPC_SOT95P230X110-3N)) + (fields + (field (name Reference) Q) + (field (name Value) MOSFET_N)) + (pins + (pin (num 1) (name G) (type passive)) + (pin (num 2) (name S) (type passive)) + (pin (num 3) (name D) (type passive)))) + (libpart (lib regulator) (part REGULATOR_SOT23_5) + (footprints + (fp IPC_SOT95P280X110-5N)) + (fields + (field (name Reference) U) + (field (name Value) REGULATOR_SOT23_5)) + (pins + (pin (num 1) (name VIN) (type power_in)) + (pin (num 2) (name GND) (type power_in)) + (pin (num 3) (name EN) (type input)) + (pin (num 4) (name BP) (type input)) + (pin (num 5) (name VOUT) (type power_out)))) + (libpart (lib hole) (part HOLE1) + (footprints + (fp *HOLE*)) + (fields + (field (name Reference) H) + (field (name Value) HOLE1)) + (pins + (pin (num 1) (name ~) (type passive)))) + (libpart (lib sharebrained) (part PORTAPACK_H1) + (footprints + (fp portapack_text_300)) + (fields + (field (name Reference) LOGO) + (field (name Value) PORTAPACK_H1))) + (libpart (lib sharebrained) (part SHAREBRAINED) + (footprints + (fp sharebrained_text_300)) + (fields + (field (name Reference) LOGO) + (field (name Value) SHAREBRAINED))) + (libpart (lib passive) (part C) + (footprints + (fp IPC_CAPC*)) + (fields + (field (name Reference) C) + (field (name Value) C)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib sd) (part MICROSD_DETSW) + (footprints + (fp HIROSE_DM3D) + (fp ALPS_SCHA4B0400)) + (fields + (field (name Reference) J) + (field (name Value) MICROSD_DETSW)) + (pins + (pin (num 0) (name GND) (type power_in)) + (pin (num 1) (name DAT2) (type BiDi)) + (pin (num 2) (name DAT3/CD) (type BiDi)) + (pin (num 3) (name CMD) (type BiDi)) + (pin (num 4) (name VDD) (type power_in)) + (pin (num 5) (name CLK) (type input)) + (pin (num 6) (name VSS) (type power_in)) + (pin (num 7) (name DAT0) (type BiDi)) + (pin (num 8) (name DAT1) (type BiDi)) + (pin (num A) (name DETA) (type passive)) + (pin (num B) (name DETB) (type passive)) + (pin (num SH) (name SHIELD) (type passive)))) (libpart (lib lcd_kingtech) (part KINGTECH_DW0240A2BZ_PANEL) (footprints (fp KINGTECH_DW0240A2BZ_PANEL)) (fields (field (name Reference) LCD) (field (name Value) KINGTECH_DW0240A2BZ_PANEL))) + (libpart (lib passive) (part CP) + (aliases + (alias CAPAPOL)) + (footprints + (fp IPC_CAPCP*) + (fp IPC_CAPAE*) + (fp IPC_CAPMP*)) + (fields + (field (name Reference) C) + (field (name Value) CP)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib passive) (part L) + (footprints + (fp IPC_INDC*)) + (fields + (field (name Reference) L) + (field (name Value) L)) + (pins + (pin (num 1) (name 1) (type passive)) + (pin (num 2) (name 2) (type passive)))) + (libpart (lib passive) (part R) + (footprints + (fp IPC_RESC*)) + (fields + (field (name Reference) R) + (field (name Value) R)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)))) + (libpart (lib passive) (part RPACK4) + (footprints + (fp IPC_RESCAXS80P160X320X60-8N)) + (fields + (field (name Reference) RP) + (field (name Value) RPACK4)) + (pins + (pin (num 1) (name ~) (type passive)) + (pin (num 2) (name ~) (type passive)) + (pin (num 3) (name ~) (type passive)) + (pin (num 4) (name ~) (type passive)) + (pin (num 5) (name ~) (type passive)) + (pin (num 6) (name ~) (type passive)) + (pin (num 7) (name ~) (type passive)) + (pin (num 8) (name ~) (type passive)))) (libpart (lib lcd_kingtech) (part KINGTECH_DW0240A2BZ_FPC) (footprints (fp MOLEX_54132-40XX_LR)) @@ -1084,129 +1128,6 @@ (pin (num 39) (name TP_L) (type passive)) (pin (num 40) (name TP_U) (type passive)) (pin (num SHLD) (name ~) (type passive)))) - (libpart (lib hackrf_expansion) (part HACKRF_ONE_P20) - (footprints - (fp HEADER_11X2_*_254)) - (fields - (field (name Reference) J) - (field (name Value) HACKRF_ONE_P20)) - (pins - (pin (num 1) (name VBAT) (type power_in)) - (pin (num 2) (name RTC_ALARM) (type output)) - (pin (num 3) (name VCC) (type power_out)) - (pin (num 4) (name WAKEUP) (type input)) - (pin (num 5) (name GPIO3_8) (type BiDi)) - (pin (num 6) (name GPIO3_9) (type BiDi)) - (pin (num 7) (name GPIO3_10) (type BiDi)) - (pin (num 8) (name GPIO3_11) (type BiDi)) - (pin (num 9) (name GPIO3_12) (type BiDi)) - (pin (num 10) (name GPIO3_13) (type BiDi)) - (pin (num 11) (name GPIO3_14) (type BiDi)) - (pin (num 12) (name GPIO3_15) (type BiDi)) - (pin (num 13) (name GND) (type power_in)) - (pin (num 14) (name ADC0_6) (type input)) - (pin (num 15) (name GND) (type power_in)) - (pin (num 16) (name ADC0_2) (type input)) - (pin (num 17) (name VBUSCTRL) (type input)) - (pin (num 18) (name ADC0_5) (type input)) - (pin (num 19) (name GND) (type power_in)) - (pin (num 20) (name ADC0_0) (type input)) - (pin (num 21) (name VBUS) (type output)) - (pin (num 22) (name VIN) (type power_in)))) - (libpart (lib hackrf_expansion) (part HACKRF_ONE_P22) - (footprints - (fp HEADER_13X2_*_254)) - (fields - (field (name Reference) J) - (field (name Value) HACKRF_ONE_P22)) - (pins - (pin (num 1) (name CLKOUT) (type output)) - (pin (num 2) (name CLKIN) (type input)) - (pin (num 3) (name RESET#) (type output)) - (pin (num 4) (name GND) (type power_in)) - (pin (num 5) (name I2C1_SCL) (type output)) - (pin (num 6) (name I2C1_SDA) (type BiDi)) - (pin (num 7) (name SPIFI_MISO) (type input)) - (pin (num 8) (name SPIFI_SCK) (type output)) - (pin (num 9) (name SPIFI_MOSI) (type output)) - (pin (num 10) (name GND) (type power_in)) - (pin (num 11) (name VCC) (type power_out)) - (pin (num 12) (name I2S0_RX_SCK) (type output)) - (pin (num 13) (name I2S0_RX_SDA) (type input)) - (pin (num 14) (name I2S0_RX_MCLK) (type output)) - (pin (num 15) (name I2S0_RX_WS) (type output)) - (pin (num 16) (name I2S0_TX_SCK) (type output)) - (pin (num 17) (name I2S0_TX_MCLK) (type output)) - (pin (num 18) (name GND) (type power_in)) - (pin (num 19) (name U0_RXD) (type input)) - (pin (num 20) (name U0_TXD) (type output)) - (pin (num 21) (name P2_9) (type BiDi)) - (pin (num 22) (name P2_13) (type BiDi)) - (pin (num 23) (name P2_8) (type BiDi)) - (pin (num 24) (name SDA) (type BiDi)) - (pin (num 25) (name CLK6) (type output)) - (pin (num 26) (name SCL) (type output)))) - (libpart (lib hackrf_expansion) (part HACKRF_ONE_P28) - (footprints - (fp HEADER_11X2_*_254)) - (fields - (field (name Reference) J) - (field (name Value) HACKRF_ONE_P28)) - (pins - (pin (num 1) (name VCC) (type power_out)) - (pin (num 2) (name GND) (type power_in)) - (pin (num 3) (name SD_CD) (type BiDi)) - (pin (num 4) (name SD_DAT3) (type BiDi)) - (pin (num 5) (name SD_DAT2) (type BiDi)) - (pin (num 6) (name SD_DAT1) (type BiDi)) - (pin (num 7) (name SD_DAT0) (type BiDi)) - (pin (num 8) (name SD_VOLT0) (type BiDi)) - (pin (num 9) (name SD_CMD) (type BiDi)) - (pin (num 10) (name SD_POW) (type BiDi)) - (pin (num 11) (name SD_CLK) (type BiDi)) - (pin (num 12) (name GND) (type power_in)) - (pin (num 13) (name GCLK2) (type output)) - (pin (num 14) (name GCK1) (type output)) - (pin (num 15) (name B1AUX14) (type BiDi)) - (pin (num 16) (name B1AUX13) (type BiDi)) - (pin (num 17) (name CPLD_TCK) (type output)) - (pin (num 18) (name BANK2F3M2) (type BiDi)) - (pin (num 19) (name CPLD_TDI) (type input)) - (pin (num 20) (name BANK2F3M6) (type BiDi)) - (pin (num 21) (name BANK2F3M12) (type BiDi)) - (pin (num 22) (name BANK2F3M4) (type BiDi)))) - (libpart (lib regulator) (part REGULATOR_SOT23_5) - (footprints - (fp IPC_SOT95P280X110-5N)) - (fields - (field (name Reference) U) - (field (name Value) REGULATOR_SOT23_5)) - (pins - (pin (num 1) (name VIN) (type power_in)) - (pin (num 2) (name GND) (type power_in)) - (pin (num 3) (name EN) (type input)) - (pin (num 4) (name BP) (type input)) - (pin (num 5) (name VOUT) (type power_out)))) - (libpart (lib hole) (part HOLE1) - (footprints - (fp *HOLE*)) - (fields - (field (name Reference) H) - (field (name Value) HOLE1)) - (pins - (pin (num 1) (name ~) (type passive)))) - (libpart (lib sharebrained) (part PORTAPACK_H1) - (footprints - (fp portapack_text_300)) - (fields - (field (name Reference) LOGO) - (field (name Value) PORTAPACK_H1))) - (libpart (lib sharebrained) (part SHAREBRAINED) - (footprints - (fp sharebrained_text_300)) - (fields - (field (name Reference) LOGO) - (field (name Value) SHAREBRAINED))) (libpart (lib fiducial) (part FIDUCIAL) (footprints (fp FIDUCIAL_65MIL)) @@ -1214,57 +1135,55 @@ (field (name Reference) FID) (field (name Value) FIDUCIAL)))) (libraries - (library (logical lcd_kingtech) - (uri ../../../../library/kicad/lcd_kingtech.lib)) - (library (logical battery) - (uri ../../../../library/kicad/battery.lib)) - (library (logical trs_jack) - (uri ../../../../library/kicad/trs_jack.lib)) - (library (logical mosfet) - (uri ../../../../library/kicad/mosfet.lib)) - (library (logical microphone) - (uri ../../../../library/kicad/microphone.lib)) - (library (logical sd) - (uri ../../../../library/kicad/sd.lib)) - (library (logical altera) - (uri ../../../../library/kicad/altera.lib)) - (library (logical ck) - (uri ../../../../library/kicad/ck.lib)) (library (logical hackrf_expansion) - (uri ../../../../library/kicad/hackrf_expansion.lib)) - (library (logical passive) - (uri ../../../../library/kicad/passive.lib)) - (library (logical wolfson) - (uri ../../../../library/kicad/wolfson.lib)) + (uri /Users/jboone/src/library-kicad/hackrf_expansion.lib)) + (library (logical battery) + (uri /Users/jboone/src/library-kicad/battery.lib)) + (library (logical ck) + (uri /Users/jboone/src/library-kicad/ck.lib)) + (library (logical altera) + (uri /Users/jboone/src/library-kicad/altera.lib)) + (library (logical lcd_kingtech) + (uri /Users/jboone/src/library-kicad/lcd_kingtech.lib)) (library (logical regulator) - (uri ../../../../library/kicad/regulator.lib)) - (library (logical hole) - (uri ../../../../library/kicad/hole.lib)) + (uri /Users/jboone/src/library-kicad/regulator.lib)) + (library (logical trs_jack) + (uri /Users/jboone/src/library-kicad/trs_jack.lib)) (library (logical fiducial) - (uri ../../../../library/kicad/fiducial.lib)) + (uri /Users/jboone/src/library-kicad/fiducial.lib)) + (library (logical wolfson) + (uri /Users/jboone/src/library-kicad/wolfson.lib)) + (library (logical mosfet) + (uri /Users/jboone/src/library-kicad/mosfet.lib)) (library (logical sharebrained) - (uri ../../../../library/kicad/sharebrained.lib))) + (uri /Users/jboone/src/library-kicad/sharebrained.lib)) + (library (logical sd) + (uri /Users/jboone/src/library-kicad/sd.lib)) + (library (logical hole) + (uri /Users/jboone/src/library-kicad/hole.lib)) + (library (logical passive) + (uri /Users/jboone/src/library-kicad/passive.lib))) (nets (net (code 1) (name /hackrf_if/LCD_BACKLIGHT) - (node (ref U3) (pin 4)) (node (ref Q1) (pin 1)) - (node (ref R20) (pin 2))) + (node (ref R20) (pin 2)) + (node (ref U3) (pin 4))) (net (code 2) (name /hackrf_if/LCD_RESET#) + (node (ref J3) (pin 5)) (node (ref U3) (pin 38)) - (node (ref R19) (pin 1)) - (node (ref J3) (pin 5))) + (node (ref R19) (pin 1))) (net (code 3) (name /hackrf_if/LCD_RS) - (node (ref U3) (pin 43)) - (node (ref J3) (pin 6))) + (node (ref J3) (pin 6)) + (node (ref U3) (pin 43))) (net (code 4) (name /hackrf_if/LCD_RD#) (node (ref U3) (pin 44)) (node (ref J3) (pin 7))) (net (code 5) (name /audio/I2S0_TX_SDA) - (node (ref RP1) (pin 1)) - (node (ref P22) (pin 13))) + (node (ref P22) (pin 13)) + (node (ref RP1) (pin 1))) (net (code 6) (name /audio/I2S0_WS) - (node (ref P22) (pin 15)) - (node (ref RP1) (pin 2))) + (node (ref RP1) (pin 2)) + (node (ref P22) (pin 15))) (net (code 7) (name /audio/I2S0_MCLK) (node (ref RP1) (pin 4)) (node (ref P22) (pin 17))) @@ -1272,20 +1191,20 @@ (node (ref P22) (pin 16)) (node (ref RP1) (pin 3))) (net (code 9) (name /audio/SDA) - (node (ref P22) (pin 24)) - (node (ref U1) (pin 23))) + (node (ref U1) (pin 23)) + (node (ref P22) (pin 24))) (net (code 10) (name /audio/SCL) - (node (ref U1) (pin 24)) - (node (ref P22) (pin 26))) + (node (ref P22) (pin 26)) + (node (ref U1) (pin 24))) (net (code 11) (name /hackrf_if/SD_CD) - (node (ref J2) (pin B)) - (node (ref P28) (pin 3))) + (node (ref P28) (pin 3)) + (node (ref J2) (pin B))) (net (code 12) (name /hackrf_if/SD_DAT2) - (node (ref P28) (pin 5)) - (node (ref J2) (pin 1))) + (node (ref J2) (pin 1)) + (node (ref P28) (pin 5))) (net (code 13) (name /hackrf_if/SD_DAT0) - (node (ref P28) (pin 7)) - (node (ref J2) (pin 7))) + (node (ref J2) (pin 7)) + (node (ref P28) (pin 7))) (net (code 14) (name /hackrf_if/SD_CMD) (node (ref P28) (pin 9)) (node (ref J2) (pin 3))) @@ -1296,29 +1215,29 @@ (node (ref J2) (pin 2)) (node (ref P28) (pin 4))) (net (code 17) (name /hackrf_if/SD_DAT1) - (node (ref P28) (pin 6)) - (node (ref J2) (pin 8))) + (node (ref J2) (pin 8)) + (node (ref P28) (pin 6))) (net (code 18) (name /audio/I2S0_RX_SDA) - (node (ref U1) (pin 6)) - (node (ref R22) (pin 2))) + (node (ref R22) (pin 2)) + (node (ref U1) (pin 6))) (net (code 19) (name /hackrf_if/LCD_WR#) (node (ref J3) (pin 10)) (node (ref U3) (pin 45))) (net (code 20) (name /hackrf_if/LCD_TE) - (node (ref U3) (pin 63)) - (node (ref J3) (pin 34))) + (node (ref J3) (pin 34)) + (node (ref U3) (pin 63))) (net (code 21) (name /hackrf_if/TP_U) - (node (ref P20) (pin 20)) + (node (ref J3) (pin 40)) (node (ref U3) (pin 3)) - (node (ref J3) (pin 40))) + (node (ref P20) (pin 20))) (net (code 22) (name /hackrf_if/TP_R) (node (ref J3) (pin 37)) - (node (ref U3) (pin 64)) - (node (ref P20) (pin 14))) + (node (ref P20) (pin 14)) + (node (ref U3) (pin 64))) (net (code 23) (name /hackrf_if/TP_D) (node (ref P20) (pin 16)) - (node (ref U3) (pin 1)) - (node (ref J3) (pin 38))) + (node (ref J3) (pin 38)) + (node (ref U3) (pin 1))) (net (code 24) (name /hackrf_if/TP_L) (node (ref U3) (pin 2)) (node (ref J3) (pin 39)) @@ -1339,490 +1258,428 @@ (node (ref U3) (pin 11)) (node (ref SW1) (pin A))) (net (code 30) (name /hackrf_if/SW_ROT_B) - (node (ref U3) (pin 12)) - (node (ref SW1) (pin B))) + (node (ref SW1) (pin B)) + (node (ref U3) (pin 12))) (net (code 31) (name /hackrf_if/SW_SEL) (node (ref SW1) (pin S1)) (node (ref U3) (pin 13))) (net (code 32) (name GND) - (node (ref H5) (pin 1)) - (node (ref H4) (pin 1)) - (node (ref H3) (pin 1)) - (node (ref H2) (pin 1)) - (node (ref J2) (pin A)) - (node (ref H1) (pin 1)) - (node (ref J2) (pin SH)) - (node (ref C9) (pin 2)) - (node (ref C7) (pin 2)) - (node (ref C12) (pin 2)) - (node (ref C8) (pin 2)) - (node (ref J3) (pin 14)) - (node (ref L10) (pin 2)) - (node (ref J3) (pin 15)) - (node (ref L1) (pin 2)) - (node (ref J3) (pin 35)) - (node (ref J3) (pin 16)) - (node (ref R8) (pin 1)) - (node (ref J3) (pin 17)) - (node (ref R9) (pin 2)) - (node (ref C15) (pin 2)) - (node (ref C13) (pin 2)) - (node (ref C11) (pin 2)) (node (ref U3) (pin 65)) - (node (ref C2) (pin 2)) + (node (ref C43) (pin 2)) + (node (ref C41) (pin 2)) + (node (ref U2) (pin 2)) + (node (ref C38) (pin 2)) + (node (ref C40) (pin 2)) + (node (ref C31) (pin 2)) + (node (ref C37) (pin 2)) + (node (ref C36) (pin 2)) + (node (ref C34) (pin 2)) + (node (ref C32) (pin 2)) + (node (ref C42) (pin 2)) + (node (ref C35) (pin 2)) + (node (ref C33) (pin 2)) + (node (ref C39) (pin 2)) + (node (ref Q1) (pin 2)) (node (ref J3) (pin 12)) - (node (ref C5) (pin 2)) - (node (ref C4) (pin 2)) (node (ref J3) (pin 11)) (node (ref J3) (pin 9)) (node (ref J3) (pin 8)) (node (ref J3) (pin 3)) (node (ref J3) (pin 13)) - (node (ref U2) (pin 2)) - (node (ref C35) (pin 2)) - (node (ref C33) (pin 2)) - (node (ref C31) (pin 2)) - (node (ref Q1) (pin 2)) - (node (ref P20) (pin 13)) - (node (ref P20) (pin 15)) - (node (ref C40) (pin 2)) - (node (ref C38) (pin 2)) - (node (ref SW1) (pin CB)) - (node (ref SW1) (pin CA)) - (node (ref C29) (pin 2)) + (node (ref J3) (pin 14)) + (node (ref J3) (pin 15)) + (node (ref J3) (pin 35)) + (node (ref J3) (pin 16)) + (node (ref J3) (pin 17)) + (node (ref J2) (pin A)) + (node (ref J2) (pin SH)) (node (ref C27) (pin 2)) - (node (ref C30) (pin 2)) - (node (ref BT1) (pin 2)) - (node (ref C28) (pin 2)) - (node (ref C37) (pin 2)) - (node (ref C36) (pin 2)) - (node (ref C34) (pin 2)) - (node (ref C32) (pin 2)) + (node (ref SW1) (pin CA)) + (node (ref SW1) (pin CB)) (node (ref C26) (pin 2)) - (node (ref C39) (pin 2)) - (node (ref U1) (pin 15)) - (node (ref C42) (pin 2)) - (node (ref C43) (pin 2)) - (node (ref C3) (pin 2)) + (node (ref P20) (pin 15)) + (node (ref P20) (pin 19)) + (node (ref P22) (pin 4)) + (node (ref P22) (pin 10)) + (node (ref P20) (pin 13)) + (node (ref R20) (pin 1)) (node (ref J2) (pin 0)) - (node (ref L6) (pin 2)) (node (ref J2) (pin 6)) (node (ref J3) (pin SHLD)) (node (ref R19) (pin 2)) - (node (ref R14) (pin 2)) - (node (ref U1) (pin 11)) - (node (ref U1) (pin 21)) - (node (ref U1) (pin 22)) (node (ref P22) (pin 18)) (node (ref P28) (pin 2)) - (node (ref R13) (pin 1)) (node (ref P28) (pin 12)) - (node (ref C41) (pin 2)) - (node (ref C14) (pin 1)) - (node (ref X1) (pin 2)) + (node (ref C13) (pin 2)) + (node (ref C12) (pin 2)) + (node (ref R17) (pin 2)) + (node (ref C25) (pin 2)) (node (ref R11) (pin 1)) (node (ref R12) (pin 2)) - (node (ref R20) (pin 1)) - (node (ref P22) (pin 10)) - (node (ref P22) (pin 4)) - (node (ref P20) (pin 19)) - (node (ref C25) (pin 2)) - (node (ref R17) (pin 2)) - (node (ref U1) (pin 28)) - (node (ref C6) (pin 2)) - (node (ref C10) (pin 2)) + (node (ref C22) (pin 1)) (node (ref C23) (pin 2)) - (node (ref C22) (pin 1))) + (node (ref U1) (pin 11)) + (node (ref C3) (pin 2)) + (node (ref C10) (pin 2)) + (node (ref C6) (pin 2)) + (node (ref C2) (pin 2)) + (node (ref C5) (pin 2)) + (node (ref C4) (pin 2)) + (node (ref U1) (pin 15)) + (node (ref U1) (pin 28)) + (node (ref C8) (pin 2)) + (node (ref C9) (pin 2)) + (node (ref C7) (pin 2)) + (node (ref H5) (pin 1)) + (node (ref H4) (pin 1)) + (node (ref H3) (pin 1)) + (node (ref H2) (pin 1)) + (node (ref H1) (pin 1)) + (node (ref U1) (pin 21)) + (node (ref U1) (pin 22)) + (node (ref L6) (pin 2)) + (node (ref C28) (pin 2)) + (node (ref BT1) (pin 2)) + (node (ref C11) (pin 2)) + (node (ref C29) (pin 2)) + (node (ref C30) (pin 2))) (net (code 33) (name "Net-(C24-Pad1)") - (node (ref C24) (pin 1)) - (node (ref R10) (pin 1))) - (net (code 34) (name "Net-(L8-Pad2)") - (node (ref R16) (pin 1)) - (node (ref L8) (pin 2))) - (net (code 35) (name "Net-(L8-Pad1)") - (node (ref P3) (pin 3)) - (node (ref L8) (pin 1))) - (net (code 36) (name "Net-(L7-Pad2)") - (node (ref R15) (pin 1)) - (node (ref L7) (pin 2))) - (net (code 37) (name "Net-(L7-Pad1)") - (node (ref P3) (pin 2)) - (node (ref L7) (pin 1))) - (net (code 38) (name "Net-(L3-Pad2)") - (node (ref L3) (pin 2)) - (node (ref P1) (pin 3))) - (net (code 39) (name "Net-(L3-Pad1)") - (node (ref L3) (pin 1)) - (node (ref R7) (pin 2))) - (net (code 40) (name "Net-(L2-Pad2)") - (node (ref L2) (pin 2)) - (node (ref P1) (pin 2))) - (net (code 41) (name "Net-(L2-Pad1)") - (node (ref R6) (pin 2)) - (node (ref L2) (pin 1))) - (net (code 42) (name /audio/RLINEIN) - (node (ref U1) (pin 19)) - (node (ref C17) (pin 1))) - (net (code 43) (name /audio/LLINEIN) - (node (ref C16) (pin 1)) - (node (ref U1) (pin 20))) - (net (code 44) (name "Net-(C24-Pad2)") - (node (ref R17) (pin 1)) - (node (ref X1) (pin 1)) + (node (ref R10) (pin 1)) + (node (ref C24) (pin 1))) + (net (code 34) (name "Net-(C24-Pad2)") + (node (ref C24) (pin 2)) (node (ref R18) (pin 2)) (node (ref L9) (pin 2)) - (node (ref C24) (pin 2)) + (node (ref R17) (pin 1)) (node (ref C25) (pin 1))) - (net (code 45) (name "Net-(L5-Pad1)") - (node (ref P2) (pin 3)) - (node (ref L5) (pin 1))) - (net (code 46) (name "Net-(L4-Pad1)") - (node (ref P2) (pin 2)) - (node (ref L4) (pin 1))) - (net (code 47) (name "Net-(L6-Pad1)") + (net (code 35) (name /audio/VMID) + (node (ref C8) (pin 1)) + (node (ref C6) (pin 1)) + (node (ref U1) (pin 16))) + (net (code 36) (name /audio/MICBIAS) + (node (ref C10) (pin 1)) + (node (ref C12) (pin 1)) + (node (ref U1) (pin 17)) + (node (ref R18) (pin 1))) + (net (code 37) (name "Net-(L5-Pad1)") + (node (ref L5) (pin 1)) + (node (ref P2) (pin 3))) + (net (code 38) (name "Net-(L4-Pad1)") + (node (ref L4) (pin 1)) + (node (ref P2) (pin 2))) + (net (code 39) (name "Net-(L6-Pad1)") (node (ref P2) (pin 4)) (node (ref L6) (pin 1))) - (net (code 48) (name "Net-(L9-Pad1)") + (net (code 40) (name "Net-(L9-Pad1)") (node (ref P2) (pin 1)) (node (ref L9) (pin 1))) - (net (code 49) (name /audio/LOUT) - (node (ref C20) (pin 1)) - (node (ref U1) (pin 12))) - (net (code 50) (name /audio/ROUT) - (node (ref C21) (pin 1)) - (node (ref U1) (pin 13))) - (net (code 51) (name "Net-(C18-Pad2)") + (net (code 41) (name /audio/I2S0_TX_SDA_R) + (node (ref RP1) (pin 8)) + (node (ref U1) (pin 4))) + (net (code 42) (name /audio/I2S0_WS_R) + (node (ref RP1) (pin 7)) + (node (ref U1) (pin 7)) + (node (ref U1) (pin 5))) + (net (code 43) (name /audio/I2S0_SCK_R) + (node (ref U1) (pin 3)) + (node (ref RP1) (pin 6))) + (net (code 44) (name /audio/I2S0_MCLK_R) + (node (ref RP1) (pin 5)) + (node (ref U1) (pin 25))) + (net (code 45) (name +3.3V) + (node (ref C30) (pin 1)) + (node (ref U1) (pin 8)) + (node (ref J2) (pin 4)) + (node (ref U2) (pin 1)) + (node (ref C13) (pin 1)) + (node (ref U3) (pin 23)) + (node (ref J3) (pin 2)) + (node (ref U1) (pin 14)) + (node (ref C11) (pin 1)) + (node (ref U3) (pin 6)) + (node (ref C2) (pin 1)) + (node (ref C38) (pin 1)) + (node (ref C28) (pin 1)) + (node (ref P22) (pin 11)) + (node (ref C3) (pin 1)) + (node (ref C26) (pin 1)) + (node (ref C27) (pin 1)) + (node (ref C34) (pin 1)) + (node (ref C32) (pin 1)) + (node (ref P28) (pin 1)) + (node (ref C43) (pin 1)) + (node (ref C7) (pin 1)) + (node (ref C42) (pin 1)) + (node (ref C9) (pin 1)) + (node (ref J3) (pin 4)) + (node (ref C5) (pin 1)) + (node (ref C4) (pin 1)) + (node (ref P20) (pin 3)) + (node (ref U1) (pin 27)) + (node (ref U2) (pin 3)) + (node (ref U1) (pin 1))) + (net (code 46) (name "Net-(P2-Pad6)") + (node (ref P2) (pin 6))) + (net (code 47) (name "Net-(P2-Pad5)") + (node (ref P2) (pin 5))) + (net (code 48) (name "Net-(C18-Pad2)") (node (ref C22) (pin 2)) (node (ref R11) (pin 2)) - (node (ref C18) (pin 2)) - (node (ref L4) (pin 2))) - (net (code 52) (name "Net-(C19-Pad2)") + (node (ref L4) (pin 2)) + (node (ref C18) (pin 2))) + (net (code 49) (name "Net-(C19-Pad2)") (node (ref L5) (pin 2)) (node (ref C19) (pin 2)) (node (ref R12) (pin 1)) (node (ref C23) (pin 1))) - (net (code 53) (name "Net-(C21-Pad2)") - (node (ref R14) (pin 1)) - (node (ref C21) (pin 2)) - (node (ref R16) (pin 2))) - (net (code 54) (name "Net-(C20-Pad2)") - (node (ref R15) (pin 2)) - (node (ref C20) (pin 2)) - (node (ref R13) (pin 2))) - (net (code 55) (name +3.3V) - (node (ref U1) (pin 8)) - (node (ref C42) (pin 1)) - (node (ref U1) (pin 14)) - (node (ref C43) (pin 1)) - (node (ref U3) (pin 6)) - (node (ref P28) (pin 1)) - (node (ref C7) (pin 1)) - (node (ref C9) (pin 1)) - (node (ref C13) (pin 1)) - (node (ref C11) (pin 1)) - (node (ref C2) (pin 1)) - (node (ref C5) (pin 1)) - (node (ref C4) (pin 1)) - (node (ref J3) (pin 4)) - (node (ref J3) (pin 2)) - (node (ref P20) (pin 3)) - (node (ref C38) (pin 1)) - (node (ref U2) (pin 3)) - (node (ref U2) (pin 1)) - (node (ref C34) (pin 1)) - (node (ref C32) (pin 1)) - (node (ref C26) (pin 1)) - (node (ref U3) (pin 23)) - (node (ref C30) (pin 1)) - (node (ref C27) (pin 1)) - (node (ref C28) (pin 1)) - (node (ref P22) (pin 11)) - (node (ref U1) (pin 1)) - (node (ref U1) (pin 27)) - (node (ref J2) (pin 4)) - (node (ref C3) (pin 1))) - (net (code 56) (name "Net-(P2-Pad6)") - (node (ref P2) (pin 6))) - (net (code 57) (name "Net-(P2-Pad5)") - (node (ref P2) (pin 5))) - (net (code 58) (name "Net-(C14-Pad2)") - (node (ref R6) (pin 1)) - (node (ref R8) (pin 2)) - (node (ref C14) (pin 2)) - (node (ref C16) (pin 2))) - (net (code 59) (name "Net-(C15-Pad1)") - (node (ref C15) (pin 1)) - (node (ref R7) (pin 1)) - (node (ref C17) (pin 2)) - (node (ref R9) (pin 1))) - (net (code 60) (name "Net-(L1-Pad1)") - (node (ref L1) (pin 1)) - (node (ref P1) (pin 1))) - (net (code 61) (name "Net-(L10-Pad1)") - (node (ref P3) (pin 1)) - (node (ref L10) (pin 1))) - (net (code 62) (name "Net-(U1-Pad2)") - (node (ref U1) (pin 2))) - (net (code 63) (name "Net-(U1-Pad26)") - (node (ref U1) (pin 26))) - (net (code 64) (name /audio/RHPOUT) - (node (ref U1) (pin 10)) - (node (ref C19) (pin 1))) - (net (code 65) (name /audio/LHPOUT) - (node (ref C18) (pin 1)) - (node (ref U1) (pin 9))) - (net (code 66) (name /audio/MICIN) + (net (code 50) (name "Net-(U1-Pad13)") + (node (ref U1) (pin 13))) + (net (code 51) (name "Net-(U1-Pad12)") + (node (ref U1) (pin 12))) + (net (code 52) (name "Net-(U1-Pad19)") + (node (ref U1) (pin 19))) + (net (code 53) (name "Net-(U1-Pad20)") + (node (ref U1) (pin 20))) + (net (code 54) (name /audio/MICIN) (node (ref R10) (pin 2)) (node (ref U1) (pin 18))) - (net (code 67) (name /audio/MICBIAS) - (node (ref C10) (pin 1)) - (node (ref R18) (pin 1)) - (node (ref U1) (pin 17)) - (node (ref C12) (pin 1))) - (net (code 68) (name /audio/VMID) - (node (ref U1) (pin 16)) - (node (ref C6) (pin 1)) - (node (ref C8) (pin 1))) - (net (code 69) (name /audio/I2S0_WS_R) - (node (ref U1) (pin 5)) - (node (ref U1) (pin 7)) - (node (ref RP1) (pin 7))) - (net (code 70) (name /audio/I2S0_MCLK_R) - (node (ref U1) (pin 25)) - (node (ref RP1) (pin 5))) - (net (code 71) (name /audio/I2S0_TX_SDA_R) - (node (ref RP1) (pin 8)) - (node (ref U1) (pin 4))) - (net (code 72) (name /audio/I2S0_SCK_R) - (node (ref U1) (pin 3)) - (node (ref RP1) (pin 6))) - (net (code 73) (name /hackrf_if/CPLD_TCK) + (net (code 55) (name "Net-(U1-Pad2)") + (node (ref U1) (pin 2))) + (net (code 56) (name /audio/RHPOUT) + (node (ref C19) (pin 1)) + (node (ref U1) (pin 10))) + (net (code 57) (name /audio/LHPOUT) + (node (ref U1) (pin 9)) + (node (ref C18) (pin 1))) + (net (code 58) (name "Net-(U1-Pad26)") + (node (ref U1) (pin 26))) + (net (code 59) (name /hackrf_if/H1_CPLD_TCK) (node (ref U3) (pin 16)) (node (ref P28) (pin 17))) - (net (code 74) (name "Net-(C39-Pad1)") + (net (code 60) (name "Net-(C39-Pad1)") (node (ref U2) (pin 4)) (node (ref C39) (pin 1))) - (net (code 75) (name /hackrf_if/P1_5) + (net (code 61) (name "Net-(U3-Pad36)") + (node (ref U3) (pin 36))) + (net (code 62) (name /hackrf_if/PP_CPLD_TDO) (node (ref P28) (pin 10)) (node (ref U3) (pin 17))) - (net (code 76) (name "Net-(U3-Pad37)") + (net (code 63) (name "Net-(U3-Pad37)") (node (ref U3) (pin 37))) - (net (code 77) (name /hackrf_if/P2_1_R) - (node (ref RP4) (pin 8)) - (node (ref U3) (pin 33))) - (net (code 78) (name "Net-(U3-Pad35)") + (net (code 64) (name "Net-(U3-Pad35)") (node (ref U3) (pin 35))) - (net (code 79) (name "Net-(U3-Pad36)") - (node (ref U3) (pin 36))) - (net (code 80) (name /hackrf_if/P2_0_R) - (node (ref U3) (pin 32)) - (node (ref R3) (pin 1))) - (net (code 81) (name /hackrf_if/GPIO3_8) - (node (ref P20) (pin 5)) - (node (ref RP7) (pin 3))) - (net (code 82) (name /hackrf_if/GPIO3_9) - (node (ref P20) (pin 6)) - (node (ref RP7) (pin 4))) - (net (code 83) (name /hackrf_if/GPIO3_10) - (node (ref RP7) (pin 2)) - (node (ref P20) (pin 7))) - (net (code 84) (name /hackrf_if/GPIO3_11) - (node (ref RP7) (pin 1)) - (node (ref P20) (pin 8))) - (net (code 85) (name /hackrf_if/GPIO3_12) - (node (ref RP6) (pin 3)) - (node (ref P20) (pin 9))) - (net (code 86) (name /hackrf_if/GPIO3_13) - (node (ref P20) (pin 10)) - (node (ref RP6) (pin 4))) - (net (code 87) (name /hackrf_if/GPIO3_14) - (node (ref RP6) (pin 2)) - (node (ref P20) (pin 11))) - (net (code 88) (name /hackrf_if/GPIO3_15) - (node (ref RP6) (pin 1)) - (node (ref P20) (pin 12))) - (net (code 89) (name /hackrf_if/P2_13) - (node (ref P22) (pin 22)) - (node (ref RP4) (pin 4))) - (net (code 90) (name /hackrf_if/P1_8) - (node (ref P28) (pin 8)) - (node (ref U3) (pin 14))) - (net (code 91) (name /hackrf_if/RESET#) - (node (ref P22) (pin 3)) - (node (ref U3) (pin 29))) - (net (code 92) (name /hackrf_if/P2_4_R) - (node (ref U3) (pin 30)) - (node (ref R1) (pin 1))) - (net (code 93) (name /hackrf_if/CPLD_TDI) + (net (code 65) (name /hackrf_if/MCU_LCD_RD_R) + (node (ref R1) (pin 1)) + (node (ref U3) (pin 30))) + (net (code 66) (name /hackrf_if/H1_CPLD_TDI) (node (ref P28) (pin 19)) (node (ref R22) (pin 1)) (node (ref U3) (pin 15))) - (net (code 94) (name /hackrf_if/P2_9) - (node (ref RP4) (pin 3)) - (node (ref P22) (pin 21))) - (net (code 95) (name /hackrf_if/P2_8_R) + (net (code 67) (name /hackrf_if/MCU_ADDR_R) + (node (ref RP4) (pin 8)) + (node (ref U3) (pin 33))) + (net (code 68) (name /hackrf_if/MCU_IO_STBX_R) + (node (ref U3) (pin 32)) + (node (ref R3) (pin 1))) + (net (code 69) (name /hackrf_if/MCU_D0) + (node (ref P20) (pin 5)) + (node (ref RP7) (pin 3))) + (net (code 70) (name /hackrf_if/MCU_D1) + (node (ref RP7) (pin 4)) + (node (ref P20) (pin 6))) + (net (code 71) (name /hackrf_if/MCU_D2) + (node (ref RP7) (pin 2)) + (node (ref P20) (pin 7))) + (net (code 72) (name /hackrf_if/MCU_D3) + (node (ref P20) (pin 8)) + (node (ref RP7) (pin 1))) + (net (code 73) (name /hackrf_if/MCU_D4) + (node (ref P20) (pin 9)) + (node (ref RP6) (pin 3))) + (net (code 74) (name /hackrf_if/MCU_D5) + (node (ref RP6) (pin 4)) + (node (ref P20) (pin 10))) + (net (code 75) (name /hackrf_if/MCU_D6) + (node (ref RP6) (pin 2)) + (node (ref P20) (pin 11))) + (net (code 76) (name /hackrf_if/MCU_D7) + (node (ref P20) (pin 12)) + (node (ref RP6) (pin 1))) + (net (code 77) (name /hackrf_if/MCU_DIR) + (node (ref P22) (pin 22)) + (node (ref RP4) (pin 4))) + (net (code 78) (name /hackrf_if/PP_CPLD_TMS) + (node (ref P28) (pin 8)) + (node (ref U3) (pin 14))) + (net (code 79) (name /hackrf_if/RESET#) + (node (ref P22) (pin 3)) + (node (ref U3) (pin 29))) + (net (code 80) (name /hackrf_if/MCU_LCD_WR) + (node (ref P22) (pin 21)) + (node (ref RP4) (pin 3))) + (net (code 81) (name "Net-(U3-Pad7)") + (node (ref U3) (pin 7))) + (net (code 82) (name "Net-(U3-Pad5)") + (node (ref U3) (pin 5))) + (net (code 83) (name /hackrf_if/P2_8) + (node (ref RP4) (pin 2)) + (node (ref P22) (pin 23))) + (net (code 84) (name /hackrf_if/P2_8_R) (node (ref U3) (pin 34)) (node (ref RP4) (pin 7))) - (net (code 96) (name "Net-(U3-Pad7)") - (node (ref U3) (pin 7))) - (net (code 97) (name "Net-(U3-Pad5)") - (node (ref U3) (pin 5))) - (net (code 98) (name /hackrf_if/P2_8) - (node (ref P22) (pin 23)) - (node (ref RP4) (pin 2))) - (net (code 99) (name /hackrf_if/VBAT) + (net (code 85) (name /hackrf_if/VBAT) (node (ref C41) (pin 1)) (node (ref BT1) (pin 1)) (node (ref P20) (pin 1))) - (net (code 100) (name /hackrf_if/P2_3_R) + (net (code 86) (name /hackrf_if/MCU_LCD_TE_R) (node (ref R2) (pin 1)) (node (ref U3) (pin 31))) - (net (code 101) (name +1.8V) - (node (ref C35) (pin 1)) - (node (ref C31) (pin 1)) - (node (ref C29) (pin 1)) - (node (ref U2) (pin 5)) + (net (code 87) (name +1.8V) (node (ref C40) (pin 1)) - (node (ref U3) (pin 57)) - (node (ref U3) (pin 39)) + (node (ref C31) (pin 1)) + (node (ref U2) (pin 5)) (node (ref J3) (pin 36)) - (node (ref U3) (pin 41)) (node (ref C33) (pin 1)) - (node (ref C37) (pin 1)) + (node (ref C29) (pin 1)) + (node (ref C35) (pin 1)) + (node (ref U3) (pin 41)) + (node (ref U3) (pin 57)) + (node (ref U3) (pin 8)) + (node (ref U3) (pin 39)) (node (ref C36) (pin 1)) - (node (ref U3) (pin 8))) - (net (code 102) (name /hackrf_if/GPIO3_15_R) + (node (ref C37) (pin 1))) + (net (code 88) (name /hackrf_if/MCU_D7_R) (node (ref U3) (pin 18)) (node (ref RP6) (pin 8))) - (net (code 103) (name /hackrf_if/GPIO3_14_R) + (net (code 89) (name /hackrf_if/MCU_D6_R) (node (ref U3) (pin 19)) (node (ref RP6) (pin 7))) - (net (code 104) (name /hackrf_if/GPIO3_12_R) + (net (code 90) (name /hackrf_if/MCU_D4_R) (node (ref U3) (pin 20)) (node (ref RP6) (pin 6))) - (net (code 105) (name /hackrf_if/GPIO3_13_R) - (node (ref U3) (pin 21)) - (node (ref RP6) (pin 5))) - (net (code 106) (name /hackrf_if/GPIO3_11_R) + (net (code 91) (name /hackrf_if/MCU_D5_R) + (node (ref RP6) (pin 5)) + (node (ref U3) (pin 21))) + (net (code 92) (name /hackrf_if/MCU_D3_R) (node (ref U3) (pin 22)) (node (ref RP7) (pin 8))) - (net (code 107) (name /hackrf_if/GPIO3_10_R) + (net (code 93) (name /hackrf_if/MCU_D2_R) (node (ref RP7) (pin 7)) (node (ref U3) (pin 24))) - (net (code 108) (name /hackrf_if/GPIO3_8_R) - (node (ref U3) (pin 26)) - (node (ref RP7) (pin 6))) - (net (code 109) (name /hackrf_if/GPIO3_9_R) - (node (ref U3) (pin 27)) - (node (ref RP7) (pin 5))) - (net (code 110) (name /hackrf_if/P2_13_R) - (node (ref RP4) (pin 5)) - (node (ref U3) (pin 42))) - (net (code 111) (name /hackrf_if/P2_9_R) - (node (ref RP4) (pin 6)) - (node (ref U3) (pin 40))) - (net (code 112) (name /hackrf_if/P2_4) + (net (code 94) (name /hackrf_if/MCU_D0_R) + (node (ref RP7) (pin 6)) + (node (ref U3) (pin 26))) + (net (code 95) (name /hackrf_if/MCU_D1_R) + (node (ref RP7) (pin 5)) + (node (ref U3) (pin 27))) + (net (code 96) (name /hackrf_if/MCU_DIR_R) + (node (ref U3) (pin 42)) + (node (ref RP4) (pin 5))) + (net (code 97) (name /hackrf_if/MCU_LCD_WR_R) + (node (ref U3) (pin 40)) + (node (ref RP4) (pin 6))) + (net (code 98) (name /hackrf_if/MCU_LCD_RD) (node (ref R1) (pin 2)) (node (ref P22) (pin 5))) - (net (code 113) (name /hackrf_if/P2_1) - (node (ref RP4) (pin 1)) - (node (ref P22) (pin 19))) - (net (code 114) (name /hackrf_if/P2_0) - (node (ref P22) (pin 20)) - (node (ref R3) (pin 2))) - (net (code 115) (name "Net-(P20-Pad22)") + (net (code 99) (name /hackrf_if/MCU_ADDR) + (node (ref P22) (pin 19)) + (node (ref RP4) (pin 1))) + (net (code 100) (name /hackrf_if/MCU_IO_STBX) + (node (ref R3) (pin 2)) + (node (ref P22) (pin 20))) + (net (code 101) (name "Net-(P20-Pad22)") (node (ref P20) (pin 22))) - (net (code 116) (name "Net-(P20-Pad21)") + (net (code 102) (name "Net-(P20-Pad21)") (node (ref P20) (pin 21))) - (net (code 117) (name "Net-(P20-Pad4)") + (net (code 103) (name "Net-(P20-Pad4)") (node (ref P20) (pin 4))) - (net (code 118) (name "Net-(P20-Pad2)") + (net (code 104) (name "Net-(P20-Pad2)") (node (ref P20) (pin 2))) - (net (code 119) (name "Net-(P22-Pad14)") + (net (code 105) (name "Net-(P22-Pad14)") (node (ref P22) (pin 14))) - (net (code 120) (name "Net-(P22-Pad12)") + (net (code 106) (name "Net-(P22-Pad12)") (node (ref P22) (pin 12))) - (net (code 121) (name "Net-(P22-Pad25)") - (node (ref P22) (pin 25))) - (net (code 122) (name "Net-(P22-Pad9)") + (net (code 107) (name "Net-(P22-Pad9)") (node (ref P22) (pin 9))) - (net (code 123) (name "Net-(P22-Pad8)") + (net (code 108) (name "Net-(P22-Pad8)") (node (ref P22) (pin 8))) - (net (code 124) (name "Net-(P22-Pad7)") + (net (code 109) (name "Net-(P22-Pad7)") (node (ref P22) (pin 7))) - (net (code 125) (name /hackrf_if/P2_3) + (net (code 110) (name /hackrf_if/MCU_LCD_TE) (node (ref R2) (pin 2)) (node (ref P22) (pin 6))) - (net (code 126) (name "Net-(P22-Pad2)") + (net (code 111) (name "Net-(P22-Pad2)") (node (ref P22) (pin 2))) - (net (code 127) (name "Net-(P22-Pad1)") + (net (code 112) (name "Net-(P22-Pad1)") (node (ref P22) (pin 1))) - (net (code 128) (name "Net-(P20-Pad17)") + (net (code 113) (name "Net-(P20-Pad17)") (node (ref P20) (pin 17))) - (net (code 129) (name "Net-(P28-Pad13)") + (net (code 114) (name "Net-(P28-Pad13)") (node (ref P28) (pin 13))) - (net (code 130) (name "Net-(P28-Pad14)") + (net (code 115) (name "Net-(P28-Pad14)") (node (ref P28) (pin 14))) - (net (code 131) (name "Net-(P28-Pad16)") + (net (code 116) (name "Net-(P28-Pad16)") (node (ref P28) (pin 16))) - (net (code 132) (name "Net-(P28-Pad15)") + (net (code 117) (name "Net-(P28-Pad15)") (node (ref P28) (pin 15))) - (net (code 133) (name "Net-(P28-Pad21)") + (net (code 118) (name "Net-(P28-Pad21)") (node (ref P28) (pin 21))) - (net (code 134) (name "Net-(P28-Pad22)") + (net (code 119) (name "Net-(P28-Pad22)") (node (ref P28) (pin 22))) - (net (code 135) (name "Net-(P28-Pad20)") + (net (code 120) (name "Net-(P28-Pad20)") (node (ref P28) (pin 20))) - (net (code 136) (name "Net-(P28-Pad18)") + (net (code 121) (name "Net-(P28-Pad18)") (node (ref P28) (pin 18))) - (net (code 137) (name "Net-(J3-Pad1)") + (net (code 122) (name "Net-(P22-Pad25)") + (node (ref P22) (pin 25))) + (net (code 123) (name "Net-(J3-Pad1)") (node (ref Q1) (pin 3)) (node (ref J3) (pin 1))) - (net (code 138) (name /hackrf_if/LCD_DB4) - (node (ref U3) (pin 58)) - (node (ref J3) (pin 29))) - (net (code 139) (name /hackrf_if/LCD_DB5) - (node (ref U3) (pin 56)) - (node (ref J3) (pin 28))) - (net (code 140) (name /hackrf_if/LCD_DB6) + (net (code 124) (name /hackrf_if/LCD_DB4) + (node (ref J3) (pin 29)) + (node (ref U3) (pin 58))) + (net (code 125) (name /hackrf_if/LCD_DB5) + (node (ref J3) (pin 28)) + (node (ref U3) (pin 56))) + (net (code 126) (name /hackrf_if/LCD_DB6) (node (ref J3) (pin 27)) (node (ref U3) (pin 55))) - (net (code 141) (name /hackrf_if/LCD_DB7) + (net (code 127) (name /hackrf_if/LCD_DB7) (node (ref J3) (pin 26)) (node (ref U3) (pin 54))) - (net (code 142) (name /hackrf_if/LCD_DB8) - (node (ref J3) (pin 25)) - (node (ref U3) (pin 53))) - (net (code 143) (name /hackrf_if/LCD_DB9) - (node (ref J3) (pin 24)) - (node (ref U3) (pin 52))) - (net (code 144) (name /hackrf_if/LCD_DB10) + (net (code 128) (name /hackrf_if/LCD_DB8) + (node (ref U3) (pin 53)) + (node (ref J3) (pin 25))) + (net (code 129) (name /hackrf_if/LCD_DB9) + (node (ref U3) (pin 52)) + (node (ref J3) (pin 24))) + (net (code 130) (name /hackrf_if/LCD_DB10) (node (ref J3) (pin 23)) (node (ref U3) (pin 51))) - (net (code 145) (name /hackrf_if/LCD_DB11) - (node (ref J3) (pin 22)) - (node (ref U3) (pin 50))) - (net (code 146) (name /hackrf_if/LCD_DB12) - (node (ref J3) (pin 21)) - (node (ref U3) (pin 49))) - (net (code 147) (name /hackrf_if/LCD_DB13) - (node (ref J3) (pin 20)) - (node (ref U3) (pin 48))) - (net (code 148) (name /hackrf_if/LCD_DB14) - (node (ref U3) (pin 47)) - (node (ref J3) (pin 19))) - (net (code 149) (name /hackrf_if/LCD_DB15) - (node (ref U3) (pin 46)) - (node (ref J3) (pin 18))) - (net (code 150) (name /hackrf_if/LCD_DB0) + (net (code 131) (name /hackrf_if/LCD_DB11) + (node (ref U3) (pin 50)) + (node (ref J3) (pin 22))) + (net (code 132) (name /hackrf_if/LCD_DB12) + (node (ref U3) (pin 49)) + (node (ref J3) (pin 21))) + (net (code 133) (name /hackrf_if/LCD_DB13) + (node (ref U3) (pin 48)) + (node (ref J3) (pin 20))) + (net (code 134) (name /hackrf_if/LCD_DB14) + (node (ref J3) (pin 19)) + (node (ref U3) (pin 47))) + (net (code 135) (name /hackrf_if/LCD_DB15) + (node (ref J3) (pin 18)) + (node (ref U3) (pin 46))) + (net (code 136) (name /hackrf_if/LCD_DB0) (node (ref U3) (pin 62)) (node (ref J3) (pin 33))) - (net (code 151) (name /hackrf_if/LCD_DB1) + (net (code 137) (name /hackrf_if/LCD_DB1) (node (ref U3) (pin 61)) (node (ref J3) (pin 32))) - (net (code 152) (name /hackrf_if/LCD_DB2) - (node (ref J3) (pin 31)) - (node (ref U3) (pin 60))) - (net (code 153) (name /hackrf_if/LCD_DB3) + (net (code 138) (name /hackrf_if/LCD_DB2) + (node (ref U3) (pin 60)) + (node (ref J3) (pin 31))) + (net (code 139) (name /hackrf_if/LCD_DB3) (node (ref U3) (pin 59)) (node (ref J3) (pin 30))))) \ No newline at end of file diff --git a/hardware/portapack_h1/portapack_h1.pdf b/hardware/portapack_h1/portapack_h1.pdf index e1004e0f3..417982eae 100644 Binary files a/hardware/portapack_h1/portapack_h1.pdf and b/hardware/portapack_h1/portapack_h1.pdf differ diff --git a/hardware/portapack_h1/portapack_h1.sch b/hardware/portapack_h1/portapack_h1.sch index b4b8764bf..5fbe24573 100644 --- a/hardware/portapack_h1/portapack_h1.sch +++ b/hardware/portapack_h1/portapack_h1.sch @@ -3,7 +3,7 @@ LIBS:hackrf_expansion LIBS:wolfson LIBS:passive LIBS:lcd_kingtech -LIBS:power +LIBS:supply LIBS:io_expander LIBS:trs_jack LIBS:battery @@ -19,16 +19,16 @@ LIBS:hole LIBS:sharebrained LIBS:fiducial LIBS:portapack_h1-cache -EELAYER 24 0 +EELAYER 25 0 EELAYER END $Descr A4 11693 8268 encoding utf-8 Sheet 1 4 Title "PortaPack H1" -Date "13 Oct 2014" -Rev "20140826" +Date "21 Aug 2015" +Rev "20150821" Comp "ShareBrained Technology, Inc." -Comment1 "Copyright © 2014 Jared Boone" +Comment1 "Copyright © 2014, 2015 Jared Boone" Comment2 "License: GNU General Public License, version 2" Comment3 "" Comment4 "" @@ -39,7 +39,7 @@ U 1 1 5369BBC4 P 9500 2000 F 0 "H1" H 9500 2150 60 0000 C CNN F 1 "HOLE1" H 9500 1850 60 0000 C CNN -F 2 "" H 9500 2000 60 0000 C CNN +F 2 "hole:HOLE_3200UM_VIAS" H 9500 2000 60 0001 C CNN F 3 "" H 9500 2000 60 0000 C CNN 1 9500 2000 1 0 0 -1 @@ -50,7 +50,7 @@ U 1 1 5369BBD8 P 9500 2500 F 0 "H2" H 9500 2650 60 0000 C CNN F 1 "HOLE1" H 9500 2350 60 0000 C CNN -F 2 "" H 9500 2500 60 0000 C CNN +F 2 "hole:HOLE_3200UM_VIAS" H 9500 2500 60 0001 C CNN F 3 "" H 9500 2500 60 0000 C CNN 1 9500 2500 1 0 0 -1 @@ -61,7 +61,7 @@ U 1 1 5369BBEC P 9500 3000 F 0 "H3" H 9500 3150 60 0000 C CNN F 1 "HOLE1" H 9500 2850 60 0000 C CNN -F 2 "" H 9500 3000 60 0000 C CNN +F 2 "hole:HOLE_3200UM_VIAS" H 9500 3000 60 0001 C CNN F 3 "" H 9500 3000 60 0000 C CNN 1 9500 3000 1 0 0 -1 @@ -72,7 +72,7 @@ U 1 1 5369BC00 P 9500 3500 F 0 "H4" H 9500 3650 60 0000 C CNN F 1 "HOLE1" H 9500 3350 60 0000 C CNN -F 2 "" H 9500 3500 60 0000 C CNN +F 2 "hole:HOLE_3200UM_VIAS" H 9500 3500 60 0001 C CNN F 3 "" H 9500 3500 60 0000 C CNN 1 9500 3500 1 0 0 -1 @@ -83,7 +83,7 @@ U 1 1 5369BC14 P 9500 4000 F 0 "H5" H 9500 4150 60 0000 C CNN F 1 "HOLE1" H 9500 3850 60 0000 C CNN -F 2 "" H 9500 4000 60 0000 C CNN +F 2 "hole:HOLE_3200UM_VIAS" H 9500 4000 60 0001 C CNN F 3 "" H 9500 4000 60 0000 C CNN 1 9500 4000 1 0 0 -1 @@ -253,7 +253,7 @@ U 1 1 53B1AE0D P 6050 7000 F 0 "LOGO1" H 6050 7050 60 0000 C CNN F 1 "SHAREBRAINED" H 6050 6950 60 0000 C CNN -F 2 "" H 6050 7000 60 0000 C CNN +F 2 "sharebrained:sharebrained_text_300" H 6050 7000 60 0001 C CNN F 3 "" H 6050 7000 60 0000 C CNN 1 6050 7000 1 0 0 -1 @@ -264,7 +264,7 @@ U 1 1 53B1B509 P 6050 7450 F 0 "LOGO2" H 6050 7500 60 0000 C CNN F 1 "PORTAPACK_H1" H 6050 7400 60 0000 C CNN -F 2 "" H 6050 7450 60 0000 C CNN +F 2 "sharebrained:portapack_text_300" H 6050 7450 60 0001 C CNN F 3 "" H 6050 7450 60 0000 C CNN 1 6050 7450 1 0 0 -1 @@ -275,7 +275,7 @@ U 1 1 53B309AC P 4100 7100 F 0 "FID1" H 4100 7225 60 0000 C CNN F 1 "FIDUCIAL" H 4100 6975 60 0000 C CNN -F 2 "" H 4100 7100 60 0000 C CNN +F 2 "fiducial:FIDUCIAL_65MIL" H 4100 7100 60 0001 C CNN F 3 "" H 4100 7100 60 0000 C CNN 1 4100 7100 1 0 0 -1 @@ -286,7 +286,7 @@ U 1 1 53B30B4C P 4100 7500 F 0 "FID2" H 4100 7625 60 0000 C CNN F 1 "FIDUCIAL" H 4100 7375 60 0000 C CNN -F 2 "" H 4100 7500 60 0000 C CNN +F 2 "fiducial:FIDUCIAL_65MIL" H 4100 7500 60 0001 C CNN F 3 "" H 4100 7500 60 0000 C CNN 1 4100 7500 1 0 0 -1 @@ -297,7 +297,7 @@ U 1 1 53B30CEC P 4700 7100 F 0 "FID3" H 4700 7225 60 0000 C CNN F 1 "FIDUCIAL" H 4700 6975 60 0000 C CNN -F 2 "" H 4700 7100 60 0000 C CNN +F 2 "fiducial:FIDUCIAL_65MIL" H 4700 7100 60 0001 C CNN F 3 "" H 4700 7100 60 0000 C CNN 1 4700 7100 1 0 0 -1 @@ -308,7 +308,7 @@ U 1 1 53B30E8C P 4700 7500 F 0 "FID4" H 4700 7625 60 0000 C CNN F 1 "FIDUCIAL" H 4700 7375 60 0000 C CNN -F 2 "" H 4700 7500 60 0000 C CNN +F 2 "fiducial:FIDUCIAL_65MIL" H 4700 7500 60 0001 C CNN F 3 "" H 4700 7500 60 0000 C CNN 1 4700 7500 1 0 0 -1