From 66320c39d4fa62bd322c85734ab62fc627457caa Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 12:20:45 -0700 Subject: [PATCH 001/224] Restore missing halInit() call during M4 __late_init(). --- firmware/baseband/main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index eb048ace4..58d725457 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -654,6 +654,15 @@ static __attribute__((noreturn)) msg_t rssi_fn(void *arg) { 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. From 4e0de9c4ad04758b5bd4393482e91996ad939186 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 12:21:49 -0700 Subject: [PATCH 002/224] Fix clock configuration for M4. M0 launches baseband, so M4 clock can be set to PLL1. Provide a way to configure that per project, set to correct values for baseband project. --- firmware/baseband/mcuconf.h | 4 ++++ .../chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.c | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) 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/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.c b/firmware/chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.c index 4ef29412a..b610f2500 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. */ @@ -74,7 +74,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); From 1713c82841203db0a4e644a8dc366bc37a054e25 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 12:23:49 -0700 Subject: [PATCH 003/224] Move ChibiOS init comments into Wiki. --- firmware/application/main.cpp | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index d1e477395..13189be40 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -98,34 +98,6 @@ static spi_bus_t ssp0 = { }; #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) { From 02aab9b4e28cf11c30ea8775d3b4030a337c3f0a Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 15:52:11 -0700 Subject: [PATCH 004/224] Application main() refactoring to group relevant bits. --- firmware/application/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 13189be40..d707f95dd 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -456,7 +456,6 @@ int main(void) { init_message_queues(); portapack::io.init(); - ui::Context context; portapack::display.init(); sdcStart(&SDCD1, nullptr); @@ -470,9 +469,10 @@ int main(void) { events_initialize(chThdSelf()); + ui::Context context; ui::SystemView system_view { context, - { 0, 0, 240, 320 } + portapack::display.screen_rect() }; ui::Painter painter; EventDispatcher event_dispatcher { &system_view, painter, context }; From c44357a16a27eb64f9faedf99f14dcfb26b7e85e Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 16:38:10 -0700 Subject: [PATCH 005/224] Remove dead, commented-out code. --- firmware/application/main.cpp | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index d707f95dd..d1fc410d3 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -427,25 +427,6 @@ private: "back" item, no matter where you're coming from? */ -/* -message_handlers[Message::ID::FSKPacket] = [](const Message* const p) { - const auto message = static_cast(p); - fsk_packet(message); -}; - -message_handlers[Message::ID::TestResults] = [&system_view](const Message* const p) { - const auto message = static_cast(p); - char c[10]; - c[0] = message->results.translate_by_fs_over_4_and_decimate_by_2_cic3 ? '+' : '-'; - c[1] = message->results.fir_cic3_decim_2_s16_s16 ? '+' : '-'; - c[2] = message->results.fir_64_and_decimate_by_2_complex ? '+' : '-'; - c[3] = message->results.fxpt_atan2 ? '+' : '-'; - c[4] = message->results.multiply_conjugate_s16_s32 ? '+' : '-'; - c[5] = 0; - system_view.status_view.portapack.set(c); -}; -*/ - int main(void) { portapack::init(); From 2aa8ae0d1f3d851a7f86500e94a46724f85bc51f Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 16:46:32 -0700 Subject: [PATCH 006/224] Move FSKPacket message handler to ReceiverView. --- firmware/application/main.cpp | 5 ----- firmware/application/ui_receiver.cpp | 7 +++++++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index d1fc410d3..8bce016cb 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -458,11 +458,6 @@ int main(void) { ui::Painter painter; EventDispatcher event_dispatcher { &system_view, painter, context }; -context.message_map[Message::ID::FSKPacket] = [](const Message* const p) { - const auto message = static_cast(p); - (void)message; -}; - m4txevent_interrupt_enable(); m4_init(portapack::spi_flash::baseband, portapack::spi_flash::m4_text_ram_base); diff --git a/firmware/application/ui_receiver.cpp b/firmware/application/ui_receiver.cpp index 80b7b96f9..6cc3b5c01 100644 --- a/firmware/application/ui_receiver.cpp +++ b/firmware/application/ui_receiver.cpp @@ -480,9 +480,16 @@ ReceiverView::ReceiverView( }; receiver_model.enable(); + + context().message_map[Message::ID::FSKPacket] = [](const Message* const p) { + const auto message = static_cast(p); + (void)message; + }; } ReceiverView::~ReceiverView() { + context().message_map[Message::ID::FSKPacket] = nullptr; + // TODO: Manipulating audio codec here, and in ui_receiver.cpp. Good to do // both? audio_codec.headphone_mute(); From a7226820d02df32ab1ca3b8e3bc56298cbb652ba Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 17:31:23 -0700 Subject: [PATCH 007/224] Hide implementation of MessageHandlerMap. --- firmware/application/main.cpp | 5 +- firmware/application/ui_audio.cpp | 10 ++-- firmware/application/ui_channel.cpp | 10 ++-- firmware/application/ui_debug.cpp | 10 ++-- firmware/application/ui_receiver.cpp | 14 +++-- firmware/application/ui_rssi.cpp | 10 ++-- firmware/application/ui_spectrum.hpp | 10 ++-- firmware/baseband/main.cpp | 89 ++++++++++++++-------------- firmware/common/message.hpp | 15 +++-- 9 files changed, 95 insertions(+), 78 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 8bce016cb..3d5c621d2 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -184,10 +184,7 @@ private: 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); - } + context.message_map.send(message); message->state = Message::State::Free; } diff --git a/firmware/application/ui_audio.cpp b/firmware/application/ui_audio.cpp index 08176d0df..25f06d70a 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_channel.cpp b/firmware/application/ui_channel.cpp index d1fc71f6e..0369c5aed 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_debug.cpp b/firmware/application/ui_debug.cpp index a8ba25ef3..d337a7068 100644 --- a/firmware/application/ui_debug.cpp +++ b/firmware/application/ui_debug.cpp @@ -40,13 +40,15 @@ BasebandStatsView::BasebandStatsView() { } void BasebandStatsView::on_show() { - context().message_map[Message::ID::BasebandStatistics] = [this](const Message* const p) { - this->on_statistics_update(static_cast(p)->statistics); - }; + 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[Message::ID::BasebandStatistics] = nullptr; + context().message_map.unregister_handler(Message::ID::BasebandStatistics); } diff --git a/firmware/application/ui_receiver.cpp b/firmware/application/ui_receiver.cpp index 6cc3b5c01..96fbe5d97 100644 --- a/firmware/application/ui_receiver.cpp +++ b/firmware/application/ui_receiver.cpp @@ -481,15 +481,17 @@ ReceiverView::ReceiverView( receiver_model.enable(); - context().message_map[Message::ID::FSKPacket] = [](const Message* const p) { - const auto message = static_cast(p); - (void)message; - }; + context().message_map.register_handler(Message::ID::FSKPacket, + [](const Message* const p) { + const auto message = static_cast(p); + (void)message; + } + ); } ReceiverView::~ReceiverView() { - context().message_map[Message::ID::FSKPacket] = nullptr; - + context().message_map.unregister_handler(Message::ID::FSKPacket); + // TODO: Manipulating audio codec here, and in ui_receiver.cpp. Good to do // both? audio_codec.headphone_mute(); diff --git a/firmware/application/ui_rssi.cpp b/firmware/application/ui_rssi.cpp index f44c75df3..72e58d974 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_spectrum.hpp b/firmware/application/ui_spectrum.hpp index 029c0c5ca..28a2acd21 100644 --- a/firmware/application/ui_spectrum.hpp +++ b/firmware/application/ui_spectrum.hpp @@ -233,13 +233,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/baseband/main.cpp b/firmware/baseband/main.cpp index 58d725457..c3d460e66 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -481,14 +481,16 @@ public: MessageHandlerMap& message_handlers ) : message_handlers(message_handlers) { - message_handlers[Message::ID::FSKConfiguration] = [this](const Message* const p) { - auto m = reinterpret_cast(p); - this->configure(m->configuration); - }; + message_handlers.register_handler(Message::ID::FSKConfiguration, + [this](const Message* const p) { + auto m = reinterpret_cast(p); + this->configure(m->configuration); + } + ); } ~FSKProcessor() { - message_handlers[Message::ID::FSKConfiguration] = nullptr; + message_handlers.unregister_handler(Message::ID::FSKConfiguration); } void configure(const FSKConfiguration new_configuration) { @@ -736,10 +738,7 @@ private: 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_map.send(message); message->state = Message::State::Free; } @@ -804,49 +803,51 @@ int main(void) { EventDispatcher event_dispatcher; auto& message_handlers = event_dispatcher.message_handlers(); - 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_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; + // 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 0: - baseband_processor = new NarrowbandAMAudio(); - break; + switch(message->configuration.mode) { + case 0: + baseband_processor = new NarrowbandAMAudio(); + break; - case 1: - baseband_processor = new NarrowbandFMAudio(); - break; + case 1: + baseband_processor = new NarrowbandFMAudio(); + break; - case 2: - baseband_processor = new WidebandFMAudio(); - break; + case 2: + baseband_processor = new WidebandFMAudio(); + break; - case 3: - baseband_processor = new FSKProcessor(message_handlers); - break; + case 3: + baseband_processor = new FSKProcessor(message_handlers); + break; - default: - break; - } - - if( baseband_processor ) { - if( direction == baseband::Direction::Receive ) { - rf::rssi::start(); + default: + break; } - baseband::dma::enable(direction); - } else { - baseband::dma::disable(); - rf::rssi::stop(); - } - } - baseband_configuration = message->configuration; - }; + if( baseband_processor ) { + if( direction == baseband::Direction::Receive ) { + rf::rssi::start(); + } + baseband::dma::enable(direction); + } else { + baseband::dma::disable(); + rf::rssi::stop(); + } + } + + baseband_configuration = message->configuration; + } + ); /* TODO: Ensure DMAs are configured to point at first LLI in chain. */ diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index 5a39927f6..5ab4fccb8 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -246,12 +246,19 @@ class MessageHandlerMap { public: using MessageHandler = std::function; - MessageHandler& operator[](Message::ID n) { - return map_[toUType(n)]; + void register_handler(const Message::ID id, MessageHandler&& handler) { + 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(const Message* const message) { + auto& fn = map_[toUType(message->id)]; + if( fn ) { + fn(message); + } } private: From 32312a6cfbe40237ccfbca2df12d96912a562199 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 17:52:29 -0700 Subject: [PATCH 008/224] Can't use context() in ui::Widget constructor, move use elsewhere. TODO: Seems like a design flaw to me... Either eliminate need for context(), or pass into constructors. --- firmware/application/ui_receiver.cpp | 19 ++++++++++++------- firmware/application/ui_receiver.hpp | 3 +++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/firmware/application/ui_receiver.cpp b/firmware/application/ui_receiver.cpp index 96fbe5d97..7dfbb38e9 100644 --- a/firmware/application/ui_receiver.cpp +++ b/firmware/application/ui_receiver.cpp @@ -480,7 +480,18 @@ ReceiverView::ReceiverView( }; receiver_model.enable(); +} +ReceiverView::~ReceiverView() { + + // TODO: Manipulating audio codec here, and in ui_receiver.cpp. Good to do + // both? + audio_codec.headphone_mute(); + + receiver_model.disable(); +} + +void ReceiverView::on_show() { context().message_map.register_handler(Message::ID::FSKPacket, [](const Message* const p) { const auto message = static_cast(p); @@ -489,14 +500,8 @@ ReceiverView::ReceiverView( ); } -ReceiverView::~ReceiverView() { +void ReceiverView::on_hide() { context().message_map.unregister_handler(Message::ID::FSKPacket); - - // TODO: Manipulating audio codec here, and in ui_receiver.cpp. Good to do - // both? - audio_codec.headphone_mute(); - - receiver_model.disable(); } void ReceiverView::set_parent_rect(const Rect new_parent_rect) { diff --git a/firmware/application/ui_receiver.hpp b/firmware/application/ui_receiver.hpp index 639ad6b74..3280ede62 100644 --- a/firmware/application/ui_receiver.hpp +++ b/firmware/application/ui_receiver.hpp @@ -367,6 +367,9 @@ public: void focus() override; + void on_show() override; + void on_hide() override; + private: ReceiverModel& receiver_model; From fa465c14c4f4e4725daeaaa1ca1ff9721da9f19a Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 20:57:40 -0700 Subject: [PATCH 009/224] Extract RTC interrupt handler into separate files. --- firmware/application/Makefile | 1 + firmware/application/irq_rtc.cpp | 50 ++++++++++++++++++++++++++++++++ firmware/application/irq_rtc.hpp | 27 +++++++++++++++++ firmware/application/main.cpp | 23 ++------------- 4 files changed, 80 insertions(+), 21 deletions(-) create mode 100644 firmware/application/irq_rtc.cpp create mode 100644 firmware/application/irq_rtc.hpp diff --git a/firmware/application/Makefile b/firmware/application/Makefile index aeb55a32a..879c2501d 100755 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -121,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 \ diff --git a/firmware/application/irq_rtc.cpp b/firmware/application/irq_rtc.cpp new file mode 100644 index 000000000..f393d0f45 --- /dev/null +++ b/firmware/application/irq_rtc.cpp @@ -0,0 +1,50 @@ +/* + * 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_rtc.hpp" + +#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(); +} + +} 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/main.cpp b/firmware/application/main.cpp index 3d5c621d2..e1a1724a9 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -22,9 +22,6 @@ #include "ch.h" #include "test.h" -#include "lpc43xx_cpp.hpp" -using namespace lpc43xx; - #include "portapack.hpp" #include "portapack_shared_memory.hpp" @@ -40,6 +37,7 @@ using namespace lpc43xx; #include "irq_ipc.hpp" #include "irq_lcd_frame.hpp" #include "irq_controls.hpp" +#include "irq_rtc.hpp" #include "event.hpp" @@ -98,22 +96,6 @@ static spi_bus_t ssp0 = { }; #endif -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() { @@ -438,8 +420,7 @@ int main(void) { sdcStart(&SDCD1, nullptr); - rtc::interrupt::enable_second_inc(); - nvicEnableVector(RTC_IRQn, CORTEX_PRIORITY_MASK(LPC_RTC_IRQ_PRIORITY)); + rtc_interrupt_enable(); controls_init(); From a9bb7c96e5b67d3422acd38e13229e5a981d2086 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 21:17:23 -0700 Subject: [PATCH 010/224] Move UI dirty tracking out of application main.cpp. --- firmware/application/main.cpp | 10 ++-------- firmware/common/ui_widget.cpp | 16 +++++++++++++++- firmware/common/ui_widget.hpp | 4 +++- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index e1a1724a9..2cf8a9f98 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -96,12 +96,6 @@ static spi_bus_t ssp0 = { }; #endif -static bool ui_dirty = true; - -void ui::dirty_event() { - ui_dirty = true; -} - class EventDispatcher { public: EventDispatcher( @@ -316,9 +310,9 @@ private: } void handle_lcd_frame_sync() { - if( ui_dirty ) { + if( ui::is_dirty() ) { paint_widget(top_widget); - ui_dirty = false; + ui::dirty_clear(); } } diff --git a/firmware/common/ui_widget.cpp b/firmware/common/ui_widget.cpp index 866735ba3..6561e51ca 100644 --- a/firmware/common/ui_widget.cpp +++ b/firmware/common/ui_widget.cpp @@ -28,6 +28,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( @@ -155,7 +169,7 @@ void Widget::set_parent(Widget* const widget) { void Widget::set_dirty() { flags.dirty = true; - dirty_event(); + dirty_set(); } bool Widget::dirty() const { diff --git a/firmware/common/ui_widget.hpp b/firmware/common/ui_widget.hpp index 797083cfd..45b20cada 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... From 872c998ff12ca12b75128d02b2156929fc1a4018 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 21:27:46 -0700 Subject: [PATCH 011/224] Move widget tree painting to ui::Painter. Still doesn't seem like the right place, but better than the event dispatcher! --- firmware/application/main.cpp | 26 +------------------------- firmware/common/ui_painter.cpp | 27 +++++++++++++++++++++++++++ firmware/common/ui_painter.hpp | 4 ++++ 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 2cf8a9f98..20b6009be 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -240,30 +240,6 @@ private: } } */ - 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); - - 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); - } - } - } - } static ui::Widget* touch_widget(ui::Widget* const w, ui::TouchEvent event) { if( !w->hidden() ) { @@ -311,7 +287,7 @@ private: void handle_lcd_frame_sync() { if( ui::is_dirty() ) { - paint_widget(top_widget); + painter.paint_widget(top_widget); ui::dirty_clear(); } } diff --git a/firmware/common/ui_painter.cpp b/firmware/common/ui_painter.cpp index ef246e5fb..77f2c34e0 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,29 @@ void Painter::fill_rectangle(const Rect r, const Color c) { display.fill_rectangle(r, c); } +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..aba85b770 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,6 +53,8 @@ public: void draw_rectangle(const Rect r, const Color c); void fill_rectangle(const Rect r, const Color c); + void paint_widget(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); From 2ebb41c0e62c36b18de175e9d2e29339edd871fe Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 21:35:48 -0700 Subject: [PATCH 012/224] Remove dead, commented code. --- firmware/application/main.cpp | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 20b6009be..54663811d 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -220,26 +220,6 @@ private: }; */ } -/* - 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); - } - w->set_clean(); - } else { - // Selectively paint all children. - for(const auto child : w->children()) { - paint_widget(child); - } - } - } - } -*/ static ui::Widget* touch_widget(ui::Widget* const w, ui::TouchEvent event) { if( !w->hidden() ) { From b1a4418f0686a00196d562d393fe793e47f6b1c0 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 21:36:51 -0700 Subject: [PATCH 013/224] Push more widget painting code into ui::Painter Hide knowledge of damage tracking strategy. --- firmware/application/main.cpp | 5 +---- firmware/common/ui_painter.cpp | 7 +++++++ firmware/common/ui_painter.hpp | 6 ++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 54663811d..4fd904bac 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -266,10 +266,7 @@ private: } void handle_lcd_frame_sync() { - if( ui::is_dirty() ) { - painter.paint_widget(top_widget); - ui::dirty_clear(); - } + painter.paint_widget_tree(top_widget); } void handle_sd_card_detect() { diff --git a/firmware/common/ui_painter.cpp b/firmware/common/ui_painter.cpp index 77f2c34e0..1f772fa1c 100644 --- a/firmware/common/ui_painter.cpp +++ b/firmware/common/ui_painter.cpp @@ -73,6 +73,13 @@ 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. diff --git a/firmware/common/ui_painter.hpp b/firmware/common/ui_painter.hpp index aba85b770..40e03edf1 100644 --- a/firmware/common/ui_painter.hpp +++ b/firmware/common/ui_painter.hpp @@ -53,11 +53,13 @@ public: void draw_rectangle(const Rect r, const Color c); void fill_rectangle(const Rect r, const Color c); - void paint_widget(Widget* const w); - + 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 */ From aa801ada609519704218e35b64e7481410eea134 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 21:54:03 -0700 Subject: [PATCH 014/224] Move code comments to project Wiki. --- firmware/application/main.cpp | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 4fd904bac..372efe154 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -51,28 +51,6 @@ #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. - */ - #if 0 static const SPIConfig ssp_config_w25q80bv = { .end_cb = NULL, From d5ebb9ef1efbcf509927339f399f7f1c8cc2fb6e Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 21:58:54 -0700 Subject: [PATCH 015/224] Remove more dead code and comments. --- firmware/application/main.cpp | 115 ---------------------------------- 1 file changed, 115 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 372efe154..2bd1d64cb 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -51,29 +51,6 @@ #include -#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 - class EventDispatcher { public: EventDispatcher( @@ -84,10 +61,6 @@ public: painter(painter), context(context) { - // touch_manager.on_started = [this](const ui::TouchEvent event) { - // this->context.focus_manager.update(this->top_widget, event); - // }; - touch_manager.on_event = [this](const ui::TouchEvent event) { this->on_touch_event(event); }; @@ -145,58 +118,7 @@ private: } 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); - 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 - ); - }; - */ } static ui::Widget* touch_widget(ui::Widget* const w, ui::TouchEvent event) { @@ -294,43 +216,6 @@ private: } }; -/////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////////////////// - -/* Thinking things through a bit: - - main() produces UI events. - Touch events: - Hit test entire screen hierarchy and send to hit widget. - If modal view shown, block UI events destined outside. - Navigation events: - Move from current focus widget to "nearest" focusable widget. - If current view is modal, don't allow events to bubble outside - of modal view. - System events: - Power off from WWDT provides enough time to flush changes to - VBAT RAM? - SD card events? Insert/eject/error. - - - View stack: - Views that are hidden should deconstruct their widgets? - Views that are shown after being hidden will reconstruct their - widgets from data in their model? - Hence, hidden views will not eat up memory beyond their model? - Beware loops where the stack can get wildly deep? - Breaking out data models from views should allow some amount of - power-off persistence in the VBAT RAM area. In fact, the data - models could be instantiated there? But then, how to protect - from corruption if power is pulled? Does WWDT provide enough - warning to flush changes? - - Navigation... - If you move off the left side of the screen, move to breadcrumb - "back" item, no matter where you're coming from? -*/ - int main(void) { portapack::init(); From 49b91d9c5db44e6e3b8469caa25fec64e03b75cc Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 22:01:20 -0700 Subject: [PATCH 016/224] Move event loop into EventDispatcher. --- firmware/application/main.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 2bd1d64cb..8b695e7e1 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -66,6 +66,20 @@ public: }; } + void run() { + while(true) { + const auto events = wait(); + dispatch(events); + } + } + +private: + touch::Manager touch_manager; + ui::Widget* const top_widget; + ui::Painter& painter; + ui::Context& context; + uint32_t encoder_last = 0; + eventmask_t wait() { return chEvtWaitAny(ALL_EVENTS); } @@ -100,13 +114,6 @@ 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(); @@ -250,10 +257,7 @@ int main(void) { m4_init(portapack::spi_flash::baseband, portapack::spi_flash::m4_text_ram_base); - while(true) { - const auto events = event_dispatcher.wait(); - event_dispatcher.dispatch(events); - } + event_dispatcher.run(); return 0; } From f2cabadf600db055c90e714ce7266c4661989250 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 14 Aug 2015 22:28:28 -0700 Subject: [PATCH 017/224] Review application initialization order. Group related things together. --- firmware/application/main.cpp | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 8b695e7e1..523c30f6e 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -230,20 +230,13 @@ int main(void) { chSysHalt(); } - init_message_queues(); - portapack::io.init(); portapack::display.init(); sdcStart(&SDCD1, nullptr); - rtc_interrupt_enable(); - - controls_init(); - - lcd_frame_sync_configure(); - - events_initialize(chThdSelf()); + events_initialize(chThdSelf()); + init_message_queues(); ui::Context context; ui::SystemView system_view { @@ -253,10 +246,13 @@ int main(void) { ui::Painter painter; EventDispatcher event_dispatcher { &system_view, painter, context }; - m4txevent_interrupt_enable(); - m4_init(portapack::spi_flash::baseband, portapack::spi_flash::m4_text_ram_base); + controls_init(); + lcd_frame_sync_configure(); + rtc_interrupt_enable(); + m4txevent_interrupt_enable(); + event_dispatcher.run(); return 0; From 25c2e612c04d721ff6dc940da036b4b3d3c83337 Mon Sep 17 00:00:00 2001 From: Clayton Smith Date: Sat, 15 Aug 2015 17:56:30 -0400 Subject: [PATCH 018/224] Fix a narrowing conversion warning. --- firmware/application/ui_setup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/application/ui_setup.cpp b/firmware/application/ui_setup.cpp index fd7aa4db2..b91015531 100644 --- a/firmware/application/ui_setup.cpp +++ b/firmware/application/ui_setup.cpp @@ -121,7 +121,7 @@ SetFrequencyCorrectionView::SetFrequencyCorrectionView( } }); SetFrequencyCorrectionModel model { - portapack::persistent_memory::correction_ppb() / 1000 + (int8_t) (portapack::persistent_memory::correction_ppb() / 1000) }; form_init(model); From f99016d78f8738e25ed4c242bb6f9b73ac0dc8c0 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 15 Aug 2015 15:40:55 -0700 Subject: [PATCH 019/224] Tweak cast to C++ style. --- firmware/application/ui_setup.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/application/ui_setup.cpp b/firmware/application/ui_setup.cpp index b91015531..178bac1a5 100644 --- a/firmware/application/ui_setup.cpp +++ b/firmware/application/ui_setup.cpp @@ -121,7 +121,7 @@ SetFrequencyCorrectionView::SetFrequencyCorrectionView( } }); SetFrequencyCorrectionModel model { - (int8_t) (portapack::persistent_memory::correction_ppb() / 1000) + static_cast(portapack::persistent_memory::correction_ppb() / 1000) }; form_init(model); From 4126f1ab1fa8cc44b27157ccd148a6700bdd80fb Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 13:13:12 -0700 Subject: [PATCH 020/224] Change IPC to exchange data, not pointers. --- firmware/application/main.cpp | 11 ++-- firmware/application/receiver_model.cpp | 13 +--- firmware/application/ui_spectrum.hpp | 5 +- firmware/baseband/main.cpp | 85 +++++++++++-------------- firmware/common/message.hpp | 27 +++----- firmware/common/message_queue.cpp | 46 +++---------- firmware/common/message_queue.hpp | 15 +++-- 7 files changed, 76 insertions(+), 126 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 523c30f6e..aaa26e5f2 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -116,11 +116,12 @@ private: void handle_application_queue() { while( !shared_memory.application_queue.is_empty() ) { - auto message = shared_memory.application_queue.pop(); - - context.message_map.send(message); - - message->state = Message::State::Free; + std::array message_buffer; + const Message* const message = reinterpret_cast(message_buffer.data()); + const auto message_size = shared_memory.application_queue.pop(message_buffer.data(), message_buffer.size()); + if( message_size ) { + context.message_map.send(message); + } } } diff --git a/firmware/application/receiver_model.cpp b/firmware/application/receiver_model.cpp index f54ae86eb..164d9ce87 100644 --- a/firmware/application/receiver_model.cpp +++ b/firmware/application/receiver_model.cpp @@ -147,8 +147,7 @@ void ReceiverModel::disable() { .decimation_factor = 1, } }; - shared_memory.baseband_queue.push(&message); - while( !message.is_free() ); + shared_memory.baseband_queue.push(message); radio::disable(); } @@ -187,10 +186,7 @@ void ReceiverModel::update_baseband_configuration() { radio::set_baseband_decimation_by(baseband_oversampling()); BasebandConfigurationMessage message { baseband_configuration }; - shared_memory.baseband_queue.push(&message); - - // Block until message is consumed, since we allocated it on the stack. - while( !message.is_free() ); + shared_memory.baseband_queue.push(message); if( baseband_configuration.mode == 3 ) { update_fsk_configuration(); @@ -222,8 +218,5 @@ static constexpr FSKConfiguration fsk_configuration_tpms_a = { 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() ); + shared_memory.baseband_queue.push(message); } diff --git a/firmware/application/ui_spectrum.hpp b/firmware/application/ui_spectrum.hpp index 28a2acd21..aba04a48b 100644 --- a/firmware/application/ui_spectrum.hpp +++ b/firmware/application/ui_spectrum.hpp @@ -201,16 +201,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; } diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index c3d460e66..cf680bd3a 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -273,10 +273,8 @@ private: 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); - } + channel_stats_message.statistics = statistics; + shared_memory.application_queue.push(channel_stats_message); } void post_channel_spectrum_message(const buffer_c16_t data) { @@ -298,10 +296,8 @@ private: } 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); - } + audio_stats_message.statistics = statistics; + shared_memory.application_queue.push(audio_stats_message); } }; @@ -585,11 +581,9 @@ private: 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); - } + message.packet.payload = payload; + message.packet.bits_received = bits_received; + shared_memory.application_queue.push(message); } }; @@ -602,7 +596,6 @@ static __attribute__((noreturn)) msg_t baseband_fn(void *arg) { chRegSetThreadName("baseband"); BasebandStatsCollector stats; - BasebandStatisticsMessage message; while(true) { // TODO: Place correct sampling rate into buffer returned here: @@ -616,11 +609,10 @@ static __attribute__((noreturn)) msg_t baseband_fn(void *arg) { } stats.process(buffer, - [&message](const BasebandStatistics statistics) { - if( message.is_free() ) { - message.statistics = statistics; - shared_memory.application_queue.push(&message); - } + [](const BasebandStatistics statistics) { + BasebandStatisticsMessage message; + message.statistics = statistics; + shared_memory.application_queue.push(message); } ); } @@ -632,7 +624,6 @@ static __attribute__((noreturn)) msg_t rssi_fn(void *arg) { chRegSetThreadName("rssi"); RSSIStatisticsCollector stats; - RSSIStatisticsMessage message; while(true) { // TODO: Place correct sampling rate into buffer returned here: @@ -643,11 +634,10 @@ static __attribute__((noreturn)) msg_t rssi_fn(void *arg) { stats.process( buffer, - [&message](const RSSIStatistics statistics) { - if( message.is_free() ) { - message.statistics = statistics; - shared_memory.application_queue.push(&message); - } + [](const RSSIStatistics statistics) { + RSSIStatisticsMessage message; + message.statistics = statistics; + shared_memory.application_queue.push(message); } ); } @@ -731,43 +721,40 @@ 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(); - - message_map.send(message); - - message->state = Message::State::Free; + std::array message_buffer; + const Message* const message = reinterpret_cast(message_buffer.data()); + const auto message_size = shared_memory.baseband_queue.pop(message_buffer.data(), message_buffer.size()); + if( message_size ) { + message_map.send(message); + } } } void handle_spectrum() { if( channel_spectrum_request_update ) { /* Decimated buffer is full. Compute spectrum. */ - std::array, 256> samples_swapped; + std::array, channel_spectrum.size()> 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); + 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); } } }; diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index 5ab4fccb8..72f733694 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -31,7 +31,9 @@ class Message { public: - enum class ID : uint16_t { + static constexpr size_t MAX_SIZE = 276; + + enum class ID : uint32_t { /* Assign consecutive IDs. IDs are used to index array. */ RSSIStatistics = 0, BasebandStatistics = 1, @@ -47,22 +49,11 @@ public: 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 { @@ -183,7 +174,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 }; @@ -255,9 +246,11 @@ public: } void send(const Message* const message) { - auto& fn = map_[toUType(message->id)]; - if( fn ) { - fn(message); + if( message->id < Message::ID::MAX ) { + auto& fn = map_[toUType(message->id)]; + if( fn ) { + fn(message); + } } } diff --git a/firmware/common/message_queue.cpp b/firmware/common/message_queue.cpp index f443d25f6..40705a932 100644 --- a/firmware/common/message_queue.cpp +++ b/firmware/common/message_queue.cpp @@ -26,56 +26,26 @@ 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; - } +bool MessageQueue::push(const void* const buf, const size_t len) { + const auto result = fifo.in_r(buf, len); + const bool success = (result == len); + if( success ) { + signal(); } - - return false; + return success; } -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; +size_t MessageQueue::pop(void* const buf, const size_t len) { + return fifo.out_r(buf, len); } #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(); } diff --git a/firmware/common/message_queue.hpp b/firmware/common/message_queue.hpp index 704ddc19d..400ecdead 100644 --- a/firmware/common/message_queue.hpp +++ b/firmware/common/message_queue.hpp @@ -29,9 +29,15 @@ class MessageQueue { public: - bool push(Message* const message); + 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"); - Message* pop(); + return push(&message, sizeof(message)); + } + + size_t pop(void* const buf, const size_t len); size_t len() const { return fifo.len(); @@ -42,9 +48,10 @@ public: } private: - FIFO fifo; + FIFO fifo; + + bool push(const void* const buf, const size_t len); - bool enqueue(Message* const message); void signal(); }; From 52e80936188965843685324930f56ceffde8b24b Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 15:59:25 -0700 Subject: [PATCH 021/224] Generalize FIFO to specify FIFO size as 2^K. Configure baseband queue to be larger (4K) than application queue (2K). --- firmware/common/message_queue.cpp | 30 ------------------- firmware/common/message_queue.hpp | 32 ++++++++++++++++++--- firmware/common/portapack_shared_memory.hpp | 8 +++--- 3 files changed, 32 insertions(+), 38 deletions(-) diff --git a/firmware/common/message_queue.cpp b/firmware/common/message_queue.cpp index 40705a932..54e9a2332 100644 --- a/firmware/common/message_queue.cpp +++ b/firmware/common/message_queue.cpp @@ -20,33 +20,3 @@ */ #include "message_queue.hpp" - -#include "ch.h" -#include "lpc43xx_cpp.hpp" - -using namespace lpc43xx; - -bool MessageQueue::push(const void* const buf, const size_t len) { - const auto result = fifo.in_r(buf, len); - const bool success = (result == len); - if( success ) { - signal(); - } - return success; -} - -size_t MessageQueue::pop(void* const buf, const size_t len) { - return fifo.out_r(buf, len); -} - -#if defined(LPC43XX_M0) -void MessageQueue::signal() { - creg::m0apptxevent::assert(); -} -#endif - -#if defined(LPC43XX_M4) -void MessageQueue::signal() { - creg::m4txevent::assert(); -} -#endif diff --git a/firmware/common/message_queue.hpp b/firmware/common/message_queue.hpp index 400ecdead..814ec007d 100644 --- a/firmware/common/message_queue.hpp +++ b/firmware/common/message_queue.hpp @@ -27,6 +27,10 @@ #include "message.hpp" #include "fifo.hpp" +#include "lpc43xx_cpp.hpp" +using namespace lpc43xx; + +template class MessageQueue { public: template @@ -37,7 +41,9 @@ public: return push(&message, sizeof(message)); } - size_t pop(void* const buf, const size_t len); + size_t pop(void* const buf, const size_t len) { + return fifo.out_r(buf, len); + } size_t len() const { return fifo.len(); @@ -48,11 +54,29 @@ public: } private: - FIFO fifo; + FIFO fifo; - bool push(const void* const buf, const size_t len); + bool push(const void* const buf, const size_t len) { + const auto result = fifo.in_r(buf, len); + const bool success = (result == len); + if( success ) { + signal(); + } + return success; + } - void signal(); + +#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/portapack_shared_memory.hpp b/firmware/common/portapack_shared_memory.hpp index c4ae6aabb..a0fd70108 100644 --- a/firmware/common/portapack_shared_memory.hpp +++ b/firmware/common/portapack_shared_memory.hpp @@ -32,8 +32,8 @@ struct TouchADCFrame { /* 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. @@ -44,8 +44,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 From e9c47ff91a058af59d606df1a435be573410b99c Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 16:03:14 -0700 Subject: [PATCH 022/224] Remove M0 ldscript NVRAM region. I misunderstood the documentation. It's not NVRAM (backed up by VBAT), it just survives a deeper core sleep than other RAM does. --- .../os/ports/GCC/ARMCMx/LPC43xx_M0/ld/LPC43xx_M0.ld | 1 - 1 file changed, 1 deletion(-) 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); From 05690b20edbf84a710b111354672f3a31e8068d8 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 17:09:11 -0700 Subject: [PATCH 023/224] Created memory_map header. Knowledge of memory map will be consolidated here. --- firmware/common/memory_map.hpp | 92 ++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 firmware/common/memory_map.hpp diff --git a/firmware/common/memory_map.hpp b/firmware/common/memory_map.hpp new file mode 100644 index 000000000..3a1155bdb --- /dev/null +++ b/firmware/common/memory_map.hpp @@ -0,0 +1,92 @@ +/* + * 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; + +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_; +}; + +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; +} + +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__*/ From 1c3e45917cdb0710056bbdf7539937039ea706c8 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 17:11:08 -0700 Subject: [PATCH 024/224] Rework to make use of declared memory map regions. --- firmware/application/m4_startup.cpp | 6 +++--- firmware/application/m4_startup.hpp | 3 ++- firmware/application/main.cpp | 2 +- firmware/application/ui_navigation.cpp | 2 +- firmware/common/portapack_shared_memory.cpp | 11 ++++++++++- firmware/common/spi_image.hpp | 6 +++--- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/firmware/application/m4_startup.cpp b/firmware/application/m4_startup.cpp index 5a705bffe..6dc74b4ba 100644 --- a/firmware/application/m4_startup.cpp +++ b/firmware/application/m4_startup.cpp @@ -32,14 +32,14 @@ * 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) { +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); diff --git a/firmware/application/m4_startup.hpp b/firmware/application/m4_startup.hpp index b47631565..16758d906 100644 --- a/firmware/application/m4_startup.hpp +++ b/firmware/application/m4_startup.hpp @@ -24,8 +24,9 @@ #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); #endif/*__M4_STARTUP_H__*/ diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index aaa26e5f2..815ca249a 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -247,7 +247,7 @@ int main(void) { ui::Painter painter; EventDispatcher event_dispatcher { &system_view, painter, context }; - m4_init(portapack::spi_flash::baseband, portapack::spi_flash::m4_text_ram_base); + m4_init(portapack::spi_flash::baseband, portapack::memory::map::m4_code); controls_init(); lcd_frame_sync_configure(); diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index 8b730049c..2b2f98309 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -151,7 +151,7 @@ HackRFFirmwareView::HackRFFirmwareView(NavigationView& nav) { button_yes.on_select = [&nav](Button&){ shutdown(); - m4_init(spi_flash::hackrf, reinterpret_cast(0x10000000)); + m4_init(spi_flash::hackrf, memory::map::m4_code_hackrf); while(true) { __WFE(); 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/spi_image.hpp b/firmware/common/spi_image.hpp index e693d3e9f..3b8105ecb 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); } }; From 4b7780f5c62f1b1ce98c8a4d7320a8a9dfc7c580 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 17:15:51 -0700 Subject: [PATCH 025/224] Move _KiB and _MiB user-defined literals to utility.hpp. Where I put all the stuff I don't know where to put. --- firmware/common/memory_map.hpp | 10 ++-------- firmware/common/utility.hpp | 8 ++++++++ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/firmware/common/memory_map.hpp b/firmware/common/memory_map.hpp index 3a1155bdb..6f4eae1e5 100644 --- a/firmware/common/memory_map.hpp +++ b/firmware/common/memory_map.hpp @@ -28,6 +28,8 @@ #include "lpc43xx_cpp.hpp" using namespace lpc43xx; +#include "utility.hpp" + namespace portapack { namespace memory { @@ -58,14 +60,6 @@ private: const size_t size_; }; -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; -} - namespace map { constexpr region_t local_sram_0 { 0x10000000, 96_KiB }; diff --git a/firmware/common/utility.hpp b/firmware/common/utility.hpp index 1407f6878..be341042c 100644 --- a/firmware/common/utility.hpp +++ b/firmware/common/utility.hpp @@ -32,6 +32,14 @@ #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! */ From bd791a8512260030cc1e2b7431e2a2d02f7bcf97 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 17:50:20 -0700 Subject: [PATCH 026/224] Remove code replaced by memory_map.hpp. --- firmware/common/spi_image.hpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/firmware/common/spi_image.hpp b/firmware/common/spi_image.hpp index 3b8105ecb..8f35c4784 100644 --- a/firmware/common/spi_image.hpp +++ b/firmware/common/spi_image.hpp @@ -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 */ From 5978c99c313c894fb297e44c3bffecf6adfe5577 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 17:51:07 -0700 Subject: [PATCH 027/224] Add API to stop HAL SysTick counter. --- .../chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.c | 4 ++++ .../chibios-portapack/os/hal/platforms/LPC43xx_M0/hal_lld.h | 1 + .../chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.c | 4 ++++ .../chibios-portapack/os/hal/platforms/LPC43xx_M4/hal_lld.h | 1 + 4 files changed, 10 insertions(+) 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 b610f2500..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 @@ -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; } 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); From 9742a058e91faa171bfb7be9e908e260eb8ee5c2 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 17:56:19 -0700 Subject: [PATCH 028/224] Move event loop into dispatcher, provide a way to exit. --- firmware/baseband/main.cpp | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index cf680bd3a..48009a1e1 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -704,6 +704,17 @@ public: return message_map; } + void run() { + while(is_running) { + const auto events = wait(); + dispatch(events); + } + } + + void request_stop() { + is_running = false; + } + eventmask_t wait() { return chEvtWaitAny(ALL_EVENTS); } @@ -721,6 +732,8 @@ public: private: MessageHandlerMap message_map; + bool is_running = true; + void handle_baseband_queue() { while( !shared_memory.baseband_queue.is_empty() ) { std::array message_buffer; @@ -853,10 +866,7 @@ int main(void) { ); //baseband::dma::allocate(4, 2048); - while(true) { - const auto events = event_dispatcher.wait(); - event_dispatcher.dispatch(events); - } - + event_dispatcher.run(); + return 0; } From 2efbd337bdb7fb84960ffc69222984ef030bb4f1 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 17:56:47 -0700 Subject: [PATCH 029/224] Provide a way to exit application event loop. --- firmware/application/main.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 815ca249a..3a6e4d111 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -67,18 +67,23 @@ public: } void run() { - while(true) { + 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; eventmask_t wait() { return chEvtWaitAny(ALL_EVENTS); From 15791e345dd8baa318fbafbeb1ea29b9b9ba5829 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 17:57:59 -0700 Subject: [PATCH 030/224] Make baseband event loop methods private. --- firmware/baseband/main.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 48009a1e1..f92d5f9f2 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -715,6 +715,11 @@ public: is_running = false; } +private: + MessageHandlerMap message_map; + + bool is_running = true; + eventmask_t wait() { return chEvtWaitAny(ALL_EVENTS); } @@ -729,11 +734,6 @@ public: } } -private: - MessageHandlerMap message_map; - - bool is_running = true; - void handle_baseband_queue() { while( !shared_memory.baseband_queue.is_empty() ) { std::array message_buffer; From 690c3c98dba7c1613e79f13a2a6a89913d22368b Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 18:03:49 -0700 Subject: [PATCH 031/224] Add Shutdown message, plumbing to send and handle. --- firmware/application/m4_startup.cpp | 8 ++++++++ firmware/application/m4_startup.hpp | 1 + firmware/application/main.cpp | 9 +++++++++ firmware/application/portapack.cpp | 3 +++ firmware/application/ui_navigation.cpp | 11 +---------- firmware/baseband/main.cpp | 27 ++++++++++++++++++++++++++ firmware/common/message.hpp | 10 +++++++++- 7 files changed, 58 insertions(+), 11 deletions(-) diff --git a/firmware/application/m4_startup.cpp b/firmware/application/m4_startup.cpp index 6dc74b4ba..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 @@ -44,3 +47,8 @@ void m4_init(const portapack::spi_flash::region_t from, const portapack::memory: /* 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 16758d906..ce22770e1 100644 --- a/firmware/application/m4_startup.hpp +++ b/firmware/application/m4_startup.hpp @@ -28,5 +28,6 @@ #include "spi_image.hpp" 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 3a6e4d111..9669b7156 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -252,6 +252,13 @@ int main(void) { ui::Painter painter; 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(); @@ -261,5 +268,7 @@ int main(void) { event_dispatcher.run(); + portapack::shutdown(); + m4_init(portapack::spi_flash::hackrf, portapack::memory::map::m4_code_hackrf); return 0; } diff --git a/firmware/application/portapack.cpp b/firmware/application/portapack.cpp index 9f4c361c7..8f60e0647 100644 --- a/firmware/application/portapack.cpp +++ b/firmware/application/portapack.cpp @@ -153,6 +153,9 @@ void shutdown() { // TODO: Wait a bit for supplies to discharge? chSysDisable(); + + systick_stop(); + hackrf::one::reset(); } diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index 2b2f98309..3096cfc20 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -27,10 +27,7 @@ #include "ui_debug.hpp" #include "ui_receiver.hpp" -#include "portapack.hpp" #include "m4_startup.hpp" -#include "spi_image.hpp" -using namespace portapack; namespace ui { @@ -149,13 +146,7 @@ Context& SystemView::context() const { HackRFFirmwareView::HackRFFirmwareView(NavigationView& nav) { button_yes.on_select = [&nav](Button&){ - shutdown(); - - m4_init(spi_flash::hackrf, memory::map::m4_code_hackrf); - - while(true) { - __WFE(); - } + m4_request_shutdown(); }; button_no.on_select = [&nav](Button&){ diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index f92d5f9f2..72a13e0bf 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -776,6 +776,10 @@ static void m0apptxevent_interrupt_enable() { nvicEnableVector(M0CORE_IRQn, CORTEX_PRIORITY_MASK(LPC43XX_M0APPTXEVENT_IRQ_PRIORITY)); } +static void m0apptxevent_interrupt_disable() { + nvicDisableVector(M0CORE_IRQn); +} + extern "C" { CH_IRQ_HANDLER(MAPP_IRQHandler) { @@ -792,6 +796,18 @@ CH_IRQ_HANDLER(MAPP_IRQHandler) { } +static void shutdown() { + // TODO: Is this complete? + + nvicDisableVector(DMA_IRQn); + + m0apptxevent_interrupt_disable(); + + chSysDisable(); + + systick_stop(); +} + static constexpr auto direction = baseband::Direction::Receive; int main(void) { @@ -849,6 +865,12 @@ int main(void) { } ); + 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. */ if( direction == baseband::Direction::Receive ) { @@ -868,5 +890,10 @@ int main(void) { event_dispatcher.run(); + shutdown(); + + ShutdownMessage shutdown_message; + shared_memory.application_queue.push(shutdown_message); + return 0; } diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index 72f733694..fa06c7034 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -43,7 +43,7 @@ public: BasebandConfiguration = 5, FSKConfiguration = 6, FSKPacket = 7, - TestResults = 8, + Shutdown = 8, MAX }; @@ -233,6 +233,14 @@ public: FSKPacket packet; }; +class ShutdownMessage : public Message { +public: + constexpr ShutdownMessage( + ) : Message { ID::Shutdown } + { + } +}; + class MessageHandlerMap { public: using MessageHandler = std::function; From 11561659b4479636c62127fc477df82f5b3cf8e3 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 20:26:36 -0700 Subject: [PATCH 032/224] Reset the M0 after the M4 is running HackRF firmware. --- firmware/application/main.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 9669b7156..85b0cecfe 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -49,6 +49,9 @@ #include "gcc.hpp" +#include "lpc43xx_cpp.hpp" +using namespace lpc43xx; + #include class EventDispatcher { @@ -269,6 +272,9 @@ int main(void) { event_dispatcher.run(); portapack::shutdown(); - m4_init(portapack::spi_flash::hackrf, portapack::memory::map::m4_code_hackrf); + m4_init(portapack::spi_flash::hackrf, portapack::memory::map::m4_code_hackrf); + + rgu::reset(rgu::Reset::M0APP); + return 0; } From 672284080b34b89789c173186e80c0e0f20a2dfa Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 20:39:08 -0700 Subject: [PATCH 033/224] Extract M4 IPC IRQ code into separate file. --- firmware/baseband/Makefile | 1 + firmware/baseband/irq_ipc_m4.cpp | 54 ++++++++++++++++++++++++++++++++ firmware/baseband/irq_ipc_m4.hpp | 28 +++++++++++++++++ firmware/baseband/main.cpp | 26 ++------------- 4 files changed, 85 insertions(+), 24 deletions(-) create mode 100644 firmware/baseband/irq_ipc_m4.cpp create mode 100644 firmware/baseband/irq_ipc_m4.hpp diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index f28181307..91add4fb5 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -125,6 +125,7 @@ CSRC = $(PORTSRC) \ CPPSRC = main.cpp \ message_queue.cpp \ event_m4.cpp \ + irq_ipc_m4.cpp \ gpdma.cpp \ baseband_dma.cpp \ portapack_shared_memory.cpp \ 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/main.cpp b/firmware/baseband/main.cpp index 72a13e0bf..a496f1d66 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -33,6 +33,8 @@ #include "event_m4.hpp" +#include "irq_ipc_m4.hpp" + #include "rssi.hpp" #include "rssi_dma.hpp" @@ -772,30 +774,6 @@ private: } }; -static void m0apptxevent_interrupt_enable() { - nvicEnableVector(M0CORE_IRQn, CORTEX_PRIORITY_MASK(LPC43XX_M0APPTXEVENT_IRQ_PRIORITY)); -} - -static 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(); -} - -} - static void shutdown() { // TODO: Is this complete? From 589cb47cc6e35c7dd00e5a44b8d4be468c457996 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 20 Aug 2015 20:40:46 -0700 Subject: [PATCH 034/224] Move M4 shutdown() next to init(). --- firmware/baseband/main.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index a496f1d66..d5b5e0799 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -700,6 +700,18 @@ static void init() { ); } +static void shutdown() { + // TODO: Is this complete? + + nvicDisableVector(DMA_IRQn); + + m0apptxevent_interrupt_disable(); + + chSysDisable(); + + systick_stop(); +} + class EventDispatcher { public: MessageHandlerMap& message_handlers() { @@ -774,18 +786,6 @@ private: } }; -static void shutdown() { - // TODO: Is this complete? - - nvicDisableVector(DMA_IRQn); - - m0apptxevent_interrupt_disable(); - - chSysDisable(); - - systick_stop(); -} - static constexpr auto direction = baseband::Direction::Receive; int main(void) { From fa275156ed237c05abd4cab69ec495ebed68561c Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 09:18:21 -0700 Subject: [PATCH 035/224] Move FSKPacketMessage to stack. --- firmware/baseband/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index d5b5e0799..7aedc6771 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -558,7 +558,6 @@ private: AccessCodeCorrelator access_code_correlator; PacketBuilder packet_builder; - FSKPacketMessage message; MessageHandlerMap& message_handlers; void consume_symbol( @@ -583,6 +582,7 @@ private: const std::bitset<256>& payload, const size_t bits_received ) { + FSKPacketMessage message; message.packet.payload = payload; message.packet.bits_received = bits_received; shared_memory.application_queue.push(message); From 3a96c04aa73d2f0c2b580dd73de11e94065e58db Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 09:19:08 -0700 Subject: [PATCH 036/224] Implement, use configuration for FM demod deviation. --- firmware/baseband/dsp_demodulate.hpp | 6 +++++- firmware/baseband/main.cpp | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) 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/main.cpp b/firmware/baseband/main.cpp index 7aedc6771..75974d754 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -492,6 +492,7 @@ public: } void configure(const FSKConfiguration new_configuration) { + demod.configure(76800, 2 * new_configuration.symbol_rate); clock_recovery.configure(new_configuration.symbol_rate, 76800); access_code_correlator.configure( new_configuration.access_code, From fe7dcdc613b29215324e26d0eaa2cc797cb74f10 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 24 Aug 2015 12:09:11 -0700 Subject: [PATCH 037/224] Function to adjust clock generator XTAL PLL frequency. Needed to switch PLLA to operate in fractional mode. --- firmware/application/clock_manager.cpp | 18 +++++++++++++++++- firmware/application/clock_manager.hpp | 2 ++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/firmware/application/clock_manager.cpp b/firmware/application/clock_manager.cpp index e6c4d242f..09404806a 100644 --- a/firmware/application/clock_manager.cpp +++ b/firmware/application/clock_manager.cpp @@ -232,7 +232,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 +368,22 @@ 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; + const uint32_t new_a = (ppb >= 0) ? pll_multiplier : (pll_multiplier - 1); + const uint32_t new_b = (ppb >= 0) ? (ppb * pll_multiplier / 1000) : (1000000 + (ppb * pll_multiplier / 1000)); + const uint32_t new_c = (ppb == 0) ? 1 : 1000000; + + 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; From 8f326e2d8e4d515e0baee8d95d07f5fed0239b1b Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 24 Aug 2015 12:10:39 -0700 Subject: [PATCH 038/224] Use PPB correction to adjust clock generator XTAL PLLA frequency. Addresses issue #40. --- firmware/application/portapack.cpp | 2 ++ firmware/application/radio.cpp | 5 +---- firmware/application/receiver_model.cpp | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/firmware/application/portapack.cpp b/firmware/application/portapack.cpp index 8f60e0647..b640d3576 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" @@ -127,6 +128,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(); diff --git a/firmware/application/radio.cpp b/firmware/application/radio.cpp index 6073ca10b..bd0a80849 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(); diff --git a/firmware/application/receiver_model.cpp b/firmware/application/receiver_model.cpp index 164d9ce87..93090025b 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 { From dfe0bd736687817054a435d3ff2946b5ba2bce2d Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 25 Aug 2015 14:30:38 -0700 Subject: [PATCH 039/224] Generate SPI flash image with Python, not dd/cat/head. Addresses issue #42. Windows users now stand a chance of being able to build an image, and all these zero-byte HackRF binary issues should go away. --- firmware/Makefile | 28 ++++------ firmware/tools/make_spi_image.py | 90 ++++++++++++++++++++++++++++++++ 2 files changed, 100 insertions(+), 18 deletions(-) create mode 100755 firmware/tools/make_spi_image.py diff --git a/firmware/Makefile b/firmware/Makefile index 5e89d2ab6..fe1faf1a7 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,6 +30,8 @@ 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 @@ -56,19 +53,14 @@ 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 @@ -84,8 +76,8 @@ $(TARGET_BOOTSTRAP).elf: always_check 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/tools/make_spi_image.py b/firmware/tools/make_spi_image.py new file mode 100755 index 000000000..a1dc6b1c5 --- /dev/null +++ b/firmware/tools/make_spi_image.py @@ -0,0 +1,90 @@ +#!/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 write_image(data, path): + f = open(path, 'wb') + f.write(data) + f.close() + +if len(sys.argv) != 6: + print(usage_message) + sys.exit(-1) + +input_paths = sys.argv[1:5] +output_path = sys.argv[5] +bootstrap_image, hackrf_image, baseband_image, application_image = map(read_image, input_paths) +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 = [] +spi_image_default_byte = '\xff' + +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 + +spi_image = ''.join(spi_image) +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) From f7ced7a8232e0af247b5d66000ca9bd8c4e8fc8a Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 25 Aug 2015 14:56:50 -0700 Subject: [PATCH 040/224] Support Python 3.x in make_spi_image.py. --- firmware/tools/make_spi_image.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/firmware/tools/make_spi_image.py b/firmware/tools/make_spi_image.py index a1dc6b1c5..3c1754c99 100755 --- a/firmware/tools/make_spi_image.py +++ b/firmware/tools/make_spi_image.py @@ -73,8 +73,8 @@ images = ( } ) -spi_image = [] -spi_image_default_byte = '\xff' +spi_image = bytearray() +spi_image_default_byte = bytearray((255,)) for image in images: if len(image['data']) > image['size']: @@ -83,7 +83,6 @@ for image in images: padded_data = image['data'] + (spi_image_default_byte * pad_size) spi_image += padded_data -spi_image = ''.join(spi_image) 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)) From 4fe145b61d98dd26a1af369862346400255ba452 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 25 Aug 2015 15:11:22 -0700 Subject: [PATCH 041/224] Remove application kludge to strip DFU of header. Strip the header in in the Python SPI image generator, instead. --- firmware/common/spi_image.hpp | 2 +- firmware/tools/make_spi_image.py | 12 ++++++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/firmware/common/spi_image.hpp b/firmware/common/spi_image.hpp index 8f35c4784..f8e71d624 100644 --- a/firmware/common/spi_image.hpp +++ b/firmware/common/spi_image.hpp @@ -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, }; diff --git a/firmware/tools/make_spi_image.py b/firmware/tools/make_spi_image.py index 3c1754c99..646fa59ed 100755 --- a/firmware/tools/make_spi_image.py +++ b/firmware/tools/make_spi_image.py @@ -36,6 +36,11 @@ def read_image(path): 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) @@ -45,9 +50,12 @@ if len(sys.argv) != 6: print(usage_message) sys.exit(-1) -input_paths = sys.argv[1:5] +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] -bootstrap_image, hackrf_image, baseband_image, application_image = map(read_image, input_paths) + spi_size = 1048576 images = ( From 98773cb62ac0583679a07bf12c539d1de12016b8 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 25 Aug 2015 16:33:52 -0700 Subject: [PATCH 042/224] Make GIT_REVISION value available within code. Addresses issue #59. No idea what it'll do if the commit is also tagged as a release... --- firmware/Makefile | 8 ++++---- firmware/application/Makefile | 3 ++- firmware/application/ui_setup.hpp | 2 +- firmware/baseband/Makefile | 3 ++- firmware/bootstrap/Makefile | 1 + 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index fe1faf1a7..8049df9f4 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -35,7 +35,7 @@ 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 @@ -66,13 +66,13 @@ $(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 diff --git a/firmware/application/Makefile b/firmware/application/Makefile index 879c2501d..b212639c0 100755 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -254,7 +254,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/ui_setup.hpp b/firmware/application/ui_setup.hpp index b2f975bde..3b0bae081 100644 --- a/firmware/application/ui_setup.hpp +++ b/firmware/application/ui_setup.hpp @@ -190,7 +190,7 @@ private: Text text_firmware { { 0, 128, 240, 16 }, - "Firmware Version git-??????", + "Git Commit Hash " GIT_REVISION, }; Text text_cpld_hackrf { diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index 91add4fb5..10b327cab 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -223,7 +223,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/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 \ From 4974774f823d33b28411386f720c6a40311d0897 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 25 Aug 2015 17:56:03 -0700 Subject: [PATCH 043/224] Simplify PLL math when correcting for PPM. --- firmware/application/clock_manager.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/firmware/application/clock_manager.cpp b/firmware/application/clock_manager.cpp index 09404806a..fdd41b010 100644 --- a/firmware/application/clock_manager.cpp +++ b/firmware/application/clock_manager.cpp @@ -370,9 +370,10 @@ void ClockManager::set_sampling_frequency(const uint32_t frequency) { 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 * pll_multiplier / 1000) : (1000000 + (ppb * pll_multiplier / 1000)); - const uint32_t new_c = (ppb == 0) ? 1 : 1000000; + 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, From 7937ea7327a461646fb2b0808bd3ebed7f65d2e5 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 26 Aug 2015 14:13:51 -0700 Subject: [PATCH 044/224] Enable DMB instruction at end of FIFO data copy. Can't hurt to make sure FIFO and buffer state are flushed before returning to caller... --- firmware/common/fifo.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/common/fifo.hpp b/firmware/common/fifo.hpp index f266304e9..338f90569 100644 --- a/firmware/common/fifo.hpp +++ b/firmware/common/fifo.hpp @@ -139,7 +139,7 @@ private: } void smp_wmb() { - /*__DMB();*/ + __DMB(); } size_t peek_n() { From 035ec84f040b908fb632db808f54150bb8727609 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 26 Aug 2015 14:18:03 -0700 Subject: [PATCH 045/224] Wrap MessageQueue.push() with mutex. This addresses issue #61, occasional FIFO/data corruption. With the mutex, any thread on one core can write to the FIFO. But still, only one thread on one core should read from the FIFO. --- firmware/common/message_queue.hpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/firmware/common/message_queue.hpp b/firmware/common/message_queue.hpp index 814ec007d..0d023f92a 100644 --- a/firmware/common/message_queue.hpp +++ b/firmware/common/message_queue.hpp @@ -30,9 +30,15 @@ #include "lpc43xx_cpp.hpp" using namespace lpc43xx; +#include + template class MessageQueue { public: + MessageQueue() { + chMtxInit(&mutex_write); + } + template bool push(const T& message) { static_assert(sizeof(T) <= Message::MAX_SIZE, "Message::MAX_SIZE too small for message type"); @@ -55,9 +61,13 @@ public: private: FIFO fifo; + Mutex mutex_write; 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(); From c92bf12fbdd8cd3b02cfe6be66c3abc263370058 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 09:49:14 -0700 Subject: [PATCH 046/224] Extract ChannelDecimator into separate files. --- firmware/baseband/Makefile | 1 + firmware/baseband/channel_decimator.cpp | 74 +++++++++++++++++ firmware/baseband/channel_decimator.hpp | 83 +++++++++++++++++++ firmware/baseband/main.cpp | 103 +----------------------- 4 files changed, 160 insertions(+), 101 deletions(-) create mode 100644 firmware/baseband/channel_decimator.cpp create mode 100644 firmware/baseband/channel_decimator.hpp diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index 10b327cab..ee221a648 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -129,6 +129,7 @@ CPPSRC = main.cpp \ gpdma.cpp \ baseband_dma.cpp \ portapack_shared_memory.cpp \ + channel_decimator.cpp \ dsp_decimate.cpp \ dsp_demodulate.cpp \ clock_recovery.cpp \ diff --git a/firmware/baseband/channel_decimator.cpp b/firmware/baseband/channel_decimator.cpp new file mode 100644 index 000000000..89d1af4a4 --- /dev/null +++ b/firmware/baseband/channel_decimator.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 "channel_decimator.hpp" + +buffer_c16_t ChannelDecimator::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; +} diff --git a/firmware/baseband/channel_decimator.hpp b/firmware/baseband/channel_decimator.hpp new file mode 100644 index 000000000..9ec773f81 --- /dev/null +++ b/firmware/baseband/channel_decimator.hpp @@ -0,0 +1,83 @@ +/* + * 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, + }; + + ChannelDecimator( + DecimationFactor f + ) : decimation_factor { f } + { + } + + 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 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); +}; + +#endif/*__CHANNEL_DECIMATOR_H__*/ diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 75974d754..51d7f3ea4 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -51,6 +51,8 @@ #include "channel_stats_collector.hpp" #include "audio_stats_collector.hpp" +#include "channel_decimator.hpp" + #include "block_decimator.hpp" #include "clock_recovery.hpp" #include "access_code_correlator.hpp" @@ -76,107 +78,6 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; -class ChannelDecimator { -public: - enum class DecimationFactor { - By4, - By8, - By16, - By32, - }; - - ChannelDecimator( - DecimationFactor f - ) : decimation_factor { f } - { - } - - 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 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; - } -}; - static constexpr iir_biquad_config_t audio_hpf_config { { 0.93346032f, -1.86687724f, 0.93346032f }, { 1.0f , -1.97730264f, 0.97773668f } From b904971ef20e84c8a2493d7cab23db20d29f218e Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 09:58:37 -0700 Subject: [PATCH 047/224] Extract IIR filter configurations into separate file. --- firmware/baseband/dsp_iir_config.hpp | 37 ++++++++++++++++++++++++++++ firmware/baseband/main.cpp | 11 +-------- 2 files changed, 38 insertions(+), 10 deletions(-) create mode 100644 firmware/baseband/dsp_iir_config.hpp 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/main.cpp b/firmware/baseband/main.cpp index 51d7f3ea4..4545d07e3 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -45,6 +45,7 @@ #include "dsp_fft.hpp" #include "dsp_fir_taps.hpp" #include "dsp_iir.hpp" +#include "dsp_iir_config.hpp" #include "baseband_stats_collector.hpp" #include "rssi_stats_collector.hpp" @@ -78,16 +79,6 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; -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 { public: bool execute(buffer_s16_t audio) { From de0777f476f748e09dd27cadec15aaac656b4780 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 09:59:03 -0700 Subject: [PATCH 048/224] Extract FMSquelch into separate files. --- firmware/baseband/Makefile | 1 + firmware/baseband/dsp_squelch.cpp | 45 +++++++++++++++++++++++++++++++ firmware/baseband/dsp_squelch.hpp | 45 +++++++++++++++++++++++++++++++ firmware/baseband/main.cpp | 32 +--------------------- 4 files changed, 92 insertions(+), 31 deletions(-) create mode 100644 firmware/baseband/dsp_squelch.cpp create mode 100644 firmware/baseband/dsp_squelch.hpp diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index ee221a648..7ef768692 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -132,6 +132,7 @@ CPPSRC = main.cpp \ channel_decimator.cpp \ dsp_decimate.cpp \ dsp_demodulate.cpp \ + dsp_squelch.cpp \ clock_recovery.cpp \ access_code_correlator.cpp \ packet_builder.cpp \ 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/main.cpp b/firmware/baseband/main.cpp index 4545d07e3..c3d9f3f73 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -46,6 +46,7 @@ #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" @@ -79,37 +80,6 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; -class FMSquelch { -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 }; From 04d05368c76c6cb9d52f5501dee1b1e7489a47ca Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 10:48:29 -0700 Subject: [PATCH 049/224] Push static variables and spectrum calc into BasebandProcessor. --- firmware/baseband/main.cpp | 63 +++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 28 deletions(-) diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index c3d9f3f73..96101082d 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -80,18 +80,39 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; -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; + void update_spectrum() { + // Called from idle thread (after EVT_MASK_SPECTRUM is flagged) + 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); + + 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); + } + } + protected: void feed_channel_stats(const buffer_c16_t channel) { channel_stats.feed( @@ -136,6 +157,12 @@ private: AudioStatsCollector audio_stats; AudioStatisticsMessage audio_stats_message; + volatile bool channel_spectrum_request_update { false }; + std::array channel_spectrum; + uint32_t channel_spectrum_sampling_rate { 0 }; + uint32_t channel_filter_pass_frequency { 0 }; + uint32_t channel_filter_stop_frequency { 0 }; + void post_channel_stats_message(const ChannelStatistics statistics) { channel_stats_message.statistics = statistics; shared_memory.application_queue.push(channel_stats_message); @@ -623,28 +650,8 @@ private: } void handle_spectrum() { - if( channel_spectrum_request_update ) { - /* Decimated buffer is full. Compute spectrum. */ - std::array, channel_spectrum.size()> samples_swapped; - fft_swap(channel_spectrum, samples_swapped); - channel_spectrum_request_update = false; - fft_c_preswapped(samples_swapped); - - 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); + if( baseband_processor ) { + baseband_processor->update_spectrum(); } } }; From b0e9afe26c2d4cf5f9cf7451d0c9a04e1d0580cd Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 11:10:44 -0700 Subject: [PATCH 050/224] Add missing #includes. --- firmware/baseband/block_decimator.hpp | 2 ++ 1 file changed, 2 insertions(+) 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 From 6bf61cbe88e80e32dc1b1f5ef8a6b3ffe5d11c20 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 11:11:08 -0700 Subject: [PATCH 051/224] Extract BasebandProcessor into separate files. --- firmware/baseband/Makefile | 1 + firmware/baseband/baseband_processor.cpp | 124 +++++++++++++++++++++++ firmware/baseband/baseband_processor.hpp | 75 ++++++++++++++ firmware/baseband/main.cpp | 117 +-------------------- 4 files changed, 201 insertions(+), 116 deletions(-) create mode 100644 firmware/baseband/baseband_processor.cpp create mode 100644 firmware/baseband/baseband_processor.hpp diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index 7ef768692..5bdab3445 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -129,6 +129,7 @@ CPPSRC = main.cpp \ gpdma.cpp \ baseband_dma.cpp \ portapack_shared_memory.cpp \ + baseband_processor.cpp \ channel_decimator.cpp \ dsp_decimate.cpp \ dsp_demodulate.cpp \ diff --git a/firmware/baseband/baseband_processor.cpp b/firmware/baseband/baseband_processor.cpp new file mode 100644 index 000000000..7edb8da10 --- /dev/null +++ b/firmware/baseband/baseband_processor.cpp @@ -0,0 +1,124 @@ +/* + * 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. */ + std::array, 256> samples_swapped; + fft_swap(channel_spectrum, samples_swapped); + channel_spectrum_request_update = false; + fft_c_preswapped(samples_swapped); + + 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..66d7936d2 --- /dev/null +++ b/firmware/baseband/baseband_processor.hpp @@ -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. + */ + +#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 + +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); + +private: + BlockDecimator<256> channel_spectrum_decimator { 4 }; + + ChannelStatsCollector channel_stats; + ChannelStatisticsMessage channel_stats_message; + + AudioStatsCollector audio_stats; + AudioStatisticsMessage audio_stats_message; + + volatile bool channel_spectrum_request_update { false }; + std::array channel_spectrum; + uint32_t channel_spectrum_sampling_rate { 0 }; + uint32_t channel_filter_pass_frequency { 0 }; + uint32_t channel_filter_stop_frequency { 0 }; + + 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/main.cpp b/firmware/baseband/main.cpp index 96101082d..fd7202d67 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -42,7 +42,6 @@ #include "dsp_decimate.hpp" #include "dsp_demodulate.hpp" -#include "dsp_fft.hpp" #include "dsp_fir_taps.hpp" #include "dsp_iir.hpp" #include "dsp_iir_config.hpp" @@ -50,12 +49,10 @@ #include "baseband_stats_collector.hpp" #include "rssi_stats_collector.hpp" -#include "channel_stats_collector.hpp" -#include "audio_stats_collector.hpp" #include "channel_decimator.hpp" +#include "baseband_processor.hpp" -#include "block_decimator.hpp" #include "clock_recovery.hpp" #include "access_code_correlator.hpp" #include "packet_builder.hpp" @@ -80,118 +77,6 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; -class BasebandProcessor { -public: - virtual ~BasebandProcessor() = default; - - virtual void execute(buffer_c8_t buffer) = 0; - - void update_spectrum() { - // Called from idle thread (after EVT_MASK_SPECTRUM is flagged) - 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); - - 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); - } - } - -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; - - volatile bool channel_spectrum_request_update { false }; - std::array channel_spectrum; - uint32_t channel_spectrum_sampling_rate { 0 }; - uint32_t channel_filter_pass_frequency { 0 }; - uint32_t channel_filter_stop_frequency { 0 }; - - void post_channel_stats_message(const ChannelStatistics statistics) { - 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) { - 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 { From e246ea2c3991f06f5ef0bf8fc2a9ad635c16215d Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 13:07:07 -0700 Subject: [PATCH 052/224] Extract NarrowbandAMAudio class into separate files. --- firmware/baseband/Makefile | 1 + firmware/baseband/main.cpp | 46 +--------------------- firmware/baseband/proc_am_audio.cpp | 59 +++++++++++++++++++++++++++++ firmware/baseband/proc_am_audio.hpp | 46 ++++++++++++++++++++++ 4 files changed, 107 insertions(+), 45 deletions(-) create mode 100644 firmware/baseband/proc_am_audio.cpp create mode 100644 firmware/baseband/proc_am_audio.hpp diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index 5bdab3445..c15e59201 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -133,6 +133,7 @@ CPPSRC = main.cpp \ channel_decimator.cpp \ dsp_decimate.cpp \ dsp_demodulate.cpp \ + proc_am_audio.cpp \ dsp_squelch.cpp \ clock_recovery.cpp \ access_code_correlator.cpp \ diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index fd7202d67..87c81474d 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -52,6 +52,7 @@ #include "channel_decimator.hpp" #include "baseband_processor.hpp" +#include "proc_am_audio.hpp" #include "clock_recovery.hpp" #include "access_code_correlator.hpp" @@ -77,51 +78,6 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; -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 { 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..5ba413026 --- /dev/null +++ b/firmware/baseband/proc_am_audio.hpp @@ -0,0 +1,46 @@ +/* + * 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: + void execute(buffer_c8_t buffer) override; + +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 }; +}; + +#endif/*__PROC_AM_AUDIO_H__*/ From 7c5db55f8f4308eebcda66caa29f3894376e73d5 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 13:14:45 -0700 Subject: [PATCH 053/224] Extract NarrowbandFMAudio into separate files. --- firmware/baseband/Makefile | 1 + firmware/baseband/main.cpp | 62 +---------------------- firmware/baseband/proc_nfm_audio.cpp | 74 ++++++++++++++++++++++++++++ firmware/baseband/proc_nfm_audio.hpp | 49 ++++++++++++++++++ 4 files changed, 125 insertions(+), 61 deletions(-) create mode 100644 firmware/baseband/proc_nfm_audio.cpp create mode 100644 firmware/baseband/proc_nfm_audio.hpp diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index c15e59201..4542dccf2 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -134,6 +134,7 @@ CPPSRC = main.cpp \ dsp_decimate.cpp \ dsp_demodulate.cpp \ proc_am_audio.cpp \ + proc_nfm_audio.cpp \ dsp_squelch.cpp \ clock_recovery.cpp \ access_code_correlator.cpp \ diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 87c81474d..fdd18f3b7 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -53,6 +53,7 @@ #include "channel_decimator.hpp" #include "baseband_processor.hpp" #include "proc_am_audio.hpp" +#include "proc_nfm_audio.hpp" #include "clock_recovery.hpp" #include "access_code_correlator.hpp" @@ -78,67 +79,6 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; -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 { 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::FIRAndDecimateBy2Complex<64> channel_filter { channel_filter_taps.taps }; + dsp::demodulate::FM demod { 48000, 7500 }; + + IIRBiquadFilter audio_hpf { audio_hpf_config }; + FMSquelch squelch; +}; + +#endif/*__PROC_NFM_AUDIO_H__*/ From ffe829cf67207d835fefc0fc8881e8e886a8755b Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 13:19:34 -0700 Subject: [PATCH 054/224] Extract WidebandFMAudio into separate files. --- firmware/baseband/Makefile | 1 + firmware/baseband/main.cpp | 65 +------------------------ firmware/baseband/proc_wfm_audio.cpp | 72 ++++++++++++++++++++++++++++ firmware/baseband/proc_wfm_audio.hpp | 52 ++++++++++++++++++++ 4 files changed, 126 insertions(+), 64 deletions(-) create mode 100644 firmware/baseband/proc_wfm_audio.cpp create mode 100644 firmware/baseband/proc_wfm_audio.hpp diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index 4542dccf2..ada44f74a 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -135,6 +135,7 @@ CPPSRC = main.cpp \ dsp_demodulate.cpp \ proc_am_audio.cpp \ proc_nfm_audio.cpp \ + proc_wfm_audio.cpp \ dsp_squelch.cpp \ clock_recovery.cpp \ access_code_correlator.cpp \ diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index fdd18f3b7..62e3b2d7e 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -54,6 +54,7 @@ #include "baseband_processor.hpp" #include "proc_am_audio.hpp" #include "proc_nfm_audio.hpp" +#include "proc_wfm_audio.hpp" #include "clock_recovery.hpp" #include "access_code_correlator.hpp" @@ -79,70 +80,6 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; -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( 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..1de45d541 --- /dev/null +++ b/firmware/baseband/proc_wfm_audio.hpp @@ -0,0 +1,52 @@ +/* + * 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: + void execute(buffer_c8_t buffer) override; + +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 }; +}; + +#endif/*__PROC_WFM_AUDIO_H__*/ From c7907e948cc112a4b612fa0632b797a43e6d3bd8 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 13:31:39 -0700 Subject: [PATCH 055/224] Extract FSKProcessor into separate files. --- firmware/baseband/Makefile | 1 + firmware/baseband/main.cpp | 118 +----------------------------- firmware/baseband/proc_fsk.cpp | 129 +++++++++++++++++++++++++++++++++ firmware/baseband/proc_fsk.hpp | 67 +++++++++++++++++ 4 files changed, 198 insertions(+), 117 deletions(-) create mode 100644 firmware/baseband/proc_fsk.cpp create mode 100644 firmware/baseband/proc_fsk.hpp diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index ada44f74a..6331b7981 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -136,6 +136,7 @@ CPPSRC = main.cpp \ proc_am_audio.cpp \ proc_nfm_audio.cpp \ proc_wfm_audio.cpp \ + proc_fsk.cpp \ dsp_squelch.cpp \ clock_recovery.cpp \ access_code_correlator.cpp \ diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 62e3b2d7e..3fa152a5f 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -55,6 +55,7 @@ #include "proc_am_audio.hpp" #include "proc_nfm_audio.hpp" #include "proc_wfm_audio.hpp" +#include "proc_fsk.hpp" #include "clock_recovery.hpp" #include "access_code_correlator.hpp" @@ -80,123 +81,6 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; -class FSKProcessor : public BasebandProcessor { -public: - FSKProcessor( - MessageHandlerMap& message_handlers - ) : message_handlers(message_handlers) - { - message_handlers.register_handler(Message::ID::FSKConfiguration, - [this](const Message* const p) { - auto m = reinterpret_cast(p); - this->configure(m->configuration); - } - ); - } - - ~FSKProcessor() { - message_handlers.unregister_handler(Message::ID::FSKConfiguration); - } - - void configure(const FSKConfiguration new_configuration) { - demod.configure(76800, 2 * new_configuration.symbol_rate); - 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 - ); - 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 }; - - ClockRecovery clock_recovery; - AccessCodeCorrelator access_code_correlator; - PacketBuilder packet_builder; - - 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); - }; - - packet_builder.execute( - symbol, - access_code_found, - payload_handler_fn - ); - } - - void payload_handler( - const std::bitset<256>& payload, - const size_t bits_received - ) { - FSKPacketMessage message; - message.packet.payload = payload; - message.packet.bits_received = bits_received; - shared_memory.application_queue.push(message); - } -}; - static BasebandProcessor* baseband_processor { nullptr }; static BasebandConfiguration baseband_configuration; diff --git a/firmware/baseband/proc_fsk.cpp b/firmware/baseband/proc_fsk.cpp new file mode 100644 index 000000000..a4ccdbdc0 --- /dev/null +++ b/firmware/baseband/proc_fsk.cpp @@ -0,0 +1,129 @@ +/* + * 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_fsk.hpp" + +#include "portapack_shared_memory.hpp" + +#include "i2s.hpp" +using namespace lpc43xx; + +FSKProcessor::FSKProcessor( + MessageHandlerMap& message_handlers +) : message_handlers(message_handlers) +{ + message_handlers.register_handler(Message::ID::FSKConfiguration, + [this](const Message* const p) { + auto m = reinterpret_cast(p); + this->configure(m->configuration); + } + ); +} + +FSKProcessor::~FSKProcessor() { + message_handlers.unregister_handler(Message::ID::FSKConfiguration); +} + +void FSKProcessor::configure(const FSKConfiguration new_configuration) { + demod.configure(76800, 2 * new_configuration.symbol_rate); + 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 + ); + packet_builder.configure(new_configuration.packet_length); +} + +void FSKProcessor::execute(buffer_c8_t buffer) { + /* 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& payload, + const size_t bits_received + ) { + this->payload_handler(payload, bits_received); + }; + + packet_builder.execute( + symbol, + access_code_found, + payload_handler_fn + ); +} + +void FSKProcessor::payload_handler( + const std::bitset<256>& payload, + const size_t bits_received +) { + FSKPacketMessage message; + message.packet.payload = payload; + message.packet.bits_received = bits_received; + shared_memory.application_queue.push(message); +} diff --git a/firmware/baseband/proc_fsk.hpp b/firmware/baseband/proc_fsk.hpp new file mode 100644 index 000000000..3bb134dc1 --- /dev/null +++ b/firmware/baseband/proc_fsk.hpp @@ -0,0 +1,67 @@ +/* + * 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_FSK_H__ +#define __PROC_FSK_H__ + +#include "baseband_processor.hpp" + +#include "channel_decimator.hpp" +#include "dsp_decimate.hpp" +#include "dsp_demodulate.hpp" +#include "dsp_fir_taps.hpp" + +#include "clock_recovery.hpp" +#include "access_code_correlator.hpp" +#include "packet_builder.hpp" + +#include "message.hpp" + +#include +#include +#include + +class FSKProcessor : public BasebandProcessor { +public: + FSKProcessor(MessageHandlerMap& message_handlers); + ~FSKProcessor(); + + void configure(const FSKConfiguration new_configuration); + + void execute(buffer_c8_t buffer) override; + +private: + ChannelDecimator decimator { ChannelDecimator::DecimationFactor::By16 }; + 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::FM demod { 76800, 9600 * 2 }; + + ClockRecovery clock_recovery; + AccessCodeCorrelator access_code_correlator; + PacketBuilder packet_builder; + + MessageHandlerMap& message_handlers; + + void consume_symbol(const uint_fast8_t symbol, const bool access_code_found); + void payload_handler(const std::bitset<256>& payload, const size_t bits_received); +}; + +#endif/*__PROC_FSK_H__*/ From 23ac04ad5613bf87af96db089266258587518ac6 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 13:51:55 -0700 Subject: [PATCH 056/224] Make channel spectrum members protected, not private. --- firmware/baseband/baseband_processor.hpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/firmware/baseband/baseband_processor.hpp b/firmware/baseband/baseband_processor.hpp index 66d7936d2..fea0cd643 100644 --- a/firmware/baseband/baseband_processor.hpp +++ b/firmware/baseband/baseband_processor.hpp @@ -51,6 +51,12 @@ protected: void fill_audio_buffer(const buffer_s16_t audio); + volatile bool channel_spectrum_request_update { false }; + std::array 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 }; @@ -60,12 +66,6 @@ private: AudioStatsCollector audio_stats; AudioStatisticsMessage audio_stats_message; - volatile bool channel_spectrum_request_update { false }; - std::array channel_spectrum; - uint32_t channel_spectrum_sampling_rate { 0 }; - uint32_t channel_filter_pass_frequency { 0 }; - uint32_t channel_filter_stop_frequency { 0 }; - 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); From e751e10e4501b4b72cf27568267f85e461f4b837 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 13:57:31 -0700 Subject: [PATCH 057/224] Add wideband spectrum processor. --- firmware/application/receiver_model.cpp | 24 +-- firmware/application/receiver_model.hpp | 6 +- firmware/application/ui_receiver.cpp | 34 +++- firmware/application/ui_receiver.hpp | 1 + firmware/baseband/Makefile | 1 + firmware/baseband/main.cpp | 5 + firmware/baseband/proc_wideband_spectrum.cpp | 197 +++++++++++++++++++ firmware/baseband/proc_wideband_spectrum.hpp | 37 ++++ 8 files changed, 278 insertions(+), 27 deletions(-) create mode 100644 firmware/baseband/proc_wideband_spectrum.cpp create mode 100644 firmware/baseband/proc_wideband_spectrum.hpp diff --git a/firmware/application/receiver_model.cpp b/firmware/application/receiver_model.cpp index 93090025b..009ae8294 100644 --- a/firmware/application/receiver_model.cpp +++ b/firmware/application/receiver_model.cpp @@ -92,20 +92,10 @@ 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(uint32_t v) { - baseband_configuration.mode = v; - update_modulation(); -} - volume_t ReceiverModel::headphone_volume() const { return headphone_volume_; } @@ -120,11 +110,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); update_tuning_frequency(); @@ -153,7 +138,11 @@ void ReceiverModel::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() { @@ -176,7 +165,8 @@ 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(); } diff --git a/firmware/application/receiver_model.hpp b/firmware/application/receiver_model.hpp index a6af119c5..9fc7aefdf 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(uint32_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 }; @@ -96,7 +95,6 @@ private: void update_lna(); void update_baseband_bandwidth(); void update_vga(); - void update_modulation(); void update_baseband_configuration(); void update_headphone_volume(); diff --git a/firmware/application/ui_receiver.cpp b/firmware/application/ui_receiver.cpp index 7dfbb38e9..2ff8c8f23 100644 --- a/firmware/application/ui_receiver.cpp +++ b/firmware/application/ui_receiver.cpp @@ -538,13 +538,35 @@ void ReceiverView::on_vga_changed(int32_t v_db) { } void ReceiverView::on_modulation_changed(int32_t modulation) { - if( modulation == 3 ) { - /* 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: + 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; } - 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 3280ede62..01725aad5 100644 --- a/firmware/application/ui_receiver.hpp +++ b/firmware/application/ui_receiver.hpp @@ -419,6 +419,7 @@ private: { "NFM ", 1 }, { "WFM ", 2 }, { "FSK ", 3 }, + { "SPEC", 4 }, } }; /* diff --git a/firmware/baseband/Makefile b/firmware/baseband/Makefile index 6331b7981..b92cf0c82 100755 --- a/firmware/baseband/Makefile +++ b/firmware/baseband/Makefile @@ -137,6 +137,7 @@ CPPSRC = main.cpp \ proc_nfm_audio.cpp \ proc_wfm_audio.cpp \ proc_fsk.cpp \ + proc_wideband_spectrum.cpp \ dsp_squelch.cpp \ clock_recovery.cpp \ access_code_correlator.cpp \ diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 3fa152a5f..297d63c0a 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -56,6 +56,7 @@ #include "proc_nfm_audio.hpp" #include "proc_wfm_audio.hpp" #include "proc_fsk.hpp" +#include "proc_wideband_spectrum.hpp" #include "clock_recovery.hpp" #include "access_code_correlator.hpp" @@ -296,6 +297,10 @@ int main(void) { baseband_processor = new FSKProcessor(message_handlers); break; + case 4: + baseband_processor = new WidebandSpectrum(); + break; + default: break; } diff --git a/firmware/baseband/proc_wideband_spectrum.cpp b/firmware/baseband/proc_wideband_spectrum.cpp new file mode 100644 index 000000000..394809813 --- /dev/null +++ b/firmware/baseband/proc_wideband_spectrum.cpp @@ -0,0 +1,197 @@ +/* + * 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 +#include + +#include + +// numpy.array(numpy.round(scipy.signal.windows.blackmanharris(1024) * 32767), dtype=numpy.int16) +static constexpr std::array window_blackmanharris_1024 { { + 2, 2, 2, 2, 2, 2, 3, 3, + 3, 3, 4, 4, 5, 5, 5, 6, + 7, 7, 8, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 20, + 22, 23, 24, 26, 27, 29, 31, 32, + 34, 36, 38, 40, 42, 44, 46, 48, + 51, 53, 56, 58, 61, 64, 67, 70, + 73, 76, 79, 82, 86, 89, 93, 97, + 100, 104, 109, 113, 117, 122, 126, 131, + 136, 141, 146, 151, 156, 162, 168, 173, + 179, 186, 192, 198, 205, 212, 219, 226, + 233, 241, 249, 256, 265, 273, 281, 290, + 299, 308, 317, 327, 337, 347, 357, 367, + 378, 389, 400, 411, 423, 435, 447, 459, + 472, 485, 498, 512, 526, 540, 554, 569, + 584, 599, 614, 630, 646, 663, 680, 697, + 714, 732, 750, 769, 788, 807, 827, 846, + 867, 887, 908, 930, 952, 974, 996, 1019, + 1043, 1066, 1091, 1115, 1140, 1166, 1192, 1218, + 1245, 1272, 1299, 1327, 1356, 1385, 1414, 1444, + 1475, 1506, 1537, 1569, 1601, 1634, 1667, 1701, + 1735, 1770, 1805, 1841, 1878, 1915, 1952, 1990, + 2029, 2068, 2107, 2147, 2188, 2229, 2271, 2314, + 2357, 2400, 2444, 2489, 2534, 2580, 2627, 2674, + 2721, 2770, 2819, 2868, 2918, 2969, 3020, 3072, + 3125, 3178, 3232, 3287, 3342, 3398, 3454, 3511, + 3569, 3628, 3687, 3746, 3807, 3868, 3930, 3992, + 4055, 4119, 4183, 4249, 4314, 4381, 4448, 4516, + 4585, 4654, 4724, 4794, 4866, 4938, 5010, 5084, + 5158, 5233, 5308, 5385, 5462, 5539, 5618, 5697, + 5776, 5857, 5938, 6020, 6103, 6186, 6270, 6355, + 6440, 6526, 6613, 6700, 6789, 6878, 6967, 7058, + 7149, 7240, 7333, 7426, 7520, 7614, 7710, 7805, + 7902, 7999, 8097, 8196, 8295, 8395, 8496, 8597, + 8699, 8802, 8905, 9009, 9114, 9219, 9325, 9431, + 9539, 9646, 9755, 9864, 9974, 10084, 10195, 10306, +10419, 10531, 10645, 10759, 10873, 10988, 11104, 11220, +11337, 11454, 11572, 11691, 11810, 11929, 12049, 12170, +12291, 12412, 12534, 12657, 12780, 12903, 13027, 13152, +13277, 13402, 13528, 13654, 13781, 13908, 14035, 14163, +14291, 14420, 14549, 14678, 14808, 14938, 15068, 15199, +15330, 15461, 15593, 15725, 15857, 15989, 16122, 16255, +16388, 16522, 16655, 16789, 16923, 17058, 17192, 17327, +17461, 17596, 17731, 17867, 18002, 18137, 18273, 18408, +18544, 18680, 18815, 18951, 19087, 19223, 19358, 19494, +19630, 19765, 19901, 20037, 20172, 20308, 20443, 20578, +20713, 20848, 20983, 21118, 21252, 21386, 21520, 21654, +21788, 21921, 22054, 22187, 22320, 22452, 22584, 22716, +22847, 22978, 23109, 23239, 23369, 23499, 23628, 23757, +23885, 24013, 24140, 24267, 24394, 24520, 24645, 24770, +24894, 25018, 25142, 25264, 25386, 25508, 25629, 25749, +25869, 25988, 26106, 26224, 26341, 26457, 26573, 26688, +26802, 26915, 27028, 27139, 27251, 27361, 27470, 27579, +27687, 27794, 27900, 28005, 28109, 28213, 28315, 28417, +28518, 28617, 28716, 28814, 28911, 29007, 29102, 29196, +29288, 29380, 29471, 29561, 29650, 29737, 29824, 29909, +29994, 30077, 30159, 30240, 30320, 30399, 30477, 30553, +30628, 30702, 30775, 30847, 30918, 30987, 31055, 31122, +31188, 31252, 31315, 31377, 31438, 31497, 31555, 31612, +31667, 31721, 31774, 31826, 31876, 31925, 31972, 32019, +32064, 32107, 32149, 32190, 32230, 32268, 32304, 32340, +32374, 32406, 32438, 32467, 32496, 32523, 32548, 32573, +32595, 32617, 32637, 32655, 32672, 32688, 32702, 32715, +32727, 32737, 32745, 32753, 32758, 32763, 32765, 32767, +32767, 32765, 32763, 32758, 32753, 32745, 32737, 32727, +32715, 32702, 32688, 32672, 32655, 32637, 32617, 32595, +32573, 32548, 32523, 32496, 32467, 32438, 32406, 32374, +32340, 32304, 32268, 32230, 32190, 32149, 32107, 32064, +32019, 31972, 31925, 31876, 31826, 31774, 31721, 31667, +31612, 31555, 31497, 31438, 31377, 31315, 31252, 31188, +31122, 31055, 30987, 30918, 30847, 30775, 30702, 30628, +30553, 30477, 30399, 30320, 30240, 30159, 30077, 29994, +29909, 29824, 29737, 29650, 29561, 29471, 29380, 29288, +29196, 29102, 29007, 28911, 28814, 28716, 28617, 28518, +28417, 28315, 28213, 28109, 28005, 27900, 27794, 27687, +27579, 27470, 27361, 27251, 27139, 27028, 26915, 26802, +26688, 26573, 26457, 26341, 26224, 26106, 25988, 25869, +25749, 25629, 25508, 25386, 25264, 25142, 25018, 24894, +24770, 24645, 24520, 24394, 24267, 24140, 24013, 23885, +23757, 23628, 23499, 23369, 23239, 23109, 22978, 22847, +22716, 22584, 22452, 22320, 22187, 22054, 21921, 21788, +21654, 21520, 21386, 21252, 21118, 20983, 20848, 20713, +20578, 20443, 20308, 20172, 20037, 19901, 19765, 19630, +19494, 19358, 19223, 19087, 18951, 18815, 18680, 18544, +18408, 18273, 18137, 18002, 17867, 17731, 17596, 17461, +17327, 17192, 17058, 16923, 16789, 16655, 16522, 16388, +16255, 16122, 15989, 15857, 15725, 15593, 15461, 15330, +15199, 15068, 14938, 14808, 14678, 14549, 14420, 14291, +14163, 14035, 13908, 13781, 13654, 13528, 13402, 13277, +13152, 13027, 12903, 12780, 12657, 12534, 12412, 12291, +12170, 12049, 11929, 11810, 11691, 11572, 11454, 11337, +11220, 11104, 10988, 10873, 10759, 10645, 10531, 10419, +10306, 10195, 10084, 9974, 9864, 9755, 9646, 9539, + 9431, 9325, 9219, 9114, 9009, 8905, 8802, 8699, + 8597, 8496, 8395, 8295, 8196, 8097, 7999, 7902, + 7805, 7710, 7614, 7520, 7426, 7333, 7240, 7149, + 7058, 6967, 6878, 6789, 6700, 6613, 6526, 6440, + 6355, 6270, 6186, 6103, 6020, 5938, 5857, 5776, + 5697, 5618, 5539, 5462, 5385, 5308, 5233, 5158, + 5084, 5010, 4938, 4866, 4794, 4724, 4654, 4585, + 4516, 4448, 4381, 4314, 4249, 4183, 4119, 4055, + 3992, 3930, 3868, 3807, 3746, 3687, 3628, 3569, + 3511, 3454, 3398, 3342, 3287, 3232, 3178, 3125, + 3072, 3020, 2969, 2918, 2868, 2819, 2770, 2721, + 2674, 2627, 2580, 2534, 2489, 2444, 2400, 2357, + 2314, 2271, 2229, 2188, 2147, 2107, 2068, 2029, + 1990, 1952, 1915, 1878, 1841, 1805, 1770, 1735, + 1701, 1667, 1634, 1601, 1569, 1537, 1506, 1475, + 1444, 1414, 1385, 1356, 1327, 1299, 1272, 1245, + 1218, 1192, 1166, 1140, 1115, 1091, 1066, 1043, + 1019, 996, 974, 952, 930, 908, 887, 867, + 846, 827, 807, 788, 769, 750, 732, 714, + 697, 680, 663, 646, 630, 614, 599, 584, + 569, 554, 540, 526, 512, 498, 485, 472, + 459, 447, 435, 423, 411, 400, 389, 378, + 367, 357, 347, 337, 327, 317, 308, 299, + 290, 281, 273, 265, 256, 249, 241, 233, + 226, 219, 212, 205, 198, 192, 186, 179, + 173, 168, 162, 156, 151, 146, 141, 136, + 131, 126, 122, 117, 113, 109, 104, 100, + 97, 93, 89, 86, 82, 79, 76, 73, + 70, 67, 64, 61, 58, 56, 53, 51, + 48, 46, 44, 42, 40, 38, 36, 34, + 32, 31, 29, 27, 26, 24, 23, 22, + 20, 19, 18, 17, 16, 15, 14, 13, + 12, 11, 10, 9, 8, 8, 7, 7, + 6, 5, 5, 5, 4, 4, 3, 3, + 3, 3, 2, 2, 2, 2, 2, 2, +} }; + +void WidebandSpectrum::execute(buffer_c8_t buffer) { + sample_count += buffer.count; + if( sample_count > 400000 ) { + sample_count -= 400000; + + if( channel_spectrum_request_update == false ) { + channel_spectrum_request_update = true; + + for(size_t i=0; i + +class WidebandSpectrum : public BasebandProcessor { +public: + void execute(buffer_c8_t buffer) override; + +private: + size_t sample_count = 0; +}; + +#endif/*__PROC_WIDEBAND_SPECTRUM_H__*/ From 5d9079f87f1d83452d452a6f198855ce03c6113e Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 14:07:15 -0700 Subject: [PATCH 058/224] Stop streaming when changing baseband configuration. Without, the baseband would get confused. --- firmware/application/radio.cpp | 4 ++++ firmware/application/radio.hpp | 1 + firmware/application/receiver_model.cpp | 4 ++++ 3 files changed, 9 insertions(+) diff --git a/firmware/application/radio.cpp b/firmware/application/radio.cpp index bd0a80849..dcb6bfa7e 100644 --- a/firmware/application/radio.cpp +++ b/firmware/application/radio.cpp @@ -161,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 009ae8294..69ac44bf7 100644 --- a/firmware/application/receiver_model.cpp +++ b/firmware/application/receiver_model.cpp @@ -171,6 +171,8 @@ void ReceiverModel::set_baseband_configuration(const BasebandConfiguration confi } 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()); @@ -181,6 +183,8 @@ void ReceiverModel::update_baseband_configuration() { if( baseband_configuration.mode == 3 ) { update_fsk_configuration(); } + + radio::streaming_enable(); } void ReceiverModel::update_headphone_volume() { From d8b3b4cb6b4c0b6d2ecfe8d2dcbb4c90a9b98f42 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 14:27:29 -0700 Subject: [PATCH 059/224] Check queue empty only once when reading messages. There was a second is_empty() call hidden in the pop() call, so the while(condition) was redundant. --- firmware/application/main.cpp | 4 +++- firmware/baseband/main.cpp | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index 85b0cecfe..a0c9f3c56 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -123,12 +123,14 @@ private: } void handle_application_queue() { - while( !shared_memory.application_queue.is_empty() ) { + while(true) { std::array message_buffer; const Message* const message = reinterpret_cast(message_buffer.data()); const auto message_size = shared_memory.application_queue.pop(message_buffer.data(), message_buffer.size()); if( message_size ) { context.message_map.send(message); + } else { + break; } } } diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 297d63c0a..37455507c 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -242,12 +242,14 @@ private: } void handle_baseband_queue() { - while( !shared_memory.baseband_queue.is_empty() ) { + while(true) { std::array message_buffer; const Message* const message = reinterpret_cast(message_buffer.data()); const auto message_size = shared_memory.baseband_queue.pop(message_buffer.data(), message_buffer.size()); if( message_size ) { message_map.send(message); + } else { + break; } } } From b13081696dcf0f435af53e51f19ed34bdfd998bc Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 14:35:17 -0700 Subject: [PATCH 060/224] Simplify MessageQueue pop() usage. --- firmware/application/main.cpp | 12 +++--------- firmware/baseband/main.cpp | 12 +++--------- firmware/common/message_queue.hpp | 5 +++-- 3 files changed, 9 insertions(+), 20 deletions(-) diff --git a/firmware/application/main.cpp b/firmware/application/main.cpp index a0c9f3c56..64eb515f8 100755 --- a/firmware/application/main.cpp +++ b/firmware/application/main.cpp @@ -123,15 +123,9 @@ private: } void handle_application_queue() { - while(true) { - std::array message_buffer; - const Message* const message = reinterpret_cast(message_buffer.data()); - const auto message_size = shared_memory.application_queue.pop(message_buffer.data(), message_buffer.size()); - if( message_size ) { - context.message_map.send(message); - } else { - break; - } + std::array message_buffer; + while(const Message* const message = shared_memory.application_queue.pop(message_buffer)) { + context.message_map.send(message); } } diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 37455507c..82a27049a 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -242,15 +242,9 @@ private: } void handle_baseband_queue() { - while(true) { - std::array message_buffer; - const Message* const message = reinterpret_cast(message_buffer.data()); - const auto message_size = shared_memory.baseband_queue.pop(message_buffer.data(), message_buffer.size()); - if( message_size ) { - message_map.send(message); - } else { - break; - } + std::array message_buffer; + while(const Message* const message = shared_memory.baseband_queue.pop(message_buffer)) { + message_map.send(message); } } diff --git a/firmware/common/message_queue.hpp b/firmware/common/message_queue.hpp index 0d023f92a..dd6ff72b0 100644 --- a/firmware/common/message_queue.hpp +++ b/firmware/common/message_queue.hpp @@ -47,8 +47,9 @@ public: return push(&message, sizeof(message)); } - size_t pop(void* const buf, const size_t len) { - return fifo.out_r(buf, len); + const Message* pop(std::array& buf) { + const Message* const p = reinterpret_cast(buf.data()); + return fifo.out_r(buf.data(), buf.size()) ? p : nullptr; } size_t len() const { From 3fea68d777c553b9523cbae41d89160ce428c676 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 27 Aug 2015 14:57:05 -0700 Subject: [PATCH 061/224] Adjust wideband specan gain to match other modes. --- firmware/baseband/proc_wideband_spectrum.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/firmware/baseband/proc_wideband_spectrum.cpp b/firmware/baseband/proc_wideband_spectrum.cpp index 394809813..aa8d6f5f2 100644 --- a/firmware/baseband/proc_wideband_spectrum.cpp +++ b/firmware/baseband/proc_wideband_spectrum.cpp @@ -171,6 +171,7 @@ void WidebandSpectrum::execute(buffer_c8_t buffer) { if( channel_spectrum_request_update == false ) { channel_spectrum_request_update = true; + constexpr int32_t k = 128 * 4 * 8; for(size_t i=0; i Date: Fri, 21 Aug 2015 10:33:38 -0700 Subject: [PATCH 062/224] Update schematic issue/copyright date. KiCad also made some automatic tweaks for latest build (bzr 6109). --- hardware/portapack_h1/audio.sch | 10 +++++----- hardware/portapack_h1/hackrf_if.sch | 10 +++++----- hardware/portapack_h1/lcd_sw_sd.sch | 10 +++++----- hardware/portapack_h1/portapack_h1.sch | 10 +++++----- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/hardware/portapack_h1/audio.sch b/hardware/portapack_h1/audio.sch index eb7ac18e2..7c266a16c 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 "" diff --git a/hardware/portapack_h1/hackrf_if.sch b/hardware/portapack_h1/hackrf_if.sch index 77a91a73c..db30f7fad 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,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 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 "" diff --git a/hardware/portapack_h1/lcd_sw_sd.sch b/hardware/portapack_h1/lcd_sw_sd.sch index 204c250c6..af5fbf51c 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,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 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 "" diff --git a/hardware/portapack_h1/portapack_h1.sch b/hardware/portapack_h1/portapack_h1.sch index b4b8764bf..218fb3d93 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 "" From 84ffaaef33eb18aeea82856f73264746034fa38b Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 11:07:49 -0700 Subject: [PATCH 063/224] Back-annotate CVPCB data into schematic. Remove CVPCB .cmp file, since it's a deprecated by the KiCad project. --- hardware/portapack_h1/audio.sch | 106 ++-- hardware/portapack_h1/hackrf_if.sch | 58 +- hardware/portapack_h1/lcd_sw_sd.sch | 18 +- hardware/portapack_h1/portapack_h1.cmp | 717 ------------------------- hardware/portapack_h1/portapack_h1.sch | 22 +- 5 files changed, 102 insertions(+), 819 deletions(-) delete mode 100644 hardware/portapack_h1/portapack_h1.cmp diff --git a/hardware/portapack_h1/audio.sch b/hardware/portapack_h1/audio.sch index 7c266a16c..f07f87e11 100644 --- a/hardware/portapack_h1/audio.sch +++ b/hardware/portapack_h1/audio.sch @@ -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" @@ -280,7 +280,7 @@ 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 2 "cui:CUI_CMA-4544PF-W" H 9800 5100 60 0001 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" @@ -304,7 +304,7 @@ 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 +317,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 +330,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 +343,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 +356,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" @@ -404,7 +404,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 +417,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" @@ -452,7 +452,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 +465,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 +478,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 +491,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" @@ -585,7 +585,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 +598,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" @@ -633,7 +633,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 +646,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" @@ -681,7 +681,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" @@ -705,7 +705,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" @@ -770,7 +770,7 @@ 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" @@ -783,7 +783,7 @@ 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 2 "cui:CUI_SJ-3524-SMT" H 3450 1700 60 0001 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" @@ -796,7 +796,7 @@ 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 2 "cui:CUI_SJ-3524-SMT" H 9850 1700 60 0001 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" @@ -809,7 +809,7 @@ 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 2 "ipc_indc:IPC_INDC1608X95N" V 9750 2150 60 0001 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" @@ -822,7 +822,7 @@ 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 2 "ipc_indc:IPC_INDC1608X95N" V 4150 2150 60 0001 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" @@ -857,7 +857,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" V 5250 1800 60 0001 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" @@ -870,7 +870,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" V 5250 1400 60 0001 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" @@ -883,7 +883,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" V 5600 1050 60 0001 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" @@ -896,7 +896,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" V 5600 2150 60 0001 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" @@ -931,7 +931,7 @@ 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 2 "ipc_capc:IPC_CAPC1608X95N" H 6200 2100 60 0001 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" @@ -944,7 +944,7 @@ 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 2 "ipc_capc:IPC_CAPC1608X95N" H 6200 1100 60 0001 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" @@ -979,7 +979,7 @@ 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 2 "ipc_capae:IPC_CAPAE430X540N" H 6300 1500 60 0001 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" @@ -992,7 +992,7 @@ 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 2 "ipc_capae:IPC_CAPAE430X540N" H 6300 1900 60 0001 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" @@ -1009,7 +1009,7 @@ 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 2 "ipc_indc:IPC_INDC1608X95N" V 4600 1400 60 0001 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" @@ -1022,7 +1022,7 @@ 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 2 "ipc_indc:IPC_INDC1608X95N" V 4600 1800 60 0001 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" @@ -1035,7 +1035,7 @@ 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 2 "ipc_indc:IPC_INDC1608X95N" V 9300 1400 60 0001 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" @@ -1048,7 +1048,7 @@ 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 2 "ipc_indc:IPC_INDC1608X95N" V 9300 1800 60 0001 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" @@ -1061,7 +1061,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" V 8750 1400 60 0001 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" @@ -1074,7 +1074,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" V 8750 1800 60 0001 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" @@ -1087,7 +1087,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" V 8400 2150 60 0001 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" @@ -1100,7 +1100,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" V 8400 1050 60 0001 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" @@ -1113,7 +1113,7 @@ 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 2 "ipc_capae:IPC_CAPAE430X540N" H 8100 1700 60 0001 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" @@ -1126,7 +1126,7 @@ 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 2 "ipc_capae:IPC_CAPAE430X540N" H 8100 1300 60 0001 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" diff --git a/hardware/portapack_h1/hackrf_if.sch b/hardware/portapack_h1/hackrf_if.sch index db30f7fad..af117fc07 100644 --- a/hardware/portapack_h1/hackrf_if.sch +++ b/hardware/portapack_h1/hackrf_if.sch @@ -216,7 +216,7 @@ 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 2 "header:HEADER_11X2_REV_SM_254_AP" H 2600 1300 60 0001 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" @@ -229,7 +229,7 @@ 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 2 "header:HEADER_13X2_REV_SM_254_AP" H 2600 3000 60 0001 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" @@ -242,7 +242,7 @@ 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 2 "header:HEADER_11X2_REV_SM_254_AP" H 2600 4700 60 0001 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" @@ -358,7 +358,7 @@ 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 2 "ipc_qfp:IPC_QFP40P900X900X120-65N" H 8250 3150 60 0001 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" @@ -651,7 +651,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" @@ -675,7 +675,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" @@ -701,7 +701,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 +714,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 +727,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" @@ -784,7 +784,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 +797,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" @@ -832,7 +832,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 +845,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 +858,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" @@ -904,7 +904,7 @@ 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 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 @@ -948,7 +948,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 +961,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" @@ -996,7 +996,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 +1009,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" @@ -1127,7 +1127,7 @@ 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 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" @@ -1253,7 +1253,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" H 1350 5300 60 0001 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" @@ -1395,7 +1395,7 @@ 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 2 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 5200 950 60 0001 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" @@ -1408,7 +1408,7 @@ 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 2 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 5300 4950 60 0001 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" @@ -1421,7 +1421,7 @@ 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 2 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 5300 5850 60 0001 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" @@ -1442,7 +1442,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" H 5250 1700 60 0001 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" @@ -1455,7 +1455,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" H 5250 1900 60 0001 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" @@ -1468,7 +1468,7 @@ 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 2 "ipc_resc:IPC_RESC1608X55N" H 5250 2100 60 0001 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" @@ -1501,7 +1501,7 @@ 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" @@ -1530,7 +1530,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" diff --git a/hardware/portapack_h1/lcd_sw_sd.sch b/hardware/portapack_h1/lcd_sw_sd.sch index af5fbf51c..2ec1d0720 100644 --- a/hardware/portapack_h1/lcd_sw_sd.sch +++ b/hardware/portapack_h1/lcd_sw_sd.sch @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" @@ -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" 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.sch b/hardware/portapack_h1/portapack_h1.sch index 218fb3d93..5fbe24573 100644 --- a/hardware/portapack_h1/portapack_h1.sch +++ b/hardware/portapack_h1/portapack_h1.sch @@ -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 From cd4840f1f9fce17cc6d175e809ac2c28bc76fc87 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 11:09:30 -0700 Subject: [PATCH 064/224] Remove line in/out circuitry. --- hardware/portapack_h1/audio.sch | 492 +------------------------------- 1 file changed, 4 insertions(+), 488 deletions(-) diff --git a/hardware/portapack_h1/audio.sch b/hardware/portapack_h1/audio.sch index f07f87e11..962ba3fd9 100644 --- a/hardware/portapack_h1/audio.sch +++ b/hardware/portapack_h1/audio.sch @@ -543,16 +543,8 @@ 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 @@ -777,388 +769,6 @@ 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 "cui:CUI_SJ-3524-SMT" H 3450 1700 60 0001 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 "cui:CUI_SJ-3524-SMT" H 9850 1700 60 0001 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 "ipc_indc:IPC_INDC1608X95N" V 9750 2150 60 0001 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 "ipc_indc:IPC_INDC1608X95N" V 4150 2150 60 0001 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 "ipc_resc:IPC_RESC1608X55N" V 5250 1800 60 0001 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 "ipc_resc:IPC_RESC1608X55N" V 5250 1400 60 0001 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 "ipc_resc:IPC_RESC1608X55N" V 5600 1050 60 0001 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 "ipc_resc:IPC_RESC1608X55N" V 5600 2150 60 0001 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 "ipc_capc:IPC_CAPC1608X95N" H 6200 2100 60 0001 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 "ipc_capc:IPC_CAPC1608X95N" H 6200 1100 60 0001 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 "ipc_capae:IPC_CAPAE430X540N" H 6300 1500 60 0001 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 "ipc_capae:IPC_CAPAE430X540N" H 6300 1900 60 0001 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 "ipc_indc:IPC_INDC1608X95N" V 4600 1400 60 0001 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 "ipc_indc:IPC_INDC1608X95N" V 4600 1800 60 0001 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 "ipc_indc:IPC_INDC1608X95N" V 9300 1400 60 0001 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 "ipc_indc:IPC_INDC1608X95N" V 9300 1800 60 0001 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 "ipc_resc:IPC_RESC1608X55N" V 8750 1400 60 0001 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 "ipc_resc:IPC_RESC1608X55N" V 8750 1800 60 0001 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 "ipc_resc:IPC_RESC1608X55N" V 8400 2150 60 0001 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 "ipc_resc:IPC_RESC1608X55N" V 8400 1050 60 0001 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 "ipc_capae:IPC_CAPAE430X540N" H 8100 1700 60 0001 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 "ipc_capae:IPC_CAPAE430X540N" H 8100 1300 60 0001 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 @@ -1241,16 +851,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 +936,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 @@ -1501,4 +1013,8 @@ 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 From 8dfd68a6b32edfbf187319d6034a432860763ee6 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 11:11:20 -0700 Subject: [PATCH 065/224] Removed electret microphone. --- hardware/portapack_h1/audio.sch | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/hardware/portapack_h1/audio.sch b/hardware/portapack_h1/audio.sch index 962ba3fd9..46b56511f 100644 --- a/hardware/portapack_h1/audio.sch +++ b/hardware/portapack_h1/audio.sch @@ -275,30 +275,6 @@ 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 "cui:CUI_CMA-4544PF-W" H 9800 5100 60 0001 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 @@ -775,7 +751,6 @@ 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 @@ -788,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 From 1ca4f45d9e62d368069f6ce6d6232996625a487a Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 11:18:04 -0700 Subject: [PATCH 066/224] Change VBAT capacitor to DNI. HackRF One has 100nF capacitor on VBAT. Having 10uF capacitor on PortaPack VBAT may slowly drain the coin cell when in storage, and add a bit of leakage current when installed. --- hardware/portapack_h1/hackrf_if.sch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/portapack_h1/hackrf_if.sch b/hardware/portapack_h1/hackrf_if.sch index af117fc07..af1cff346 100644 --- a/hardware/portapack_h1/hackrf_if.sch +++ b/hardware/portapack_h1/hackrf_if.sch @@ -1126,7 +1126,7 @@ 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 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" From b6e25692dc1c256eec672ffeeb1f2f526919c5a2 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 11:20:34 -0700 Subject: [PATCH 067/224] Label 1V8 regulator bypass/adjust capacitor as DNI. Was already DNI in assembly BOM. TCR2EF shows that pin as NC. --- hardware/portapack_h1/hackrf_if.sch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/portapack_h1/hackrf_if.sch b/hardware/portapack_h1/hackrf_if.sch index af1cff346..480cfda9e 100644 --- a/hardware/portapack_h1/hackrf_if.sch +++ b/hardware/portapack_h1/hackrf_if.sch @@ -903,7 +903,7 @@ 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 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 From 19764ce69391d81770f5124aad298c4e9fc77123 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 12:26:47 -0700 Subject: [PATCH 068/224] Swap function of P2_8, P2_4 in schematic, firmware, CPLD. gpio_unused: P2_4 -> P2_8 gpio_lcd_rd: P2_8 -> P2_4 P2_8 is a very long line, shared with DFU button. Revise schematic to match CPLD signal names. --- firmware/common/portapack_hal.hpp | 4 +- .../portapack_h1/cpld/portapack_h1_cpld.qsf | 22 ++-- hardware/portapack_h1/cpld/top.vhd | 9 +- hardware/portapack_h1/hackrf_if.sch | 112 +++++++++--------- 4 files changed, 73 insertions(+), 74 deletions(-) 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/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..eaeee18ec 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; diff --git a/hardware/portapack_h1/hackrf_if.sch b/hardware/portapack_h1/hackrf_if.sch index 480cfda9e..a222d5028 100644 --- a/hardware/portapack_h1/hackrf_if.sch +++ b/hardware/portapack_h1/hackrf_if.sch @@ -34,7 +34,7 @@ Comment3 "" Comment4 "" $EndDescr Text Label 1300 2600 0 60 ~ 0 -P2_4 +MCU_LCD_RD $Comp L GND #PWR059 U 1 1 53A8CD34 @@ -164,21 +164,21 @@ NoConn ~ 3400 2700 NoConn ~ 1800 2700 NoConn ~ 1800 2800 Text Label 3500 1000 0 60 ~ 0 -GPIO3_9 +MCU_D1 Text Label 3500 1100 0 60 ~ 0 -GPIO3_11 +MCU_D3 Text Label 3500 1200 0 60 ~ 0 -GPIO3_13 +MCU_D5 Text Label 3500 1300 0 60 ~ 0 -GPIO3_15 +MCU_D7 Text Label 1100 1300 0 60 ~ 0 -GPIO3_14 +MCU_D6 Text Label 1100 1200 0 60 ~ 0 -GPIO3_12 +MCU_D4 Text Label 1100 1100 0 60 ~ 0 -GPIO3_10 +MCU_D2 Text Label 1100 1000 0 60 ~ 0 -GPIO3_8 +MCU_D0 NoConn ~ 1800 3600 NoConn ~ 3400 5000 NoConn ~ 3400 5100 @@ -191,13 +191,13 @@ NoConn ~ 3400 4900 Text Label 1100 5100 0 60 ~ 0 CPLD_TDI Text Label 3700 3300 0 60 ~ 0 -P2_0 +MCU_IO_STBX Text Label 1500 3300 0 60 ~ 0 -P2_1 +MCU_ADDR Text Label 1500 3400 0 60 ~ 0 -P2_9 +MCU_LCD_WR Text Label 3700 3400 0 60 ~ 0 -P2_13 +MCU_DIR Text Label 3500 4500 0 60 ~ 0 P1_8 Text Label 1500 3500 0 60 ~ 0 @@ -398,25 +398,25 @@ LCD_DB14 Text Label 9950 2600 0 60 ~ 0 LCD_DB15 Text Label 4600 5900 0 60 ~ 0 -GPIO3_8 +MCU_D0 Text Label 4600 6000 0 60 ~ 0 -GPIO3_9 +MCU_D1 Text Label 4600 5800 0 60 ~ 0 -GPIO3_10 +MCU_D2 Text Label 4600 5700 0 60 ~ 0 -GPIO3_11 +MCU_D3 Text Label 4600 5000 0 60 ~ 0 -GPIO3_12 +MCU_D4 Text Label 4600 5100 0 60 ~ 0 -GPIO3_13 +MCU_D5 Text Label 4600 4900 0 60 ~ 0 -GPIO3_14 +MCU_D6 Text Label 4600 4800 0 60 ~ 0 -GPIO3_15 +MCU_D7 Text Label 4600 1000 0 60 ~ 0 -P2_9 +MCU_LCD_WR Text Label 4600 1100 0 60 ~ 0 -P2_13 +MCU_DIR Text Label 6100 3700 0 60 ~ 0 P1_8 $Comp @@ -477,13 +477,13 @@ $EndComp Text Label 8700 5350 1 60 ~ 0 RESET# Text Label 8800 5350 1 60 ~ 0 -P2_4_R +MCU_LCD_RD_R Text Label 6100 3800 0 60 ~ 0 CPLD_TDI Text Label 10050 4000 0 60 ~ 0 -P2_1_R +MCU_ADDR_R Text Label 9000 5350 1 60 ~ 0 -P2_0_R +MCU_IO_STBX_R Text Label 7600 1450 1 60 ~ 0 LCD_TE $Comp @@ -1154,9 +1154,9 @@ Wire Wire Line Wire Wire Line 8900 5450 8900 4750 Text Label 3700 2600 0 60 ~ 0 -P2_3 +MCU_LCD_TE Text Label 8900 5350 1 60 ~ 0 -P2_3_R +MCU_LCD_TE_R Wire Wire Line 6000 800 5400 800 Wire Wire Line @@ -1164,13 +1164,13 @@ Wire Wire Line Wire Wire Line 6000 1100 5400 1100 Text Label 5500 1100 0 60 ~ 0 -P2_13_R +MCU_DIR_R Text Label 5500 1000 0 60 ~ 0 -P2_9_R +MCU_LCD_WR_R Text Label 9950 3000 0 60 ~ 0 -P2_13_R +MCU_DIR_R Text Label 9950 3200 0 60 ~ 0 -P2_9_R +MCU_LCD_WR_R Wire Wire Line 4500 1700 5000 1700 Wire Wire Line @@ -1184,37 +1184,37 @@ Wire Wire Line Wire Wire Line 6100 2100 5500 2100 Text Label 4600 1700 0 60 ~ 0 -P2_4 +MCU_LCD_RD Text Label 4600 1900 0 60 ~ 0 -P2_3 +MCU_LCD_TE Text Label 4600 800 0 60 ~ 0 -P2_1 +MCU_ADDR Text Label 4600 2100 0 60 ~ 0 -P2_0 +MCU_IO_STBX Text Label 5600 1700 0 60 ~ 0 -P2_4_R +MCU_LCD_RD_R Text Label 5600 1900 0 60 ~ 0 -P2_3_R +MCU_LCD_TE_R Text Label 5500 800 0 60 ~ 0 -P2_1_R +MCU_ADDR_R Text Label 5600 2100 0 60 ~ 0 -P2_0_R +MCU_IO_STBX_R Text Label 7600 5350 1 60 ~ 0 -GPIO3_15_R +MCU_D7_R Text Label 7700 5350 1 60 ~ 0 -GPIO3_14_R +MCU_D6_R Text Label 7800 5350 1 60 ~ 0 -GPIO3_12_R +MCU_D4_R Text Label 7900 5350 1 60 ~ 0 -GPIO3_13_R +MCU_D5_R Text Label 8000 5350 1 60 ~ 0 -GPIO3_11_R +MCU_D3_R Text Label 8200 5350 1 60 ~ 0 -GPIO3_10_R +MCU_D2_R Text Label 8400 5350 1 60 ~ 0 -GPIO3_8_R +MCU_D0_R Text Label 8500 5350 1 60 ~ 0 -GPIO3_9_R +MCU_D1_R Wire Wire Line 6300 4800 5500 4800 Wire Wire Line @@ -1232,21 +1232,21 @@ Wire Wire Line Wire Wire Line 6300 6000 5500 6000 Text Label 5600 4800 0 60 ~ 0 -GPIO3_15_R +MCU_D7_R Text Label 5600 4900 0 60 ~ 0 -GPIO3_14_R +MCU_D6_R Text Label 5600 5000 0 60 ~ 0 -GPIO3_12_R +MCU_D4_R Text Label 5600 5100 0 60 ~ 0 -GPIO3_13_R +MCU_D5_R Text Label 5600 5700 0 60 ~ 0 -GPIO3_11_R +MCU_D3_R Text Label 5600 5800 0 60 ~ 0 -GPIO3_10_R +MCU_D2_R Text Label 5600 5900 0 60 ~ 0 -GPIO3_8_R +MCU_D0_R Text Label 5600 6000 0 60 ~ 0 -GPIO3_9_R +MCU_D1_R $Comp L R R22 U 1 1 53A915E9 From 75d9aa9c7315832e5ae3d41b74f7a4dc8b4f9450 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 12:27:36 -0700 Subject: [PATCH 069/224] Remove extra CPLD code internal signals. --- firmware/common/portapack_cpld_data.cpp | 242 ++++++++++++------------ hardware/portapack_h1/cpld/top.vhd | 2 - 2 files changed, 121 insertions(+), 123 deletions(-) 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/hardware/portapack_h1/cpld/top.vhd b/hardware/portapack_h1/cpld/top.vhd index eaeee18ec..943707eaf 100644 --- a/hardware/portapack_h1/cpld/top.vhd +++ b/hardware/portapack_h1/cpld/top.vhd @@ -111,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 From 70d7ecc51b6d918d279bf53c2cb03da769dd9591 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 21 Aug 2015 16:13:27 -0700 Subject: [PATCH 070/224] Clean up PCB net labels to match code, CPLD. --- hardware/portapack_h1/audio.sch | 84 +- hardware/portapack_h1/hackrf_if.sch | 1230 +++++++++++++-------------- hardware/portapack_h1/lcd_sw_sd.sch | 80 +- 3 files changed, 693 insertions(+), 701 deletions(-) diff --git a/hardware/portapack_h1/audio.sch b/hardware/portapack_h1/audio.sch index 46b56511f..9dc3a5fc1 100644 --- a/hardware/portapack_h1/audio.sch +++ b/hardware/portapack_h1/audio.sch @@ -340,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 @@ -351,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 @@ -362,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 @@ -401,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 @@ -412,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 @@ -475,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 @@ -486,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 @@ -497,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 @@ -524,10 +524,10 @@ MICBIAS 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 @@ -537,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 @@ -574,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 @@ -585,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 @@ -622,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 @@ -633,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 @@ -657,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 @@ -681,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 @@ -694,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 @@ -939,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 @@ -950,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 @@ -961,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 @@ -972,10 +972,10 @@ 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 diff --git a/hardware/portapack_h1/hackrf_if.sch b/hardware/portapack_h1/hackrf_if.sch index a222d5028..bca7df99c 100644 --- a/hardware/portapack_h1/hackrf_if.sch +++ b/hardware/portapack_h1/hackrf_if.sch @@ -36,609 +36,605 @@ $EndDescr Text Label 1300 2600 0 60 ~ 0 MCU_LCD_RD $Comp -L GND #PWR059 +L GND #PWR050 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 +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 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 +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 3500 1100 0 60 ~ 0 +Text Label 3700 1100 0 60 ~ 0 MCU_D3 -Text Label 3500 1200 0 60 ~ 0 +Text Label 3700 1200 0 60 ~ 0 MCU_D5 -Text Label 3500 1300 0 60 ~ 0 +Text Label 3700 1300 0 60 ~ 0 MCU_D7 -Text Label 1100 1300 0 60 ~ 0 +Text Label 1300 1300 0 60 ~ 0 MCU_D6 -Text Label 1100 1200 0 60 ~ 0 +Text Label 1300 1200 0 60 ~ 0 MCU_D4 -Text Label 1100 1100 0 60 ~ 0 +Text Label 1300 1100 0 60 ~ 0 MCU_D2 -Text Label 1100 1000 0 60 ~ 0 +Text Label 1300 1000 0 60 ~ 0 MCU_D0 -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 +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 1500 3300 0 60 ~ 0 +Text Label 1300 3300 0 60 ~ 0 MCU_ADDR -Text Label 1500 3400 0 60 ~ 0 +Text Label 1300 3400 0 60 ~ 0 MCU_LCD_WR -Text Label 3700 3400 0 60 ~ 0 +Text Label 3900 3400 0 60 ~ 0 MCU_DIR -Text Label 3500 4500 0 60 ~ 0 -P1_8 -Text Label 1500 3500 0 60 ~ 0 +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 "header:HEADER_11X2_REV_SM_254_AP" H 2600 1300 60 0001 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 "header:HEADER_13X2_REV_SM_254_AP" H 2600 3000 60 0001 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 "header:HEADER_11X2_REV_SM_254_AP" H 2600 4700 60 0001 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 "ipc_qfp:IPC_QFP40P900X900X120-65N" H 8250 3150 60 0001 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 +Text Label 5100 6200 0 60 ~ 0 MCU_D0 -Text Label 4600 6000 0 60 ~ 0 +Text Label 5100 6300 0 60 ~ 0 MCU_D1 -Text Label 4600 5800 0 60 ~ 0 +Text Label 5100 6100 0 60 ~ 0 MCU_D2 -Text Label 4600 5700 0 60 ~ 0 +Text Label 5100 6000 0 60 ~ 0 MCU_D3 -Text Label 4600 5000 0 60 ~ 0 +Text Label 3300 6200 0 60 ~ 0 MCU_D4 -Text Label 4600 5100 0 60 ~ 0 +Text Label 3300 6300 0 60 ~ 0 MCU_D5 -Text Label 4600 4900 0 60 ~ 0 +Text Label 3300 6100 0 60 ~ 0 MCU_D6 -Text Label 4600 4800 0 60 ~ 0 +Text Label 3300 6000 0 60 ~ 0 MCU_D7 -Text Label 4600 1000 0 60 ~ 0 +Text Label 6900 6200 0 60 ~ 0 MCU_LCD_WR -Text Label 4600 1100 0 60 ~ 0 +Text Label 6900 6300 0 60 ~ 0 MCU_DIR -Text Label 6100 3700 0 60 ~ 0 -P1_8 +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 +Text Label 8300 5400 1 60 ~ 0 MCU_LCD_RD_R -Text Label 6100 3800 0 60 ~ 0 -CPLD_TDI -Text Label 10050 4000 0 60 ~ 0 +Text Label 5500 3700 0 60 ~ 0 +H1_CPLD_TDI +Text Label 9700 3800 0 60 ~ 0 MCU_ADDR_R -Text Label 9000 5350 1 60 ~ 0 +Text Label 8500 5400 1 60 ~ 0 MCU_IO_STBX_R -Text Label 7600 1450 1 60 ~ 0 -LCD_TE $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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -910,10 +906,10 @@ F 3 "" H 4900 7400 60 0000 C CNN -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 @@ -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 @@ -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 @@ -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 + 8400 5500 8400 4650 +Text Label 3900 2600 0 60 ~ 0 MCU_LCD_TE -Text Label 8900 5350 1 60 ~ 0 +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 + 8800 6300 7900 6300 +Text Label 8000 6300 0 60 ~ 0 MCU_DIR_R -Text Label 5500 1000 0 60 ~ 0 +Text Label 8000 6200 0 60 ~ 0 MCU_LCD_WR_R -Text Label 9950 3000 0 60 ~ 0 +Text Label 9650 2900 0 60 ~ 0 MCU_DIR_R -Text Label 9950 3200 0 60 ~ 0 +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 + 11100 6400 10200 6400 +Text Label 9100 6000 0 60 ~ 0 MCU_LCD_RD -Text Label 4600 1900 0 60 ~ 0 +Text Label 9100 6200 0 60 ~ 0 MCU_LCD_TE -Text Label 4600 800 0 60 ~ 0 +Text Label 6900 6000 0 60 ~ 0 MCU_ADDR -Text Label 4600 2100 0 60 ~ 0 +Text Label 9100 6400 0 60 ~ 0 MCU_IO_STBX -Text Label 5600 1700 0 60 ~ 0 +Text Label 10300 6000 0 60 ~ 0 MCU_LCD_RD_R -Text Label 5600 1900 0 60 ~ 0 +Text Label 10300 6200 0 60 ~ 0 MCU_LCD_TE_R -Text Label 5500 800 0 60 ~ 0 +Text Label 8000 6000 0 60 ~ 0 MCU_ADDR_R -Text Label 5600 2100 0 60 ~ 0 +Text Label 10300 6400 0 60 ~ 0 MCU_IO_STBX_R -Text Label 7600 5350 1 60 ~ 0 +Text Label 7100 5400 1 60 ~ 0 MCU_D7_R -Text Label 7700 5350 1 60 ~ 0 +Text Label 7200 5400 1 60 ~ 0 MCU_D6_R -Text Label 7800 5350 1 60 ~ 0 +Text Label 7300 5400 1 60 ~ 0 MCU_D4_R -Text Label 7900 5350 1 60 ~ 0 +Text Label 7400 5400 1 60 ~ 0 MCU_D5_R -Text Label 8000 5350 1 60 ~ 0 +Text Label 7500 5400 1 60 ~ 0 MCU_D3_R -Text Label 8200 5350 1 60 ~ 0 +Text Label 7700 5400 1 60 ~ 0 MCU_D2_R -Text Label 8400 5350 1 60 ~ 0 +Text Label 7900 5400 1 60 ~ 0 MCU_D0_R -Text Label 8500 5350 1 60 ~ 0 +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 + 6600 6300 5900 6300 +Text Label 4200 6000 0 60 ~ 0 MCU_D7_R -Text Label 5600 4900 0 60 ~ 0 +Text Label 4200 6100 0 60 ~ 0 MCU_D6_R -Text Label 5600 5000 0 60 ~ 0 +Text Label 4200 6200 0 60 ~ 0 MCU_D4_R -Text Label 5600 5100 0 60 ~ 0 +Text Label 4200 6300 0 60 ~ 0 MCU_D5_R -Text Label 5600 5700 0 60 ~ 0 +Text Label 6000 6000 0 60 ~ 0 MCU_D3_R -Text Label 5600 5800 0 60 ~ 0 +Text Label 6000 6100 0 60 ~ 0 MCU_D2_R -Text Label 5600 5900 0 60 ~ 0 +Text Label 6000 6200 0 60 ~ 0 MCU_D0_R -Text Label 5600 6000 0 60 ~ 0 +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 "ipc_resc:IPC_RESC1608X55N" H 1350 5300 60 0001 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,207 +1294,197 @@ 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 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 5200 950 60 0001 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 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 5300 4950 60 0001 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 "ipc_resc:IPC_RESCAXS80P160X320X60-8N" H 5300 5850 60 0001 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 "ipc_resc:IPC_RESC1608X55N" H 5250 1700 60 0001 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 "ipc_resc:IPC_RESC1608X55N" H 5250 1900 60 0001 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 "ipc_resc:IPC_RESC1608X55N" H 5250 2100 60 0001 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 @@ -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 @@ -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 2ec1d0720..73a879543 100644 --- a/hardware/portapack_h1/lcd_sw_sd.sch +++ b/hardware/portapack_h1/lcd_sw_sd.sch @@ -34,10 +34,10 @@ 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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 From 29243a5fd11ff09ed1b595b566657fe7c45494c7 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 23 Aug 2015 17:20:39 -0700 Subject: [PATCH 071/224] Schematic and netlist from schematic modifications. --- hardware/portapack_h1/portapack_h1.net | 1727 +++++++++++------------- hardware/portapack_h1/portapack_h1.pdf | Bin 252100 -> 241466 bytes 2 files changed, 792 insertions(+), 935 deletions(-) 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 e1004e0f35f3a3c72cfaa42223c7ab981aac1913..417982eae181082c436f5a410bf526703dba68e2 100644 GIT binary patch literal 241466 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 nFsqW5y5Di zIQdS8Qmzgay+s1fLpYo2_;o7}=DEvOtl6R_o%g-;nE7dJIy1_WjZzN6w>!`oW1AjgU+KW`PU&U*+zHGh{%Bgb^AfBfz;I<_2eU z>c9dXo_hqf(4KCY=ian48#8oivgETDtM;^3`D=OZ>D2kFd6I|~yH$S53uraZviRYL zt=1yd$R61FrV@JPX!@!{izSIkH$Ue_`LXA>RmzJ?eLM3Wm`Cv=SVljF}fRx%XHYb3urufBD@|CrtzrOn!z1Iath+_k*%A2yF)4D&~P;o{mpePhld< zr-RTeEO=wb{XR`tXErS9qGao);kMrzR^|EL0GiIKh6nUaUIR;>}XJ0peZ*gZ$rzym@#?E?i{YpnaUVWy*itMQI;+ypuDVcsyU( zk5b9Mf*?29dUd2dB2MdrQXv%zcM0cf1Fu7!ppdm#vT<>W1$9T<>tS)@;34&gRXFXV zbhog+eF$0w=z0uo^z1W2Mnn7)h4veZ+CBIL1@f>j$BU~0!ZnPC3Fg8pp-sZ}`z{RY zn?6@q#oBw4N2;OgCEUkrol;@Gsx`hUnbI4RQeoaI?f=xiVNGy=R{Fpy(Gwhe6C9>0 z<^OYgy7FODUT8q{p1S-jOiZZd->NI6Sh}a;|Dsy(YJehZ3p(=fflrZRb5-GCI!`K&)P!A6gRQ* z7zCK)U~RtG0hJ$M)KKY(#h!E^(d=Nl-*2ML_=rQQ7yAZ;#t_DPEq%gEPUGe^rXM<( z>{aDCqYgO^9QpQDEvStyN_@n5x`E{0LiAT~*cndC-dIV8}Wx)*@iyQ^M`hX|wb(6LmWmq?T-v5ODZ;4~2(tMbXUp zb>j{SR31p)pT1$1;LysxV5-VK-b%ZKnc1)XV5$~JSY_rdPivcg=^^hwOSbuVvx~eN zT62gd^1lE_e|Vb{|MdB%{+qPE|8*@#;UFOMG!f^)uM&fto0HI(Ene%rnOaL!9zXtP zBxV}EUp+2Qa#*B`U`f;bSOCSy#>vI;aR$#fBUCXk^aoHiKP zi9BtT*ek7$khqg;g4rO}I3I>rxphlIq0|aQ%Udn+3srDR@;-0SK2cu#0#Cn$WLX;H znUJrw9i}EG*1C-t@8mguU{!0B7E1 z5G)n6AV<7OjLJB5FKuTBp=F48EUuyiQeTzdq2`@lyrxQ=iFE7iCRKwV3~tmP5qPD< zQgMMrw01Ajb;j5}rN)}(YKbi6b*k5+&Q;}Sd|kJ}c*XL2Nf2eJHvMaGHSGXub^bt{ zj4HgD#2L34JB>kOuJWtq%7!l1lB>&)-?^I4Mtk}{&0+e#E08~(S79--o+o3UBW|z7 zu6VCKv4EcWi`)gOo^bO59)znNa>9HbT~Gt27Z>3+TWorbR-N}P4HrDz77iEEDSwl=nuWSo7yJ6zR&oY zYinJL5^N8_-)YLH^lYDUnwM27;+>90$k~0t{q{he(%a&S|XmU>@ zk8w>`;Z@(YV$pw&p z>ooH%<4TbQ!Y;4Jf|*O$0K4_m(jD_H`f9F~3@~7z;b6&M#$oac+H8uaH5-FGSM?Kx zEtzbna;tzXR3*PMPAy=Mm~ZBpLpdijUbC2N18dxXxtOe)mUo80uH5i(z|RT9=&iaTP3cmbLDxbPa@m35oRFo?+ z=MNK3v{$R6SWNC67Q4ctT72YVhe53TL$2yi7oo@iCF%R1-@LomwbJnAQ4+Ls!0v=7 zDVr)hW|YJqrzAjbVy-?tUz)v$6VxO9^isoPT#;=UK<) zt4nJ5YWQ+s^8Ze3_x!^@`VXr6_MZ;RfBK4>jT2wOvOBCYzgPBzq)LWvu~=@yoAX?$ zasv8=29zhbXoRALK2p6p;R+aNw-a~S-VSmq6g=8C{LEwXTyLa6%ntjD`ZJ{VlyFXX zw%dhX!R_8@Wr{JNFjtZU1-~YfHx$5F5}2dIu;mW7`M(Q_Eq9lXt62%+&>y>bha!3Q zdE;WBlwKfqhcHq=(A>4v0sNP-o_|R|OR5jhLGuswZz03BYw_Z$1w^z_A z|F?}g-wCZ@!@c|_9gj?DWMw)7o;}a2= zRcwPs#+px`s}iLw!_S()=J5}w7F7#E<0oXZ2rK{r;CbgZE6YLwXg+Z^9%}liKOrVF zt>t55(T0E)fOEdq#qiryTrPge2U}VqkRF*C8XA+xfE88(kqSPl9w49>P2@ zjo@|2&R+Ug)7^ANO=6+o?dDx0nwS`J7afVfCRZJ?+g4W{p}Lb6Hm#w7`IF(*pJs@^Oy<~+Ij>+SWzC3vw7@J9=d-qU{`e{sUfrC1Xj_d<7BJsV{ctd#&#?IS*>ftWGi=r8_@{rQC^3T6==D(S)1>{nIU$ zMoZC4_oOH0dIy4yyB+2Et<6;DuBy@#U;H)(T)JMu1XNylKeGxv99W4qhF;LkyZAby zZEnOLX~zXd0~Q&e;(ACAKHhDaI;Wtc`|h0cO?eyDEkPpt3*X}l2YucyIcP(2V{T%& zHqY*Qhwvxn9+I+d&itmIjfhNV>-59hi#1&+?EKL+^kx@%blUGTP#f?%I#hfIql>yU~k0z6E&>FDF0WvP>dIRY1M@bRvax@E%@)=koN>9-GnYuw@xghGd45L3Txv!09>c$V6kcNixUeUm*l7kuEIxDpafyRH}7 zhcV;wH4)@v@0%_H%zSq`hBjd59l<5cKrGbLZ>nT(5RQvLdXJnl&?YLAn*oNz0L|yi zImWfp_iCH5d8^ubO6MiBcw*fnbV|uH91=-d+_T9*pAD?x=5%&%L#sGp{6=A~tKEu_ z+%HejJeI<%Yvu3B9(Z)`&GOhv5Y`bi)?Oe)`aG?DGxV-n14E0*#VA)%hzg z2#rFkO_I5RO9iqo41n6XumIl5f(cGn9f?Iy$g|)JMCTio5(1C%7=VFmAhz*k?FR^@ zkg7{p?kb0I%>oRQl2tfGj~%S?}8;;$6j38@$tjqWbDAmQuhp&)CF&_k+G?}R>mi6Kj{wsV89 zLk6AflL399E07M#n)^ubpwNnMP5M+#JB~_LtJ@JdF!d)eoTdE93HSK6=m*a#5_k=v zvODH)a--(T*9-|k3X@4rwMuWsRjNXZ*)}i!b0&MZ&)C$1<4C!h*GOpW*}*7td#wjh>P3HHOx z1@5s2hx9g;%a68eaujWR?bv=oo|mR6SDUkeXrt3z^`46)KhjT4@mOaA6;ZZ%k>-LB zg;C})e@GE|V_X2hj<7O%E#QHF=nP@}Wj-P6cbfw>dp2AcwA z311YsM?v+Jnui=-;YtLM3w<&XCZ>Kf4^gWRhaE! z_AFUa)_T9{4i2WDIJS$6UDJI~mq6vCe-s4GY99-Rwsc^Tk1+){bU1DxuQkPi*K_lNv^g}oE zK6n^5h?Msl{r-@zIZaR+psa6r(&b|7R>OeI8Ses9zxgP9hcuFvlnE|kwA#MOZYAwU zYblLOY|%tf-Y=}R84cQzCQVC2(jsm=t7bhih#~tLHc8w);*SFm<)j<gGzz6P-))FjB5ys18! zw-Py3nyxh0d%NbH`cxLKg)`wMMrFPG%>6=>k#>Y$HamhT4bPgOL`6FNza)0c5Cx<5 zf>(J<9WiqC*PgEa*imkbu3~B{053V8YIR?z0iNa+YqBylJM+n^@9d#ykO|EQ1G>o? zgXzC# z{g=ef-Yln~pI0RyQ>Rs@Gn_0aq@%2ZKAD#gVfDR0Wj^giAh)?X=uotgKE$DSQyt6l!c&rymy7%-Mpf1CdBRqL550M z=lgFp4LQSv%@P{NYy98aGZtYT^#T3AzS^tzven3(!%$lqBL~bQW-E(DDrUjfGk7jn zoAf>fR?4Nes;#^MEY?@LRE9LMOBW*6#vj9*US$571p8w@py$A-b;yUZF*1KKY9z-l zCh*WVX-V&4v3D*SKWn`-lI{nI$*2o?g9A91&JuF+xRoG#GQIle_GZR7BM^-AZmUlP z`uhr)u3X19er$7UY`Q}={VJoH#c{! zIUjqqO$&xbXY#Y&oSw@5K?(i;aN(OV-J&V~K|J~w`v2trAH=x}<0KzG8V&VYcuK zaOKTms2-06*<;v0bobT4f%6#h15m;xF!oXx8a^kFCCZ^9-5p!;fcb{!PKQ7-v7At1 zWCYbz@ph3RhUVcaOF?kS=Pf`HsA4+S|>~2Ful0?8=Uc7ZHC<+@m(rUU@CR zQ)_lqEL6R8_9G#VmOxz%Dj}2&r28YZ`jdRD%y{oLEnb7*%}%&wqn7SJxma&| z=~6{okuQeOxlqj~Bi-JM@I4kUPH8L49K#zv{VrgaTiS6m}0uFJXX&-qSGHC{77aQKp3 zY@n1HUxGD4Ml_nlqpPk3OLk1F@O|T1?&5>}0YczHR<99tC1G0%10}+mZzNQwR~-I_nc=yv{;T!$gD!N+N|9`qQL?$rMD0b&?Cz-e zCT|5dcIY}kK=Bl)r_oII4#Tv@4e#hSb1>6OtC?@JTG-0GN_vC<;k>#l!t~xOzVLH| zUOrv)(f+4!S78^%!SUnGcFwK$)Iu)dL2)9Z6ZY+0Rv!B*i9t+5ZtZ~qV1~WlrG07% zk$LNI;!}3baGDIn;%xv8ESSADwD~#Qrf}Gsr^AI2HV*I1elL)=Z{x9|QfEBmjoINs z3uA|OM!s)L-Y4-`k^UEP(0knf&WPT(;IJk+$``hh-sv*rj6;T;FMsuAs~|O(DEZp- zsaB*GTO8LY$pCL&h6%Xj5vg+zs|l3+2BOuZ((K@@%T4S^!^CnHf(q zt`0_7r3bH}QU($_zIEuC`EqMie_JfR*&ahFkg~z(u`HXIJLFC%;5&H9E{EHYw348x$FhyOc^9rvn_nyGovw$dCoK?fjw*Wlle-nVa-9eIR z+EsVKiL0QvQqrz4L;xLB?Mbu0gmJ9iO%-q*f~T5qrDxEq&}?5inb|D{7uzeug{P^A zq}adVK9nubA8IDd_Mw|mvs#S#7x8OzV9?6U@K0~;#FPPWKU10Zxa@{*$qCD}Uxr<` zlAx(`0?YPXYi47hwBvk_&UmMQZnCxjycU$CpIxvsaX3x5!pTr~;|O|tf8G`v=t5h6 ziz$)`-ff)GHUuhKd6z9pt1Yd~!s(MbAzYR*0FHbn6-DpRHb$jvLdVZ#X|sv%-V`x< z7{ysAgaH=2erkPx0B}4#Fxz|jtpgjRwqT5nG{pXA*bz{aRP7cz1@G_$e6m$t72v(F+Ytf9gC7vyRCgR^rg6lX z#OE4)-6fszW1gKc(vwN(%Q<8rQY5BU0<7jO(uL0LgjWoc1OLU0;u+T5>lez{auJ*HegIAm8}HBBh!7^;QSZhFNx_}o2PeS zr%cO26(5)jO3uhdCoUI*`G2OOS!+GBB}A2&-msoVUhsME@#L$L+S7||DDEBVCTY2l zZL=>sw4bh4wVc3%97~oN`XQ z$lP8muoriitW74QFsMam?Dc12zt#0T75jbvyRIVxC+N1@5D_Fob4B31Uwk7yfkTL2 zxF!-5H?Mcx2Youxu0N*aeuW@M7<-n|eDEH|;Y;ykh;S{e)`O@{+O*8tKJss1FI1_L zaTy#mzUpuYSoGYuk0>uHaC#Wk>8Jl)jEY{FjFtAa$AX|;U*+jqWjvto?x7j!@>m61 z&z~-Hu27w?7vfHK6R~>F7nqMG4}yQP$kzUZ=6C4-);`4fTq2;kS{apoT;x45&rk!n z>i0J76^FeVA?u3pZWDra7+x8Ku4ZzXb@tii$xPB$2VXF{Yh5T<7X0@!C)3*f(4@^aa!|$W)bCX%B-L4 zHW_?*!<^Z(>Y)!8S;!;1dynBDNMM8ugJWXZytO7G$Y3&%)k&A7^}8C*h6)wHeg#)l!JdCINK83CR~aT9u$a^L5DTy+*!KxF4< zx+(6qU+*2A#4gtc*kb@Y?_VwH3JOSvHG*L8Eg$t(n=Z$BM+l@rpE8RVjUrpI<1Q#kWLWxmZn$E)e5mRG3Fc(- z4ctcBurX&vdNOe&-eoF#hltGMMI)0+veB}1Y!Nib3&(b&KxWYCt7JSzzW{uOAAcW}` ztG!x1vD@PSa1z7*kyifc%VMfe3HmRvGD-AG4f0_|B-Mrulql;&kk1lb(d}~~)9Oag zPq~PO*-yxI@h339=5DUj8*s3GUa26Q8K1YNIa$KWLtv7f@;em^epe6&Bwu;LfXi9# z;5C>o>dU1IpqY&()z&4b0?+j8Y<6*!?n?xI1=x}0#ssC7^K+*qEc-ziENzsPyYE#-YP=j&7MW$b?J9zhyLkGMOTleU< zBkc#%gf_gn1Z=><1mt)5^MYlvgk%;cGJs#=wm<_zb$G?Dw|&h{`vWB2IQU`J?gs-zA+Tp_X7Z9LBEr$wlIiim0*Qthoj-G z?~4(Y5M?ds|BRw%bY+*Dbs_KkyEVzaA+TyzCY$^f1)kBXb1W4fOvo8bYKot9+kgxu zohB&=JYT4t=yiR!Pmmr-=+owUOs&R5oJ36&ECV{X*W>dm&X=_`zO)!fsiTh!T`!az=PxI=i<(^bij?nZd+sAxB z>e-{-Z(lWU*^K=$j1ndEvXKnUesBjHwr2n6-6Ux55OeBOwTD>wV58RzAPy(}75YAe z_Te;H0zWjM@A0my7toDJW(Lnb*qeR2V+zCQ^1eQM{U8UE49Q;txs3%CZ@{jR*PK2G z79leRsKSw;oYVVlhXTZAZE;WY#h%CgqPe5&~9 zd$-0!vo z*v-3dPAy-MR_ent+>%C>eMk8-l6h3w`d6kMp6j?1**Bwuu=&29JXSKCzbszYZBsgCpn zZv)XWel=|XtAz&We#qXV?TKEMNGUGpy4X($VKYa~YbX+cWs}v!5=4bS%uvVI4D9uq zv~@?}rsep*OidX<5z_9}(h4I-Oc}pXGD2exY+({Ki8GCLoOY~#NLoz5819B)WFmc! zA+d9Mt&&u+3HonH3H|lOx_OGDTxDo?e#?KtsSv+-`2&>!Maa^FONw;j1xh920gpy< znxqco!rTkaf!J`qD>baB`y>pr#1_DKYj4y1n2mXLJXQ(IRt2S|G(J36+plKoznOOY z%p8gI=kpKqZz}HP@k`4wZ}pnWaAP4B^D&0wdCJtVjnf%h`SqKlvXO@_@QYCkX|NI>tT20^bcBB>z-ZTX2}s~QVCtmf|Gl6oU*iC^e1*_dQv~Yebthk z6T>^3t^{`hH}f{aSrK{+P!#0KryZ2;WABDqn3Dx5^$C2VDK2isy&o#64d7Z2iV6RMgrcfd5s3|YJF$r}pwY|%JP%K|k0*KGGjejzl+HxT9 z%RM9;vuo1UN|`a<1^BV{pdV|4#Ez^AXL*0=t$Ms+P3rjaZq*H*S6h!`B$xEo;SA>s zM9^DQ)zx&7zml{<5;Q+XKf<@lG#t9yaz(k7F7oW5QT5KclwNBaV*0vS8; zTHRCwl(aEz*b6EXgzQ0;Q!- zbwDjXi77taUnZs0EghO4q9Cic&+HV;mN=Mf7H_Gw8+ zSF|W(Hf*!m95dVoRiR#RF-d&f$h#Gsa7IrnzGS@tPWZ5dqolu8-w zfO_w{V-%U?_KBd4X76II4QwM_zU-t-x~}*uka*$6ZL_rMFL){ZGkdo)l03_ zpjqdoSy)l)A%b>_LhT|pug;y5p{#+NWlUI|mE55U_9-ulPBXUjGwf%(VG71DOF&-M zKS2gnJK34LB?L>bu0vpk=DO}cN6(1f<+063uh%c{1dOw-D;p8F6W_HjuO);O41C~> z5K)Dz+h|vHoJ<_#eo_`Qxk-v!)lIbwjZGHD2(r^3MNPK*^8f*~0<%5lRn=YpvGIlY zKd-=&WMgdp26q;&11~%eMVaeoEP0J_w@=m*!&3S?s=N^L@6prN$4!y^@v&w%@A6eu znH27@4BQ<)mbE&H8Lg+cO$qf}ASbHw{sXmCG z1lzjoE=--xssjwgX4R6>HY;SxwLQE@y}yLJu)Idek&t>^17oi{dmkdK- zCeU?iGGt(1(h;WciTr&|^5zF!`Gt54`va%@auy@WT9ljKDXyE|WFBWY(GKqR`NMCm zZi#O6W87-78x*)#yz}$}rp&?qvRT$Umk@Y2!=h7V8TXEUvSMgghlDfg#%_kCIvuKV zgrP4HtpO4_j{E@oAxXjcdS2r30q>DrD+o#`nonEe+!^WH* zwJz22J$Qd&tMz2GCP==;RvnOkd%q(87Vz|2JP#hyFsHa6=MMwCZd2yRpTwzX*?DCk z=lrrI6iC}&9x&)3|HPgsu(eEhX{pwY1#e6cNCm!1h%?&mjS~bBQ-@6!HAqj`GgHOB6my-&peLXPScrEo4Y9 zF)y3-zRIvazzj(~do2Ba5JHDA0+-u0g4 zPRlX?8SOPP_)y2g%YXb3G_d1?CP$-~5S8cofw}qvwxjeRM;p?z{yXC7cwG6e61((Q z7UI`g`2ig^r>%kC_7AMC&)*oReAvUlrt8yLjfs&1W&O5ut9Cv;e&l5|6qlK+Oxj2o62DP&eRfUdmAd>bjE_Mu#BA zM&fO3RqWrw+sovIzyl+YH~sn4z9SmM69c^0*PycI{p)bmY<7|1TAXGhfp&eMM@$7$ zzTtYaG=9(Qx5*K$Pe6GO;jf?yUci8gF*Nu@=&X;QxKa`vcpzZW5fXO~$SdnN)gMnm z5Yd;!bv*+x3J5BaAc7e}>o)dkG2nu#X&G(YA? zzi|M2d|%eORpG*&u$A4%{jiJ8LN$gRB|L7x#({69w@T^%{7)F?}M8UXlWiTbt`kJ&dBJU_voUr~GgGJ`loAU&1uCBKe zU;GW2xmX*>Ee1+jj`i4@ci)9j%kT(k^`kZ?6xuJso z?ohh*lzi6pHn=VB^9_NYnJYMUT>-wUMmV=*g0KO$TSp^9u5OvPAAL+4k@3k zo{?LibBQ!Nu-6wPcMgOs28gm&R^r}kE5N*)*NGB)_Wf>ZMOYU@rcRbjuiKgmsGAx{ z!CR=UKcNq?8{0)Eo>QOw)z`0t?CvO!c|$l>a9KgeIoF#>$V=-

05ZW+;$#4N{Z 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 Q&&AG$LP;qqFNX4e0L!>f99WW zX02IkuU%EUp8b@ZI@MKm&S`Q55iuYWJsSeKkMB=E1QudOVmm`i1YTZZ1{o7uGbeLm z)_0QWM^zb%+HVD=;UBxV1w{|xvqT$?9yyc_`R~Q2ySEX zvl^lRgM`D!n!vyoE4E8% zGPEv8v@V!o?EKMNm5R6Yubu8*CGu~Ff8O3yl`}e?%$~OQy?*3~$FX@}19N^73y_R&1lrq2m;$GoZ*`OL`eJR1qJkk9pG zZuK*{yEF?!*(qe0BIUVxpmGp@e`_t!z0vg{%EJ|WD~^R{zhh&lG^JKlEc>L54xn-6 zeoR8MC3$pBsCxT@c2=;Ob!yfKak}rjY=N0k0NnGvwU9*tvSs^%Q~a!!Zt8&IKuOEe zZ@^_k-k=l*lwK+>{x+Mr$Eu693P2{w)3ThMX9uz06(IW7pdN8t*b3Xa>jFh1as;X& z!GDe%+rI+`R~38j6Az`q?t#Lb>##)jye-^}TnVRHZ`vql)jnE%o)n@4!+=+M%%D?$ zAtf`syR(a-A%ZUY%u;X&^>5WyD>OpE{yJm`QC} zAe40v`};eu&ON{#S6R_~_qw*;@yz#{G4_Arb^Lrw-8Uz^WQM;WL)OLi8NS-eg#_UT zcQ@f4*4_v7ZHGPLJsosJb??PbJDy(dGap3=eqW(n1`ZX%4}?@w?lsrQ0TBDbP16 z&AP49+AhUPLwQPYB_%X+XR4XX*nm{=uRNp75$OXDpjFfp&fvy096ckikk!0}! zruxrR#NZy*`PKDG0oI;ns^&$qmqdC$KX`J!J=n_f=TAgLt`2!VxZ|I8{MqEKwa6QeuuFqONVG1-% zMZ$0@w)r;1!#8LFsNSNVkVtIV-(oEA0os65!Nl{TD1dhXKm7)OU~R<>6SP9p72ZLe zF`rn40H>xdC7jDj5@UAd~p=&%$Lz9+k3;4)R*Vj ziJL+q_Q;x!?M0}U%!X41L zXVpsa<|C5#cofHgECY1sFYHt5#fu{8;j-68hl~AbQRF*T(ON-Zzy+Q-GPT~JlX>%z zix2u0Isey`6i@3H1&5AL`@$26n>VP}&<_gN&;ulgJ|>i#Xr1LjC6(cOoBJc)l>*xb zRYzT(58ija-Q)|=P85Yq_G@BBI z5B8u6uMuyBk08V)e;HA##wv?BQnIMYiqV&Gpw2^%N1Y1+q^|ZLN!^9V&)7?0IQOzW ztWxFf_aF*?T=~RwAn3fo}St8ym=~AJKFzs?F`y_%EC|vk`bqu z+ZR%YgLw{bSEHbX6QNq{r5D<4Uhg+$Nwplc)-#)W-}q4IN64N{qky|6{Z-(`&;QT_N!qGLZe*M=0o$@t<~l|ad$wmwQwp=Jee%<)Ni0MU?j z7~FlJVI)ISTbB6(9s)EDQVFjuTCd|EA04E;Np2_AD{pPf?dCErOD36-%sVxm(<&}M zu(gC1D+GEKnVX~!C&YBA*1?Fel|gC(zOCSAA{!u#P9eBMFgYgEFq)NEIy#o33qmt7 z#g#)aw7@tuK7lxpTO|wZrEsO^xz8mbfUBD??dE zvMhp=dY1f}Nj$#!!Q^+X{`!b)1gTyUYCivxVi#E+aBf1xa3fWiZH-5PseQjO6yOnRB{z**6n2EB4||8^tNBMT4Yb{FWV;N2rLK>Y;QLkzHZ!j zzEA9Qe>}wg`mhzG$IJK9DE)fa`Mff)TKr~`?5+85DE_uT0r72_uJ^ypVIg>iBRBp=^vR}&LwY9Y2ae62^ zpB3u)i%C1G$3ZFfmCN)?@^H;&0S%4Y5d9>Kk5w;Rb(nQ4z1HY)+q&{X);@$-+;A5$ zYU(EhiW2r#HsxBaF?-^`mL!bLxPxV5hjZ#l&SQw)_}kLsg}nt$1}#YKH}>jDac>?e?O{t? zhDcI*s3f$HZFy3XY6=bGd9kHqk|~~k)?JZpsgIRiw99ONyi0_VE)C{&tOR6PjVj%+ zbWObhP_3b+T_t6UhW>GgT1^+jcqhA|WAa`cRIQoX2)~~G5l!BjLc@np` z47Uih5*W3;CAe6su zQ3(08YO9i1ps#5aic3!FEyt9raFT6DY!#WY{20xAS7O0}DYmI`(MmN+_rr+>PE6H2 zoW>|^q2|5EuSAF4Nn8$(udWA{vL)r{KTHA~sFq)t^6fOeRrFsJ`^xN#A&;X$KX8aHNF~(LQUIuM?2vV@2vi;bjrkU)j|X5Xxj~>j8lT}@o<>iCD$eh( zntIo_ohD@n-wMb|<5(8H`;4@3eO5tb5g$eiRSgTNhr4bTQTOx_Mk>9AS#k-q&VTV} z$n}3hx<)Y67Jy(XqL}H2D)W1NHqRvN&H7pi`SJh(W4sKLL~3YTH12{|q+5l9e(Evj zzNnlcsrOvNorOLf(Kn?Ok`GzBoErg6i%+5}g zWCmm1MNnY4C#9+{SFt_nOgHlZvsb^YS;`4|iQWGIEo830o*63k7?yJ;a_-jR1!Yox zm(}7z%|<1w4xy|>b#yonp-jdGU|At@`dJUYM`<$E5<=SA`X^SiD**7O@MS4IYLEMg!Giv zaEAl+sMTMsb@^9+@{h`KJ|B@uAVrCl1f?>Crw5O|7)Gy`o z@>b~6cuu)Xh>%(J)Hhb5D!XbT&_=#V@lu!?#VYlx$)uOC$X(Ph zVK3+Qi{S2XUBLt2R1^WH?_>sFRRBq)R34}dTQzGC*aFEdoDVTJ+xysi8Hc^wYrD?K;cQNb)@2V^<_qc zb8gd5u`t8q7CJM=4*Jeo*iegR{%$_#5&T_;;V`3PG^UtY2&3pF%QUhq&Wy+*d}XmS z{rxU5ygxXKHh6hI5XRz-R=DP}gr1186bIYOjeqwGC>P$2am3N3fmYMS40~_2c*$~Y zfNK9SF=8f_(wLekL92mOZM-IBpq${M8huRdAnIZFjnAM>-5#; zI4%Ree_}QJ&7yC+34a=37Gx-p_Gg%A+#2!r+sBt`zBH>~uP1|?FM!cD_lsR|?{E0~ z`+9G8fWeSN@w&(62?T`1TBEl?Ib?`5(g0Shg2>v^7l9hZ?~_ZeZIh8YJQKnk*92n$ z;FjG(&`EU6F5`)7%2Ty$R6(uhcS=fS8|gFOVAOiYZ@WVKJE5c#isYw*u@?5yY(WC; zS;lrn`I))EjGiT^9XGia-bpuchHI)~5?*NuqN1FTM5d zNE#r)^2WMXC8avsP}xgF0}q^U{ztw?0v`*J>3b&~tUX*PR1}%5SD@Rn!G*m>3MYwr z=0>lzMz0PyB$tUgXM^4b510|5V3(xXx~4Za*h>5{J~~2;uxXh{q!?!Z{~Ygc&7?yy=Cbt(r2IZg!EY{#yFn|rlKs1f)t=Mavk zX<@4$vs({QSjRVuU|VYZI>-d|XG?p745oe>abOEE(CPlp&JSwf{&H6))v}-(wlMh9 zkt?HhArFK_b+a1pzHhncu)}i_>mkaoG*s2{IibkFo5zdkEAX6lt1zV8WDKIMfkJQ$ zH-!q9YdnIBUTnkeWE0IdXor5WhukNE;1iS7cpiD#`XH$A#{ly_W4*f!o#MSK+M^e8 zSz>ebI94P>N-Jr7I6i1Bocxji!|jZQ%algXO|zpEW|!5i>Nv1R6#JLGW~3ri3RQ6? zYEwRx)q;YkEcHAZ!*6|Y&ixd~|8%E!M;saE9a zE{Iyq!%-+;AFr-~cC#1TMDyPJ%AE5;{Uy!H%g3=|$){PfZ?v|g%O=TuGL0C<*s7~U zS@n)HM0vb<&mzd|v<+#Lg(z!HxlFR2m5`~ZR%6BtsaFZ%V1)W5U@>3*sA{E8V7E>~ zk|zieK(e09&;QZ>mYGer7F72eINj9SYkKqt#6vFc&gkIz+l&g2tKZz*0E%CRaIhO$qFIbI{`0wrGl0C|LaXplHsfzV0W;&f+CM&tEsaYrlPucOqlM zG0PQBnOG)}VVG%h37o(ikOpeeV6VcJBRf*ZF+Z$@enw zxa3$BMR0=G2Kz@HiaYuMDCrJUrETlO+WvK9x?*VN(qscRE$iwCs&s|1mYjo!R+FY+ zR3WpsB3oqjn3Bt*ukEP*^1yA5wkcy}c7;t9rXZOXR^G!$IzV?!-8%2+g0{J6`bGzB z0K(y;;75ina{eQ&HMr%e1$rqL&(oCFaOn9vFXOvAO036k7eUDQl10_ohhd+!6%E$!@Y2`p830C+a zd;^w#_lUV+w3BoYnX$cc&pX*>e38A{h%+M8!!&XYlhxD-w_2q@VU##ywr?EVB|pPz zwzpjVB&DRCnf52#y3#EdJDt+c8IdL>Key?9cc}g?;voBRn1OkY=akMwmeEOwly`S3 zHWMk766)8XJTpi_7t9`o=^!$Ddi+W5Y{B}YigtT{YiU`f;4);(q0;$0;Ugr+o%5%R z8hzI?fG5GRNyC{c%@szYg6X|&cG?cyWaQ#hA)yHjkyYr zAnq9q30G%EIoEdU$tQxabQ7DxsgbEEsM|vbb;n2|#!99ok1k_#qeuKwVJ?rOGjI>q zdRc$QB2?Z-+sTsO##}vzatYf7G3X6@$3Lhzm#&LrP0B}KxT~|r;pH-*(s(I3HLq@!}ama*jNEeeSzq9M% z_{cUETLxUEjUu!Kt4i|i`_6~~_3m~n%ms0Ku<*q}SUt|!7ko>w6oW(S`oH@5#Q)*6*8)!bA?tgUt1^~3*Upz)Yc~f=Wqikqj6?ixA z$-Z4CalC9T+=RWK9vn}Mr8o68p5x69H15I_3oX-|#drIN9Dn=?X)3qEKGgDhbxZzH zvRVvuz5QM0Pn*C=tY_!8n~vbX3)gxAAutJ z(=>kvWwq6wQ!-HWhl_%hRBhW%4cwimpW2@fPeqB;31)OGt!o?~^vY0~Xme;T?1Cwp zL|L3Cqwe^ZZhY3Ac7%1*1(%BgeeG*h^%nO=M)6cRS+*^ zL`TQE*^5iczZdd?+91~AyB=ap9kK8T%Wx1+dO$hNv7tKh?IYEYGAo6#w8U?raAo@r zpV%=C+6ii$k1@kt_^BNbP0SX7#>;SWseF$o9{I?!BHoxjUHmlq%^%K)=b5xxqXkuA zHKrMDNWw@5Mge`t}aoK$rWsL1I`i3-)cQiOhORu=qfeL&Nuq<-ip zZ$nkJd;qoVcs@D3tKj%ySp&adf`9f%0pgJs*1vz6vp&1aQn-)X)Cx1JgixYD5ns49 zOcqRw;WdbqVcT=2@Ao*U?Kbx1*AV3D%a=XOTHjmMdM;5GB*rOWhm>W$3Su#aC7%Q( z$tK3C4XQf!g3j%GSFiWrsW-4=tIjWZ++tEVW5l1oweGCVOT5J`r`pK>O4ia>ZY#sbnxIAUuwJF(RzPe+4=f{ zlJR;3Yz~)e-Z<#p(phCj0tdcqCff9F9!Ld zDb8*^MOxN-QkoAkd{!9JQ3&(oFy}h4zr{yUD&^R$$VqtRQuyJZfhbr)@N zMVH8iCIwCz2p{@xR+Kud!GWd+S)#z9Y8Autr7?n0e8zBI138k_HSq+h9>?zs=3Em&a4{vV7<3uB+bLL93qERcfX8&Gqhr-peCL z=gV#5+w<4Amzj;{y;6qt-tYAc`fW$4%)i88WfMOUl|qdxsyvKdWi2TVGGYARVKcNsQv?r{sH+3<(4gqAZmQeVfrQYwlTnQWv`g?qXLB_kEILx zMwn<46dh6Go_y%4L|X9{WYC709s`wVxQkiFlqzZo3$<&B%_1W536?L*&%}<#C=T(% zp*6c5;OZ2Wp295bRTzVcTDkC-`M%}FO#Fr*p_NZ3N74X}q#9+*QQA{~`H6D{On<3ci!J)f)z+th9`6HENLj(wJ ze<+aGHQs3iRMSENCGb$!mTTk&+t5{BcHH=MoxI$$&dIWdzb~UTK-4HMF4?FWlV}8_ zGs4pW2H7mE#6=eU+@Zm|w-|zOo9K?&I|JX6w^~#qG67-lX61lJ@hnHYu!b`k0&`C3 zxfHQ)aS@J@Xea304!-=D{Z`S0H!iJ)FRA2_a2cLE=tmR26!wjEW+e!cjbQA0IJ@Yu z!C=(In9T;PHiIP2J<)waL2$TQQ)IEF-#((G4ROKRn0h?ITFWZwb?~LC?4-@@^Zh{Q zOXAzZ8pqr7@y6E|?@Qdv8Slrxv&PY(c<0NhUB~MxbBK&bN_u8v{?8D^!m&hPz6Ftr zf)X|<7X4O3JQmY4{wKjp11|}sK5`_>B&a1f(y{a+UlZTnqv$xan9f_K-L$CX7i;V( zqE?gS9NByRyarCsn%-#yutB3aNh`j*W0vLo;KjLwT&{oKDmOl8XHjY=YtT`B2n&!$ zR_ctl%~qYIyR*aS@j4L+>da5@q+jG~7*^TI3Q2G+YvjfQ@#BFil(ieRVHY*5EA*T9 zh=Q}iYebZ)30e!48bGfKCBQ7!mC(t)_&r#wy8a%(Ws*)EvM5HSGJXSt#7=t5g)e`kIUr@vDB^Y8Gnc!4%*tyls%)@dE{~~Ub)Dzngm3^t z)=}%)6+;~XJq}{H5D|jC#X>KpXZg=acG(GRvk5mARfH{+IER*87AIv#H+yUyH$k}| zybbOb(AXj&DDwvs_QS+alQifD^LdzuiRJ7U+Do-u@VcBz*q!%S_e$d)Q38c20AJIX z&N!wzS~T#oZI|ErdYu?oR|}ml1w?e;m%vAJ(VMq=XKE&Ms!^zXT=%dABeGWcfP#@YrE4*#iVc?pt>?(?q7j&*T% zqldd|8m^5lyh)%-xy!>v*KJ8BZ;@}g)_%S&vM@S1$KJWkF9$f*3A&qDLLx4cRle%_ z&8yFYNm*)shw~lv?Nru>tn|z?8a>R;Fzz#QNTWV zf``Oy2#EW>=jzJkX3&-J94Ay4t++=Ce#FdInUdr{9Aw_utHAG49I#r#t zXk>tFWN?<7YeK5I=G#~GqvfLlO@gbD^sGtXWJ@(U4T2SWgUH-g{v<)0zlyYwWX%`9 z=*!OCf8BsllG$@9eu;@vW4pWdVwl1VN+WeD)}phxKtP-VIBoHlxhWz}Za^O<-S@bP z+*AA~REss7m6(Sl!Rafra5%ak0i4ftYg>-MhRywnAPcXj?TOo=+uhVeXRq5ab-lN} z_lf5BVdYz+_xH!+O7E*1*UsnL!}GVBw};!*$_%>G_c`gVvh!)}ebF+e{B$A|#oCFa zcSaRzf^)Y2ltxAyOkEgy9Zv&AS?iroYT-p5;xE_8+L`^4eAmd_Lajkssb2UV7cRdV zX+ynqN7MGtj3+arqebu$jATRQl1kVQTYN4JT;QF6VX~xGO=V$JKIu|{uw|O=lD@?p zz3Ijy_13%qbJ=HL%$r1mB4Ltn#6+s}>~<|_s3)_ujaMsdoaXr>9O8~| zhaU(WM?7$<_|Z)Rf9EP);a+MY4?5*z2KpDc3F=F3HA#BJI*sJQjv4o82{mp&g7^yK zj?0}2#hlQ0eul|W8^1WUGXFRbQ+zUN!I_hS3cB{1Nno(n~h>ElkKMV1>O4+&jxK>|ZvsI=#41ypJePN4`%d z@y4WH)QCx}D#R){xcIIP!&ty>{8GRIn)HA=b{|Msb`ExB#UIJBD@rY@Qx9Q9V(W#^xMz4CO_MzkXH? zTPffo@HhIi6$-*g-lq$?Smicatj%SyW7a;+8|Y1F{YKzMT(*$^LUDaE1I{39_H>u} zb#p)szd#zrK%l}Ip=2@m`EI{8)_`}G6JN1rP3|!;Yn(vo^>Ot#{?rnCUq+)P;h=9 z)cmPQN~co<_%ae*E0dR3nCW23=B%=uZONWJ$!XAqSr*$E?@)kVK{93RPJVsQvpbW~h*=7JcT!7J zxAnfSKE+OvZM2ho3D#ZS-tUf?Rj8ZZ!cuG@Y1bN?2>+^aH^^382N%VmDpRCU?_3+g z?Z$k3gNi-{!X&>agHmN^EF~w-VI}8lJ%@qmp@2z1I(AM5*^__=BXZlN1}5(UwtIzL z5;gBI3h5M7_CAIiVQHRdNI~Cl+s>COKdf+R)38P)VcRB;1M^ z(4Q=oU$dd&D;h!s53(uxRb?SpEOsh-fysQw#l>E&>;GuCq#qgf|t)q zo=CKyIReI34F_d3#(`fr?!Ywa$^fQoP{^Ix)=LOeouqp*cK>98FmZVH!Y`cV7&o&$ z9QShc7k-|fO4Rd98z3CS$~k*h9lyy8`zyH;zk2)8)c~}g5;~bB2)GISp7-C% zAQLO|!1=)S?1t~>j5{45{E<5QPc;OPr?Wil-E_;7)SU+S>g=0~1{UlUgRN?JtoZ8S zoqXr5GW$ZekO|SC?49PRE-0GA`j#02NylL3$^-@QDrYKqK}H@K-%ObXH=*44Mha+D zKy}6>t5^6H&poDuu2b5tqgL8a(G2@2m{XFuS1(YGNY#k4J^lLv0!z7$J)iqA^`d~b zBG_QQV|Pk6vmW+Kob|05h8QaaZbP@(o8vIheXPT=sjFx=Km+JLl-Dkk8*FAx+}7fK z0qcU%z+1y-oO=8)gvwT;R|adSt5ItUb1U! zZ^{L%+Ibiatd}eCod9~?4%f-tw({C0QoZkLGrh*MYc{z;F=Z5y3UOS55;i3WX%@Y$ ziVK-Jt5oKAi?!DC3FnBA<0!4f**4UnXEd88CE6p^ zofNTdZXAbN&l|C_`I+aLfk1wH>jT;-Bu_%3h0cjZeGAeTTY_{w=wYLto?`L+K_kC> z`$xju@vpq>8j{x53fB-u!kK`t?AIahp_?^l@na5SB$DUm;w1Ka;5oTCx$v}D)^1{b zfH)A?akV(f@owI)-h5V5mUk_`)Y4^Vmys;*zjHEf)Smf)iY_&5^5SBZ5XrGtk?CN3 z{wc+nMbcA%6HXs+Z5Bn;%M*3%RFRNlV5ycbI(842)N!Um# z&)>n*|6kC)9h@`IxdBB(B^eH)+7+O7jqm-ut1;Hx#+*Z7cVax2p_u@CuPTOdQ5ue( zU0euu8l58(CsG_|n1TT)eo>w3`b;iGLn;N}%(?z!7C}Y5e9&l~D_l2aHzgKio?G~j zY~(~BPlJTLuY2Vjm}+@X$r3pKsR`m5h_ z-ks&9K6$IK_MC^C-UE$L3e5xUrat{!!+6o2Ot?5!WIL<1q)1KFBKNNxh(xY(J=Q*C zb`~!BDW7yV{%@N4_BV#dw@^OLKB6>36uD~He*ynHv)#Wl|7VtefEU2OEdSE~;d-t8 zhi}6WC2-O2-BG-FX|I&L}t`Updps}rBJ{o{*#@yNO%dH=J1$NeAN|2OkJ)_-yT@BSPAu>4E^rz(#@jR-5; z9{UsCf>&8~NHJ?sA@r595@Z(AF&B#=P@zdC1 zHgHW7s20wRZYh2_GsUfHwUQzJe3`We{+TD^enLAbFr=dxrrUGQ#W}tDGU*VzePMZA zOL|#KwQ_{63>^UNnd@9L07y7qS@VUF0ui}_Z4qoiV0s*iPBDLJC#C5W}#W@sP>vZEF&(M!fBcHP{|tyeO2VnobS9#n$v;}aerYDXE*!d7NHpE*$!K;dh@}u3B(+;kA38L*%L43RV=1`Q* z;lc9{|lh&-AFF5aUrT+RS*T|?xhbW6^?4k)2pD?M}p_0o&b2?Uw5*D zcc2P7EZRw(o>Fg%pSNbB-fpAB?a0*ko!m~3mnNzDIOBI@)9KsKq)fPIa-dj;I3DSx z9h_GL7hFxm9l%zf$zTPp#}@^{!82qQtv2G|o(5@;4R^!j9iHdtcxliF*~B)~5F0fs z?6%12y7$Y2ECw_(M1B;598zWQl%G+;ks`T+zUCXlwyaNFm=qgYQw)1haDaOo9)pA} zp7YY2civ7f)XhjHG*K5V4`Ui&n@Z8?vK2lyaJ8)4)Kq*ztYNzsmDZ|7{=sN@8vR zSdC`J@N~qX>b4Jk1sla$kGIM*d2YUg^C2+S?p;lBkTv2F)HyzZ6Y=W&C$MQ09>))o ziO`cFSQ&>)o`0~Qi#_ka1qmCdS4JxSRoH{euNqwY6 z`02tzV^A``a*~ACKEWCh0-%m2!dPlpW~y_6SK~PwJRt~C7aYm=XzN&hn->&Y*FL^_ z@f%Hi8(`pn*$K+TH4DAyV$GxmZ7SlnKh@cbRj8lMNKtPDHk}y7nTY(FB%$WzEcaCB z!D&G^jH|;UXDBbW5ohklZMJHY-}a^9MXi~ZMoFP}BRO1~F@v2BD){5`-u!;3g1+UB zU435S4XZl~UWFUtviO`xPRl17jniGWI>qT1R&b-)<*n4ZTB#o_Ucd<(4{?!lDp!+Q zI@kBeOLjetnd`1I?ch;t3JYBp;GW`0cUyV0his9FFJ7*3X_4q6nFDG;$SP*D38tqx zs7(aP6V6NVYjLMd+EnszxV@NdKMDglgD7%intG^~RDux6i*_Sha72|LWdNx97_UWs zx9OwGOHt>ZF-d8?%5CoBy7UOHt_2ydJJ%^pi+`Ql%FVoi1H7=mBNkoV43C*gJ+JW> z$7QC)JK=4X95gK29F5g7rz&NOK8uo!ASsHw932?|id*7_#F@(R0h<^P2ZdmM<`OIb z8(R>LM|R+pT)o!g7U!v&uHVk>~A<>QNF782OOt;q6$J%`DRKsX#c z{=zM6-=RE&P95`u*2uH@kb{GsM@p!N96H2iJWkocsetvpac;`>8c+2EWeg*#&nT_w zQ}9w#*U}XGTJ_5#R_3|J;gkn9Vv z&}}RHnGN|O#o`Z+xZ}lrA@i(1$OSdqm|BD3kvwi;#Iy`v^s`3}imbFq>Vfb@*rVjj zDd{3!q;(qgBnw6}w&ut|+5~lkv}Iv?RpRkhmQwa89sURMFZ9+u*5w;y^^r?PM1PF# zl3=w8vV(I)rg4_)P6D~^&8uM&gy>3{Kq}F7Xz5Kk3>PYP8Uvw`6HhWVKP@8#<&IJc z$znj#p?bPuf?|TNM9{cTkuE^6-|1^sx;2=D6{CuezxP6uZ1 zf~%2h4OPV)WN6t(7MfM2ai#0;xfAyozd4)8YRCUk8f=gD}K)TDR;=G*m-tlQ2 zLz!LevNUJ4Nz%?)QD3so!r70&GOKzfJqqhWi;lMGA8z@$mq_^!mr_@|H-bM(^$ags z?{85VCtTSevTo*hc1A32IY8~5-G0yg2b05DN0<}l8}4( zsVv`=JiLL_J*8!(-Mkk5uGWknM=uR>K`tN>EZt}77w zzh%s%AQZA;w)}(LtSk8Sf5X1Bul>V2Y4cA}|8g9?lC`^rmIAI$h=4#xxYvq25W=1M zUUziQ`*zFlsINF3=vh{|OkvUYr6{Q(*cP=tyb4Yclj^z7FU*r4hG^CaJAQc*h9CE+ zcOo%KJ<4?**{;O!@<5brG_J@AP{yfda;5BmfA+F(z(=bw{h;ic6q4M4R{*}#a^1`M z)GclDKunvqV>o!L0p4wD9&SiBaZX>IuN(GIU(<(HEN_g^}0 zhxo&_X3Txo0)LPTlY7Ps*WV)q??unwiI)XL_#;Rqgn*38A_4$ zuaUoYcd>wW-U48_dP`!u9E8*8860y<(r*JW%wux=f0Y6z$9GxnAC2iBP5wvTBmXC{ z$7d18V;Qg+C9oJxvlu0)j7%nt_$wSDoIfL3e@0G(XL+=rr;x>ZUyUB6lCZPa@?!tQ(mbl$I3ek))c;41QN7gyXge}$^Q!u8GO zyr`Tod-Q#y2F{}R$hRUhDhQT;%*2#wC71-1sTfZfm*x?wZ~*^+p?e@)M_#fbU|#_b z>{Piq%Ev>%c zgQ*w>4{7kpyRQh)fOjRUF4Xdrk!9)lE%yibk@qt( zfQocmLN_Mx9M_p{AX75){CSY<;OaFyM5zd1rG{`rx+s<6HMklB2v*Cv^jniM^orAh zNB-MW00SzE$8KA3Z3Qro z(RSvNS?qEEb^p^hWD?Y@!*w)2(6TVxr>Q(qb20F|v}vF0ZLV__%+1j(xr=fD0jxby zk^dojoU;C-^qwu50$33H3PNtzKieGed^~c@IzY*2K?%q}a};8&dhVSB__NBtcZ>me z9w75~fAHQfH`>U@j<>xEmU9Vv3F8mUV?fa%`P;|Z#5Z4`A+=(7w%_&S^55KFV5Pt+ ziik^y!zSb+g|BN^^zV-yy`PIdIDSWt1POK?UWpg_=jtcB3$0fB%M93+n#;Pub7>A= z7=&5bOM3{eh>4{Eb++qN#7Q%RXfBpgNw4I9NoGLmMA_gtUtHasS6%+0sfFEjH>FLp zudhQ4Ua!f12vPP1nSKb^*%=Ya!qvNv`Wm<8GiDxVV~wiuh1-b^s;`1=3Q8!znh4@N z{OSG|ciOY0U{i5PkCnB$#g(%JKlxT3>#!Dpc5JxrMhYhxYZakaGL zo#n><00oRA2nUt9(7`s^P_z#GVvg`)e^|3bf%x=3Ggcy5H>L=G_aNUWopXzQODRg1 zeLc1jn`9rR4gTRvlKsaw^;t~y>P6+|ePW=fNC_!5-70b3E=g{({CDcVkH$AylK+M8 zMf~;ncj`U*-@yNcar=jL{Vy>nq*U#{MRqmBSmO^hsG|MC%KEf(ll`)KWQ3{nC!KIg zK<(<05vT@8@T=YYl>zB;#4CAhyA+$8((*+$x$Ph~nqtLe6eeutTfSPAgctrazq*Pn z1CBKXOlnB2Efv$E%qRA*aozo`xF-PbS9TcukZv)c{fh1n^R^}JeP{6OOW-=LV0r62~5Jp zl=F@oe3P8czun5x6-0-A6LF`;B=ktIz8kR*2{EJK)!{W&n$$m0D#P<$&zUcc{We20U*bI*qKCa7h6;cKms8!sp}#K27Qu;hYejYeRKF8Zl$L^L zYhN20>y7mkrkAbY{~6Q$y##>_8|BJ0>1557YE$c6vW1{_&g=-V+}I*FFlaAs97!?g z^_!d6kQiUb4#vu#CVJcE0iAh1w(N!Eoj*-!^2&7Qeo<*sljolVOSG5NY$VLp&LraJ z*R3TOmvGQP5k$Avm4P1Ku^WNcwIdA+fge5lCWHJBpxkqQ2Y!>_JTQN#k~HQsXMfnHfc;(B_a=A>iqL*((Q(>$uPf;&v?zQ4&SyZH$fV4sc=}B`EY40H7V#~Hj(Qn$*!C2FtaJxL*7|WFSXLh zWYRitb^>3g;J|44XFQKMRn}rc^=D^u4jv zU!we$NrH!ErJQxyGl~IbkKx=qvknPV8A!jfxYF7!iclxdae)8KfS8mm*=ULa`t5xv zx9Pq1$@z^3L}l^H0bHMBgT3lpCp>)BTUaH3?leYUd3k@E?}5-JZk4c}ll*XOK~BAt zRH?M*&3%9SR!(k`-IyIW!yQ@kd&bjc^@kz;I(7^%lJDqt_zdemsSb# zf60)In?xgLeTQ;LnM=SAU_)JDOL1D@*Kz+P`kf*!cI#s}=Jxz&sAWNt5b0zN8Pi;y zs?e$O!gqI5Xa4;QkMsMIK1o4`i)E(wS5nB-8(Y11O6ID>#MY}!kLRvC3|BdJ?95f- zu2l`@wn~42g+FS!*zz@1yek zjgG#AqV%zF+)sej^Y>Yy!d&!)51Wx}4d>ZE^cuV|+ zs`(Ea+P}L0mH1B_+rOI;LJUcB`G>guPY_a|MdTc|+_Z~~RlStd(A{uJeR>UN%_VJo zg#YJp?Msb#kA0!<=g=h`9d#&F=_wLAh2@%>-Zb;gAIWxv={m%nU)D#?1Bln+B%4SV z+OtKw$zpA96;KPV<4)vPM1Lf_`-b{jnb<)3?dQ<1R49yOZwmh2i1yln*q{Z4k>Y=Y z&Ldxf@ZMl*<%(9Hp8B%N$pv`uD;N0@#+aP3kyxy=#(FPrkk7~34$elf!XoSJ1St8Y zGjPM_M+p~OE-8R16S(2M%q7-b#?)3oikwd9a(IEt5^MjKn2^COEsqxn#LF*?>MqW; z1yiPROLzXE0J31nv0!xkQsH#U&ES@k|D!@I|G6Yq(K%tr=>{r87JPzKIh`<`#w#XQ z7ge9uWOefkD<+lI_lip|K&tLwYCfmLj23D6|BIPfN&OQ9t^KF|XN=wcOQbiBGB4Kt zdpt~ppZzrvpPuwlhn?k?gQ^z;Hot&!WR}e}1G#8oY!akb$uudWHP}6QfK~*m=eHgEFp9kXqw?$H` z%qf}Y14`?+1gr>~*_lv%&NT+f+i`iUH#DUW z9)+9@vIHC<6Yyb?=JWmVCR-X+JLrp(XJ8d8nc*WyMHALuf|Sophi~-RN-@Rb;+JvZ zAq@slxw;Z`*XQdacjKsr(pa6Tpwmb9p+qK#x8-_+g63C#iX)U!S?;{*vYzq z(!x+=)9wO5l4C|TfpFsxMdm1BVJV%ndcp`)kMtP1}I0Jdg+-dsdMVQKOOl;yK6oB9m%Zm>D67@TD|# zp5O64{LbV1VgK{3tYu}wx{0(Mb3W&HrL@mfas}uV%3<+Ty@UUg`7UzKowy-3#G2G- zKlDY+2q~xdKg2&6_K@K~=a%%ZDhpiI95YWT8u!Cz7b3jo>2WdI9qztLpX?`vcarwwi zE)xKIP=(8#z<3HD58T9zer5W39>7{8SI=yR!iM<{!h*CVULh9bxEH{o4g8Ky{(Y?$ z`wo@88p#Bq4dOZFvF4Vf3)ugL_$8)!e#LaSQdx$qMZJ z|IrZw)aeeDabJ(iXbM0}wuQ_y)U$uoio&^yzd{-I&fT65p@dR3?3v>4hu0ZbKK`=P z0vbi%qa*5gt%n@;?U`oyOIRU-muV3Kyr$PX#*H$pK0u2fg{|M$`>B;e#!B%t7G}of zEwGcEb>!u7V=&GwL>(#ozbc{}M|nNzX-)BH zE=uci(o0gIJXCfRWG}{qrg+pBW6K{M=S7rT8vL*Re+DhT;3p$r;wg^ua9r%yfD-dHYF7lNx0IH8{_*=+AlT@?|~UE&TaQ*#BJA z)_)|fcYa^*bklA~p?Z>0=fe|)x-eh*I7e#r9@! zGc$&QU!Cj~<2o-fos3;9k_7{Z6LAtmBnS{y6E2X7wN5ssD3j;U zz!Uu!nqM@sVFBz&!EJV&o6(OS9NHVDo;K-Z<2cx*RvO8htE7ZW*!=@v^g;igUo>ok zi7A`XviAAp%}Vh)#Zna@(%JHtdW`qoIakn~@5zxCY zfVTu5&-!jalAB--!~`}-;qcR&6x4Je2~iP)s2Dgx40G??yTr#4*!}dXP%iu;v#_k* zwi}S_l0lFVL!2g+w6#b!flQK&+&Z><^I85|v#R8q_bKoFw`0>HwCJO_x!#pj>M6x_ zkRe3x)ssS}YBJ1?+y#5{&D^&FU)>ExKUFSt-sC*20$bh{6^4IxZ+U0FME?f7N1RpH zj^7C?b%j{|;rMSGN<1D;$#OZY*O!Z8f_%DfStrE=Np#D9B^Ic51S! z5h+IRE%2m)%O516P+iKrdFU9!6z#=>EE|&S4k2Pm6}`mA;n+ z!nxtx;xz}HPBhsO=Np=Dth-e@YiX>Y9jE4)>Sf?7#|BsC{Ys8YR$EcPDTi_>CpS(e zXtS8**jjNWFi&e}-7NC~1raTtGD)2`S=d>!!Zy~iB>A}r2gD5#SM+N1*fXw}h}wLT zt<$P^4P}L8pabGgs7=jwmaE6==;%+56MDgK$1n>P&kcSO&=Vk;6T>Kb! zeWvpjxLboP6fpBSpM5?Z=2*r{rANTstNCHqN^6@p{6^vq)99sX`AhrT1}G~2m#_b@ z=11&b6#qu^k1YMSGon{Oah)48Osl5Zdc=>n1VzMPM6yq-ZI(^M*faBwwQ#-agmgsR z3ykUfGXThcPM@&MO69Qtr`1;pS9A6@{8P^0dp&S*?eR1PsB`Ja&T1LW%cikH3s}`^ zg!41%F@!<1g73~B)G-&lS~z;hKZhxSzXyuUorm0BDjrQe@dk4`2^OM%(IhGK1}=u2Iy>H2lNlh0#EePTloo>ee#)F!ZHOdPD2jpJ z4K0A*MzbC2Zp*fc%-^8uoIL&E&AnP>02S0BDa}xcm=yj>?JKEQ_WTYGv>6%C`UGT`s2uE*-pstrc)|9&)5zo@tl_jw$yd|GsQz6b|C!S&l`V60rR zp##64f%J}xMRy)Suzu=_ZtSj1iB9~sA9C}yvn!MJ+(rWb6yMG?jQWMrrl7l?Mp==4 z)^g7kT~nXE~+Ph}0|m#-Gts##kNEZB1&Z)}c5#^_J_nD!&yDDA((LAO)Y2fDrfo;vfO z)@eSdD}Q6C-AP$ursnzj`*pWo?O{7OQAsR0PiiBkI7EI87@^n=TrGy zvp^;Qi9y1TF_?s2(2hhFfo!GSIQeOM9jYyGmKQaq9=XaEL#w-vc|gY&QWsD+nggSJ zxeCV@%^Pc`Hu8PS1%G_*>PTp^;`5mjW3P!>9~lgbJ##%g{Zprrt(Y0AU-TL&zsvw4XhNhx_(A7_n{w2;1}ZXFd(TTzKDI-y_c%SZblnXD9( zY|Sgv-$fVT~?&7It+TNUC@j1fvt(ts9{c@N3K8P6IqetnyZI`J6J{*gJ zwN9W@hbKEMt~S$!hBe@VgU)epV71kjl}EZFREu@s3fFPLvN?76%XgC61=4cS4qB#= zah$OAWL}iZD0gva%gt9_8r1!zx#&TCqJt}nFEbyEl@>=widD*o8T)O!*~+!&IsFFI zJ7Up91p0#IXA=(x@074IvH0+LyKZv&cN0$<5%lnwHlLIRwKW8|e}?1d%Devj>34#| z?30>D^7I3OED!Doz9$VnK)CUW^9S&7kRSn|Q0g5rH)D=pKkyF{QS?9Z4+6{y}f|FRtbM6NpC2yQGN|T8RMX zE9EH4N#7zP?S+Rv{T?rZNYGl8d!$RhyNJe!BtPQgVqcwvsisd9#-9Yi`n(}ZT$Ht{ zAd~!^;$1yxjSB~SHw$xsF%S@d^qf#SP&FFY;!KA=z>`I%+@M(Avb(nAM0;~Gq-;m zOC9cr4F;Ruw>jSmZnQb?sc9=aL6+HxAWp9vN(Nrj5i|ou0Zxt>c=3m5DtJ3l3~EC@ zE|OEDnxpR&XWgt-u%1ROb49QnZ}hoWC+gM?74i7GpLNJ@GB2mq&O0G1`ur8cl@qsr ztK?TUaI2QXKVikeKc`O1VL)a%xK)cW3#q+?eidh_h}M%nvs|7p?8c;eK^UdEp1u?f zw-mm!ocBvDiq^w=vbTQNT42z}nXWjfj0A98UyB`n9YZ7{!tEirStyE3BY4c|cLIRh zb`52lS^5h2#G3eIE8HW}9^24RAPbkG(@Mz1<+vH#=bDy{H*t5wka6%lBGR_niclbz zr9PC#{(<>X1Wa}tSfx_K&4ZnC#MG>ymxJYy++aRQjF4bChFm`-Hp(Cu%ox+|0kPQo z2~3LiVFuSiybUf=V_YpNXI1%^Bi9aHKa3GS^%ae}8Jmub#-oA(WuKq6yG&e~7P{-#v z!E7fmmY0yLzoFFx#==+q44f8xIH>~Z{HvFM7zCUEPumCw_k8O&8r8;gQa zdnd(Jb%BqV;7{DI3-Dtr8i3jrkW~SkwEL@1!$g)FU*V-|q!$3}GEeNYNvf4=2pmD4 zfjVT?Pc~XsHbAa#_iQf6`qMRnfO;7~sL`t04D>QikkOuabZvhPl7EIYbXl?e*D<>3 zpX=2~D>Dm5-3ql{`?PpUGc6UsRY%Uk7?5NH3E!B{!IW})H~&$`#c0`>+BO3=M$ z(fA%ntXU(nQG54i(OYZrUm#QUUSR7d^B57@=OVf)0Y=>!tcr)^nnuR)GbYGv=P2`x zB%LPtL@o@|21BT&FdD$Oj0~sCxx77TTzIgns5ey8!PZC(`7IO6O<0`^3{&{D&Z;PEQ4_(=Kuc!Uz0hI6l`jWo;(SYfz6~|6CORyrv%tg7%!q*1@YQ9O#S!Wiw@=KTR3 zq;-PPj@4D-(MwJF!tWK~MTFj?NdvV!12r8&UKM|p=#op-RkgsM+1;|8y`Y8ilp z(?|_@+DdvuY{{K;f0i2elB0;Es;}U%ghJv{D$}aGs=)0MNHr**->ZgPUrRod5Kb$& zw1TKZeutWCjy>Hs?|Q_bIb8u->XY961>8c?gVz~(Fm$2(0s3v8JeikpkyctMWI-h1 zpcfa9MQ7Bdn79<3qHSVLuE)=&nja>+S@VixCFYTJf{iNk6EcPa^BQF7#i}y6eFwX% zOcS~NqYi?3^7>;5PXc4^+vJoOvO;Dq3K{}RPVa5SXEHF%g}+O=&s+?~ZLgtGK~Bf? z@?Qj1IeRlrbit+63k3t^hIh}Ftqpj?HXC;|cfRl0IR=SuDP^MQ=Axh?pWkO96$bO zZ~srrkYDLxG|-z%eM$8K5#_s)j1Bm4{?*g4INIbQAGL`TKWeMpDHG4h^r;a982B^p zi=+4<3Rj)#z5BuiScx$3c|N7`vsi(LdplKziu$eq^cBtfR}DlMAgt~NF~|3mLETbb zi4HQC=aI~T?$Ej}TtW?`q5U)m1sOL`k1D2P-Z@(}>(&UlCXtnk;dEhN1u5RjXzPZW z`FZxiO@6$R404e-4^;NcUY&5?L4EgyEhaMMv2}~JnT|t(@SE0n4NBP-C%HH@#WM6h zDpLBoly~iPO?p;TyRoH)jX6mGyZ)J~k5_WWc3twH_e z@Awd64$)5ml=dR%M53`cIq!&uTu~GQK8U>&u|X#a`;gN%)k=x%@pyw6cioIrMS@Ai zm)UH44$I7dwb`|I?! zu~E*uE;HPDKrRyRMo689jTM1w-vl!6hU8GhA=DUWTzK<4^h8(r6^ewmu|ia_LovUO z8}X@wcH%oLkEeFDz&oPFk=)WSDdtB}V(S|62UVB5^ZkI;J2@XEcgW5!#XTOyqTuj= zUQCs)IA7&HGF$LhP!!& znKq9*qeZWXi(dS}wpW&Sa_9T#o_G}AcqiJ?Xj+bWnMl|2>13W{p41-)xfrqRABUriK5atB z90i{BJJGQ98*w!Ij{N}7WAtNoB9h)#*#Yk*^386zQ2qW;eb|SYL&hj3O;#c-*#R*$ z`-uRZe~QcGn>ldJHjS~E%i>y%i;@V1mJL15wMZ?Ib-V17Ig66vHY9Zasw^wDA>_MW zTS%bL$M*4cOeA;~?qbQ5ob>UP5R69m%lq7qW%7GJlioeTmoM|Ymdmejog+o{K#6@v z*kIp!9E>>C1Cbq6x{|rzafTWBj+z!S=JEH17RpY;xclwq7D!jX z`)choD#{yfm zYxnZ)+sR5qt^8BD`6w+Md**UexL~8?vljE}Yy8C+EJ}SmJ$s?b|BaZg$tk8DytvXlDZ7qi6w5aTaqN&g|97j%;ERZ6`eQ}X^TQS8n#_9=zqv0l=L zZc_hWsQx{%-sVp(ZJ+5H4<^}%8KXf9qYUSE)(lfwbu!iAqi7qm zw=9!=pz3>);!v`DA}k5bN+Q;%@}hB0*s=y#=nXuj;65&cFQS9voSgSR+4eU#$=6eUiHcBH9^eI3gcL0!3^yt|p_*XDKAo&1;F2 z5)QX`W6$PS*(*XRj2K5eK*(_YMqgk8Iq!DUeRY<&udv_H&}m>*+bfehLAD5$Ul^(R zXVh5D%)@8%bNG-BV?*mNc2}mfUWCvtJWcO7*~Xo6c@O*E(7_U4r3*i-fVR(UuFl+f zynP;yR8N+%x~}b5zF~bD3IBahc*8$npl8C!!2HMXep?LYoY>!O`JX~;SKEK*|F7l~ zuMeICCXAIho&;}KVIkcA9}G)>V&2>Y-A*4CXNkc$D7`r!W|k4>S^9S6Ov+YmvU!C5 zO<&O;r{zn<{R3Dc@YXbp%$+0;Ng4m1T)HAk2R9D+Al3UKFk$=wo`n-Vj%zgg3;fk* zDp)1h%lJygWb1j?R;wWC2`q6jkMd320W$Qs>6kvA5zlxlWwZV`3PR9yw;l&IcKuEy zPuQ zSeb~BnGaI;g)q0Irb-mj^26MFDYHeir4H1^c7k{XWW34&mT+U}Yg&v8n<^K9i3dfA zyvm}W4_=k^J55$xd=d`fE6?b=+8zx?HDzxkY7K+MZ3Fpa=fugESKZjm$s1qoUUOYT2d5BO zq*$5$5Uar6xEh3Vj0akB-j%QKa#YqH%BWGL2c_n1Vt-C9w+A@Veo{x1JD{p0>Ncr! zZaJ!=ipOS%o%Sjgn_%fLpZI85C8N}G6dw(flgEmk7Z(S3CDYJN711~}!-EykxX|7} zeYKl(UMtFg{z`*t;8;#E2MZpf?AZCcki&2$us7ql^KtR^fZ2a^TGBb&CEb!#dwj7) zFp{!(78WUg-9BLmOA0?dMT0qx7dyGFB8yElPU5gj(%De+mSjGVe6KY2pgTW`G+d63 z_LCHTq|DOIEH-g_;L6}if>gV*K;ozJXLOY>iL)*&aR6w@(`|~sr|PLoZ3USAz=xr=vhm8kgrXro4&#Hs!*G@I6$xh!7 z&Ba3EvzJDL^_}OVy%Xz?JZ~a9sg2TxW4+d!N)Z$5v5!>VgNEaR)G1)VTL*}c`;i|< zujxYL7{tQWqyv?xx}^A+SSyu`65Kmz^y({rly0cHPQRlQ7#zj_w|nf7-Ad9I;9n=}z2y2hK(EbjBD5Z5mqSOi4xj=42binvKHD zk&4cIW1O2*r%-rXP+OjUb>=&sz1To$c?yvDoRmC0==zL>t*ZKpWFL_gI#=UaqQu+&#z*&YC%P@>hgXqAcZFQ*kYUb{Bn*6|L#G*XiU= z+f(d+U5W$?X9!_8Vdo%cNp|hDx!026vMELx^l{Y}yd>nh4ZN9PE8AeU#Z7dsWxV4m zet^CP)QaKqM$Oiei-u)CPnlC8N*!+wAHLOOZ)`C(Y?L$)57wUjxptYg^c7&t7 zMj);lQEdg9xwE|n4_8?_?hIt?mm;`6{^!D=;o)Z06_zZ&^e+vnHKW6~+6hI~SJ$6y zRJMLqUDB2fq20riQD92T(I%v6P;yl(*c)YU_6QG#2F9Tw{H=qWq5>)&4LFpyQboq5 zMQ~hoP}9)pTUm3!jed6yZhvk1BMGo)6|XpfrB>sziCSgKW|uwd)K^H?tWSew9eSpx&b8Q+Sf& zl^=ekx-#uStG~uKqwW?R*w!z+VoY>g9doTQ;6b~|hk1sN@P9MMxAjAc{rL-u;!pW| zioZ}>+b^W@f6Cue|AiX<_0oroO}?bmYuC7I*Oiytd#QpNvAxq2kj7ek`oDmjBHT_z)r5juB4PBF{ zPNYp{QW{{D7*mc~qbl4WJ)j0RPyM$>%K)p$nDUhuFq?3L_}_xTh%Y4VFFb#R{0;du z&P!5v5lG&dck_@aY$EN}KT#a5p(_PKqX_xtw1MS*&~T)+&uP)WwsFqJWtbCJf{PPl zf>#oYk8!3+fXHc2rbgsBHq7P?Z z>toQxX=Oy;BaARs3cWSX5o%Dqy1CyHnOC=?_O7qF!HC z2Lyy71CFW>3#HK2FJHdVD!@3&O&NMs)6P!(?wfVfpRl}V7FbC0qQc`L-)4IoYdY)L zkFPBr?<@w<{UG1+s*h3UT}8A!@QMigRrpb*cMeA;VUKmyp`~}?V)`0`O(j5`^^zxz zx$E5DO^(^86&WXEmEcB)=-$iAudKm#u>uv~#?Un4CwaohOo>Z4vCHM6uu~u5YTq+G zWOwr=6CVfRiDRE@{d}Jr+lOn0{qYXDNYqQcl$4bpjqd3~9Bv0uBG=_!;Z4UKrc24> zT@m{9hyHo2T}nw-YW7_Dm-jjvDaWH6W&YTBGNZmao=0wo{0!yJ$%|w%LwS(LI^-;o z@F49X78;>FRhc9RrPtgJD2~xZ>I%J=I&9IZBQEl+&pV!hO?Ex(0fZzg3@!16*{3X} zbTUPmTo~!EN-*CISTzh$b~Q?|t7a1%^7&aM-nGw{7@ade(ByVA)W+Q^4F;&WA>NuZ zjBq4OZO)h!FRvymbT(gmKIRHW?igNT<#Ch$I@+_8EAvU$=qwv6I`}RH861^I_@W5n zkQzNgI`|)FO^Z9gsV28S5UXub{9l;V|Fm6WNO82`EJ+Tu;yri48AcO5zp3;drL2^F{C-@uLY zIG)#x9a(X?6SO(}a&W9`?jyP~DL4-5nb4yXw$#RiNV|4BsFNCqL>3a8%!6?NC>iXq zw^$M=m0fnVL>O^wI(DO`hG%PX$nx(bN;XSsmddM3BEnQn$+mg}x*Xpv?0u-4A~G)& z8Gn)s&RU+NO#?QdcwZm7_}rZ%``m1-X3V{FsA~$foqy-9eEJ?osJO*CV4rmGDw7^( z4b+$*e4hNeQzxI$NrjRtIZZ80&XaJMWp;lkme9l@9>uv#|1+&qs#xnd~Xn z*JbGp>>cWp`(z=1U#R$8cUtFJc=lM#8@XvAf2+Q(pLr$_`h1(%A$VWS>q{Z>Slx61+Y z6xZuJY6cp_DdpKd1LtWDp-3lBb1b%5*yhPe{tj&I`{y0l%M%)W)AhyBP6z3>JVjl4 zy?Yl#S9Y53mwOz^y*{w^PY=HY^rnmAv7J`1orH5owR7dnK~j<2#fm%SiWIEiHa2j8 zcsi))95E8Ws&vS%geYFJEMC$j$%b7lPBLvnGHsBzV4a5@p^_U57!wEQn>7+Zx9XV1 ziXAIjCO#`wc0S(=ta?7M1tTPX(gc0;e(dYge?FN#J5X3-Ru12m?$FtkG0%Paq;g1y zjG;DuS9DX|$xo?B&E7s14mj#AK1gwJQ_eRW+;~gBWACD6DQQu6C96v7_6d|4E{G^J z9Ym%LOHa?%F!ouMYh!=Q++|*$uK#xdxO-+cth{nTJ~^~Z0{X7i0oBQ1(3m)RBLKUt zU9a`JSEME^K{}nR5^6bz#a3A{^J$cd&y(}|hCgiwo{kn;yND{gCa_ma5l1QCPzo4m z2RC096tf5zQ~Uin=I6H7MQ;ywTG+fPS?;lgn(+O@c+PP%L;g>z`(32FCu%eg5nFGp z)KC1~eT6fpWV+W2WC9g1NoNIQ&!^F=PdE3gk2i7P=y6wh+3yyqj_6&8XeBuda}HDPSI#-IS>KaauzT4#>*s{Jc71OAh7({3doGd#(9 zG?|7_9ZzcyL_RH2$?qUOc5yb|L9J)1A{NE*y(wWVR$eO7=Z}sLGo9PO!e7*XZQ+tA%zqFFtHl11*u(v*)^4>FIRDrz$S_n*9re}p zd|4lMsN|ErFE(K_Io#(#y!ORVmEBh~do|ox$9`}6O=)BM>+uSbAZoQSs zt)Z<~iB@n>DY;Y(Ka@??4F(#nbH4rSG=Yk;a#+zmoPdux$MUSzXN{Ux^fp`6P~Pht zWaZa4#+JD9t`9VW`l(^L>|7mZhy~2ou}S!;hYvR9_* z%sPoSIl|SJ2JyaDGjgA+0!R`&nKfYNy5@OVC^w`8>-`>6U#p-x328F~##pzj9qJgo z8e@umbv~=lZVQ7Ku{!?>W5bIV`k0hnsCF)&Uv-t7>D5#EyV6;SF#}qyycsa}kIhKT z;z*oavw*MdIQBIDA0#z{i?l3;5dE!Stk^x@Sdx&>HP3f({&MyxbJIn*d#zciP{m-r z|04+5>V`MHOJLa~!;R4i<<|A0xxc;+&U)IY{1M=B6ISvOsI~q4G)wS&b=V1c8&IbA z-3E(Yc$sx>>M*kaRv*2#Al3@w8Q1rNA@f<^BtohEU9qGz`&kso zg>aAOJcOqdP4NkT(h~mUt=AGz>3n0DqeYS@!~_d%`hh`9c3%zavcwT>hn~ISywZS? zyo#N8p`=#_*EA+Q@sP>*`cCMgQSNlv(F=j4)9`v9iahn(ICAYlHRCovrnqRKITHbb z=?CNNGGkiu_Yn(IrqO}h?JJ0iri_xZ2S9b7Jskz*Moz=kil|?!R3C$9zLCHR<-Wce zVKsu;%s>cfF$?@291D;;oEbv_w=#>`IbFPT+XMlzNw6$2X`46;g0-!v;dNDo4H z{v3l`Fe4%0Lx9D(*Y!B`o&0W7h;(xb%O} zsbNV2`f0WMXdna94n>+h{r4Xy?7!)k<1`#*$5b+(MtZBWk7dRK`g>`7)W4e9WhiEP z@$9<5o;~!-6w(DB!i&mSssCO}^7=MgS?I~hklKEfr1PwQR&Spe3WV}8Q)%caQl{6t z<+*%FD|~uBuNdoSHhJQSIo|<39jh;q^Nch%8`0^NmpxwwA7@hT6{ss%ahy;2Q`cOx z3&50@n)vV?c1MvPB7>SzyjYklPpXhBmw&b^$R%p~`zsw8W$Zt3!+Ya_kcbAID(T4@z1HoY zq!B8>vW+=V=SiBU1gnoHhw&F{ssyhogZJVA6j&11-%%VjZ=B4BOVht{IwiK>nI*FU zd~|y(UKjR9luGJis!w2rCDdq@`B)d~x1;7?xU>^bb0?KyG^asXR<*|$wY!!!q_O9E zNZ(NvgC|2yPqCdS2%EtfzULOfM+Q~^1F2;!S^Acp1h%rU_BpHmhblhwO#Lni21*mW ze7PJXS~vFHNTc>OK2@uTcC2(ThK#fXJwLOae{{<15eYaB+EhtG%5tKp8Fe^=Ldf)9 zei=oX)x(nyV>;oilHx(_y01oU8R&1vH|uK(-QQna-Jy4nq|&i5ne9Nc+I+cbGR@Pt z{fi)R6D!Q6=xHg;#md`%`e;sz!^iPeCj-s0FSknx*s2(6N3A)Y?Pv*}!zT|U=*2@{ zuSx1dro9YrsXaf$?o+qr0jtZiS^^lGEm{anajwouFEYa_neWwd&WY14Go~n+3&eKL z_R}rW$10f(TyV;^PcPD@D47XOamq1DFH+x8OKY*V|Gu8-nO`W_!hxBCWYxo)J$Eqr zJF_BB{gY&x0xkB05FuUCn@4Fx+RpE9FhQN&V0DFicxrvaWtt-QK(@-Pbqr9eA3$AU zAD&uQD4nLr9-6Hps~ZE<=m%C)ScIq17Sg3D0zk8sXXRjkYW)Ce3d8W!nnHLqWk%3! zWm$e0ph`cmszNI~wYtzUb&(b{TWOXN2B_2zpsG*`PpvAHPFQWa;L$eio<`ZMs8wV~a5^*@k;P4DY;$5@~*&GnMIR4RIeBKoD%Nj%+Y6FoF z4Ys-3e`)Ro@lX6_AAEDQuuWN8G7gRYP9Ogu^K8J9M)MzA3=R#)OJHIu4$U9je~Cr< z56ZHorMU^^2AVmQ^o0b_8#|p8SMw>b)ugJ` zdD7`FUpl;JE>}lnZSa;iXXa&*7Er2kQ+*; zl^S8c5JtqIIUtK^A0N16@}ET;n=?WVx0qDk0a^S_a%B5>*ych1rA?v#-fZXa;@{XN zm$#4K`6ZjN`JaVK`*`SO6QXGKaasIba%9JN*hlj$2=xZu9}VKmCKzPl&>Vm13iR@( zug#g@pX3lcBsm1%GU)f`K#n)bht-=057|mQv&r?#1}MO%fdJ2H%*>)5to@TvYR_yK z{h}XO;Nw8BNA{IoQ5yyLD73^QXFH>)i2{6hNDg@{xJ21jdXC-7Ld}&!&*jYLLX=M9{k(U>q zLB-A1l#oHe(99GbQrnx_I1(~J+)D5aN~R7#CwpU42SNyr5c0#IU=K7_HgzP_W>63n zCuC4Db#)|Ukg|rviu|J$*8K}94utS9zwi+9^TRX9nwnS`3IkmUwHYBcPF7|@HZFEu zcm@#&43g1-kmXNG2=pJ_W{2o6-R9*bWcX}qW9Dd1$nl4bLEOU1(bS%hLEOsF(Nxsb z7-(YplHwmn?YdCcz8GgZXoq(*S~(ywC~n^O=*O`n>i1UYv$`=WJ2?yXyNeh))z?aB z37_wBZ-==Sy_);aM!?)|C2;}OrE1m!NBHjh zGV%_;7JVERidWy7X%nDWofnvl^3iwAUy*6Zcu;A8Z3mHqdVbt@hG1L%lK8M|?3a7s z_12f4ylF_|kIJ?Dz#RvZ8QKw1^>EWEu%$h%`%K|P>2n+V{3~;dyZ0e~U#&~vaeI&9 z`KopG`3U*>RNm*|d}?H`G^KBfu%elcoX<^J=Hn<{Ir+)eD<;jWqo<-`L-I{ z#w~1=*k-o=edsJ5hC4hf_>y&&uJZt@2!1F`WlXggsCuWh=-PC#HI-jkA3oYqdA1zm z%9r=PKFVEMd;cJ!0>+C}or%s*w1z|6y4Hjy%$;w7T`Kw!r>AUoi6Bbz(Q(9`ZUvry zNdZVf|AFqgRotU3)+D!M`C>7p6WF zhq_R8j>VdZqfXwk1@gKh#3U7j0@IzThWCkt#pT^~=HW~TTpBJQ4f{5?#i85nwV&Ap zE^%J;g^k`#2D!gi4VEcNb!{{1oV$cSJ;6-DHUCuds|wom17R&Iu&-en0);dj>Po>p zAC-#g_q&~7Rq3z+bWL^!(PY#@iI`O#xc7;%@6wsviAi^J58fKV^OF}?{nhCFX<&%o zaAleK0lTENw1BeG3uM-5qCc`puRg!VF8dHyuu*XqTkw-!rS5jdYO`9YGc2Nx9~sL+ zoT>tUA;Mbcb5EC;sLp{AR?d%I(fuB}53fS%9Xa3SKyI`yQ<-A=*Dt8w5Wi-8@-?S? zH1A`q@b>y~#Y~fH?u1`60U%P)fIR&zpHN*Xeaa9INt%MmP6eZlY|E84t>0F2?z-+HcSq4j)O0}W?T>!WJkRcFU( zoY{sv+QnTbZ zs?J+7mNyRuQ+DnLynN z_)~NC?%SJ^;B)NVI+Juk!)k4Tjvr^t$;%f~n7~Ar*Ab#d#_?~`@dLokgS$hUquiHk zMp^;4Gl=?WUQTH~-j(wD8+YUMUXOefvOnWq-A$;xSCr}d;I-%&!L(zIcE&bP z9v=rh!IqFy>d2UlPpYMd)iCPl+0icif}_34%B3IG7@xt=e=aqSWkn&TZ<|JX$aqMY z_Rx5n2Ob{hy}b=vl_0dQ^KkmjFSW?lh;q$@D7NEhv{OEVzP}gAZrFgg2kJ~HV zUD+vK;jf~|Ci8e@DZjr_EazHlbxXXZ-6DA-c^8D~@|o0oR|p)8Lh9rCHDPSDW8Sj4 z>^!oxwLN5y`nFVad-&Va(HLYnhHAF3^Z79|Q+nuHZ)*0En5*PH@hfeu{e+A4-(mZ6 zc!I9yFmqVu@D;_OOfF^)CdFFrUZJAEu zxj%wY7KZj@%nAZ#wa9ST=DfwgtVz7PAYKt9?+WkZEQ-9C{+#sI{2Nihss9@%%o4oM zsI7M)G#|18gTY7n?c{L5qgcy7h=Vsnn_Gs?DazYFIC#~@^IIohk;Zo1nj@yYR50+%ZfaQEOtIA`xX+NC8Y*klF}JVJ+aV+3S+9K6 z#?eBFOiEsLsZ76f7>pMpXR@oyeqHH~xVwGL20ZXq&$dfpP8xC0!UZrC)>H0=_l#eu zydEh5aOR2Q#kept9KbV|j#{boVA3#3wDT(QYQj|^kNS(OWGDZ^*GEDlvNP7#Q zxSr-w6i5gO9s-M#;O+r}TX1)FvEa@Icb5crcZY?=7hebjcUxS7J0xiE%kTTw{l9zf ztNVSg>Q(hQXKJKprss@wPtUX^S6lfV15tX9stN>&rwsCzjmKtH>44K$)#zaASg8v( zvH{t)?~B5QxDs&7NCgszYwE2Fy~4wrv@N&X>RKm(P1Vb5@fHnDJbsIsmQ{dsPfsb% zbmNm<)>UQKL2_s2EEba%jqI*TbSaa+I!N$Xe-uA0QVOQV%mcaF56r$uF3u@Fvt)E~X^iBl% zi;c2yxwp#URZ?`3IVis4t;la^{ahbN9J6oEdb=*^d-RR8PSWNIJ`Gf34pg%+%vB3B zps+Ad&CXYzd<(F7VKSrl*?J}c--B7>^^^Q?f3eeprS zWWSAfNvXXKw;7dOKQT}_mYt|o53HTI20)p~;n1JA8PwMCSoMe766boc0i7=#^fTQNA z{bpy{*(ToLTlM$yZR*7+RignJe~VX0J5gLP2yE>DZ`8B|b+gFLJJVCG%^Wz~}Z z(~cIMR2lUu1(fY8LC-dI#q7(7Y$OSEFG#THZDxK9kimTk$_{P1lF}D)?3gwnKke#? zr@nIBsajvGz&r)f0^FH+xf#ZEB zpF9q~&K#6qrT5^ztxnC5=pb!(j+y4=DRnj~otOmuXi+6oYVo&bY9i8zo@N=#lCGl|8W zf6_;jCO5+?tleRnyiACu{9G!lN;)@!8GlInslhba7xaX6p}{XjA_RfbF+ou@VG;R? z5F~S^yCP{KDbAq+l%Ww=s^z zVI7R#D6Ca=6uuja0G_E?NoxCG5^K^K*`++`MFAdlt@Y@JxpivMfQr*I8yGhoFZPWg z+!gKYl|fcn6=k*}_dXUGo8ODgG9+0VZKb1jxfRW8jacf`U8HSto&ZU{JS}eQs|Wb!mVa>zQpU5#^n8=qKCx)oGA;`pFi}&w|Z;mWzKjf9z84%X=%Ol zj5hGrd^OW}HBxG*6_`#iffo)8utrCMK-JTD?Z&XaIG4@o;aAT2HH%T6UQw>|aVYb? zOrt63`i24pl+7|MgGT67Ny3xm&<}{YF+bvwR(^3&kKX)LDs&Rl>jH+rl`3V$O*zTn zYN)U{n`p);lDu;4Pd3l7nUH4~dTzJQiU_w`Z1zA+NakxpSno#U9fn?q@5tc$XgXPC z>1ZHv3o3Jc3mSw#!+Q3@Y#jR;?v&eZ7}}jzKBAurmEa^IS@&BS;gXgQVq(6%v)(a4XbD%}E3B^zeu37?RL^`agxL6QmV> zB#_&V-$2OsYJ9oCRyB%k%97-uO}6lK2q5`dEWSO9KJNVvNl1q?Nsb_|0Yc)aT8J$G zrvUT2nzA-l5y)Ob*AlxRz=#<7k3J=RK`$3^_K#c4(;si5zwEJ5#)X;b%x>SP1F#25O((E za~n3>OxgAqPq$Y|z$xFQ@Phn=(jHSyBlgY-i@W-I--W1OSLVq}$LwsK1@S<+m zhT|OxvQPv-%4)v^IyOL6kpOT-nDEqD8N~pbGBn4@LUY(HkR!id14-RDA>Ti*jnCQfAtJ>#Sn|8 zwVc>61doAAefqhFjSnu<^r>P`E6MKon+|RdTWR?| z`{p-QBuOhq*+0+zVa8=|;rr0RA;HNY$1X#KCEgvVzbBRn?e`5kHEDzDP zRl}rsAhaaM(CfcKjjXpT?oW41??oTBRvoOc&>CNsI++N(vyW~=Uc}2visK2GuE)g0 z`^ol2D*!qP0o?_kysq;dEzfGqzYDZWtQTnI3YIfzi$k$n(nicrWLrftlC3l%F$#XS zD})8Lbl2PKMe9E3n|W*#s?1{4+EQcLb7ZzqP<*HV?or~neTxvf%K(2!{PoM|vcCG} z)mVoGQV6gY7pV0`MA6Mk8L!X`Bj7+2vEsf_RA23Ba?WzKggf3Gcy|9LL-UQxOI0At zMSkEfIV#^ja{iQV`-uWa%|r~@0Os+ro$e*()%;jKaSL{hwK>&D56^Q;R{q-bRyd$- ztHL2lAMAlCwMO=S>FIh{ba|EZscyyFJc*EVB#j8Pds$-U1=+iqwqduw86nqa4~te^ zvAjZJ4@(nio=6wvn4wpQ83IXLV*E5*Kl`HT0a*815o`%vO*lTHks<_= zv4rk0|94lZHuSvH4ms>S8nHFnn;FM~;Z2wg`pr(Vxd5if%u_zDd6h{e3(-<=y=W2N zZBwkzS^|WPBl&&({JexD{0psG;PJP&Z4kRL0a>t$m@(}oPIJY^wmJLRY44<}5K8`q zR1(4uGfyAyA9*hxcU0D%ZrnR>R!*M|r;T>o+AP6zgR_j@bytE%tqB)&XU4x zO(+B@ou+lz`kLfL zGDT9s_{WAlnb|!7y)<|wzYf@#m;9y<<<8=zzyeuBKob5Um0t&B>^UQZCI#Rh7^LOe zU0>ZVo!za?{kR64@e&`3W>O9c!ak(R@;B3&R>B8ZGGH_d^WlO&98|8}q&=3*gQxyf z84v`M4wj6_-EM>Hv7BTb#A<5>lIa0}mQtG__rZ75^n#KrN4>nzJ$v3W2Q?|aeFi!@ z;UD<=LO-;Ou9nMIL%z}5CKM);tTV=*5VC3t5lbukCvZyJ4c2?M$3++K7=iJ({2YnY z9WO}^tGJkD#sS5dY?m=76NI5H)tkSQtUERz_BK7($<`p6^UHymM^9f>W9BDI z$vr=E2@P3@k$ajQ3~=3!VAW5#!wyIDyFyU*t6uf(SEb^3VVHGe&pVO8?LG;A$))(p zV|j{vPBI8Z8${&d^7YqU{3PL5qe9@4;2_h0X)-koXnUI@zler#LDVQl7!lJ2PF9vU+2UGJQx$FSU}GqYMU zC=0&xIAn~BUDNn2S^ccQ(H6<~aPq9fvhsW{f9l%Px$x9X#QWqqek9QdY+Y{QrF}(t zq=8{yT5)7bE4o($2fYcY`O8N^LO=9CZ}JQ`|S))8C2RDCA%Bp-56hSwr7s6 z66H!H_GU~}WsMe!sTsU4rc$nLqNK}F&CSqQmX|B5#fNG%ae21?e4 zFYeUSZ-%BFPV1@VjjOO~IawDIs_bCYy8n{UMn=yo81ePfDkD~GvFH|m&*pX!=qt}H z_V!Zem4H;ig%?Cx{E%jLfdzZ9;va^Mp2h60{O@&FK)*@}%RR7wmr^Epl(q#jk(IoU zj<#Huw~STo8C3pbi6v*FJD8-+x8lb!-dDowSdbr2K@<>p#r(hC82yub*XX_dR`0tKM!eNuQ^UcdHygx9-O zf>GPJbJwDiAicNu5{GrC9E23)YNVWA)T?TY(SN$ZLrY)F$U8R;f};9-HNz~!X8J}} zdc`H7;(Ah?YGf>~m|{Q1jy4Bb9=f_uXBCW&wLv_*D{-|*ff1F>{v9dkO*j>kuFDd- zLsEA&_y9JwN}oXs2+MBV0a>NnmK77=B90~_W~b42Kip5fZOUnFxkOsP%$2|TvbKw= zAT}eh72;aJi@c=<&ep?JttW;{tquaqHg7PCGsK{#y&nYNccrqUB-2qBZ6^v zzgKbAOcD#ban}9eSJUQVEz{8zQ|fM|yc{`%#g1&NZox5#;1#wU$MKa{kVF0oe06DqgwcXg~ngFiYo$Z4$;4^JxySc3b=W4#V zwweOsvYA$mWbBuX*33HDiR3y`P>nj*u2)2#PVT_|w-2WscborM?cP~>9wOd9T|BBh zU35PFoMwOedsl7PtLkLbqguy$_uBuHRYuWyjF6STOv+{{+Guw|qNj473k3_y4vr_* z27oyAknwaN^UBkVzv7^bW|2I>Tr|Lzkv}msfs_+pW`l<&J70D`J3na|MY6V3?6*E~ z#2phR?Wr{8cHW0_KM{~APM`D6wKyFn;X(A{jE1Cc8Yc;mAKxc8qLax*yXnPVdZYogw zv3*3W3|V$D$ap>NXHb5hD=ps-GS=t~V?fCrJaTYIQ>kE8eR79GL}90n1WCd_WQ$|4 zhjykJxNqqhSm|HJj;3^=1DU?fTC9J3eYjUq<4`-VU#PjbIV`{pN(Z6G&2eymB1Ys| zRwEvfjCgkQ9GI@N6vlV_uwKS)ed?a9Z|)robwi6LxXrTeZOrRE#_9Z6)Oq16p1qix zKbpWjpWA5GN_0$etItd(_aQdGqjT;CK{LTwky(0(zph#sUA250JGdR zamLOVgdQ7S^NT<4n`49-?Bc^>9e)2|Mv^rsjbSreQYIMM^$ai5KX0L=XZ`qHoy zhAU+L$kSsReU_LZ&f5}oCIJ=8FN||1@fua>pDd$Ci^&$x)ZD2rEMyn)EH)~UFk*NW zZ2SWOlHsf#E2F^q(=O_0vT^zzpeK`p#IYi|sH&h?8M$nMTVAiwaaR7972NAAcipSY zzsv%EQVU-_;=g{YYfP3@J=Bt%EG@?JCUVS8dpwB}aGr3EPi%sERWESez|%}vMNC5< z3m0>cj2ZW4G_UBG`)-H0CRqUC&Ai67d70qG=(16Z254M)oBaYk!Mr|YNQn5E4=D1~ z4w?()MoLy078FQz|BA7k;d(rqFCytZpP9bDI+ETPBfRr$#$~61in$-8-^bC~-Q5Qh zEax7gX;Ck^Z!p{J0CE(~D&f%|<)ae1b_Yq>d`qdFB6bz|WHZ489%<3Zmat zPCD)TU%!b6b|NY`*n#FR<&J?FmY6Nk8P+3)$uit7WIr8>{Sof!{Y9ZegPb$W0AcP8`jx4=+upSpiR~J6h&~%7|A7euHHj;mt+MVTT|y|0q3GvstaWzvAh?UTP~Ey?!d(0@l{=F`q;jfy1q z0h-2yHbvNt_KyIdi&EIegC5bjFtha zptrb~b+@FxcDrDDax9snxf{e}~39cpo; z3{_D+Yk5d-j^cI{$!Ljtcvd|1mzuTFoLUUGseODFQ2183UVk*Zs^yQ2>IHr#tR3l| z5W+cpQFu)!7rU52HaT&|z?OD3kVJ10?F+u@QxTlopAlf?ZBZ*fEzimDmCyS~dWS4Tb+jVc`05q={LtSi zp(YZ&7H##uRL4Rv_B~4VBm=jhR-|uvSye#Uh?iweGV$wY)~?BjaLLjT<&bTG-gX}! zr{41Tz`{Ly56P4LPw5L4=G5S&sVON*b_AqU^w1IMa9nJlJMQ9pb=UTMkBRX^Ua!3a z!3=?6dV1{AAN86zD>mJN&Q1@xI57S>x* zd#o@pfZD%_*0sqxgkh!j|{pTCuRt|cDL{qJ`H_SjX)t<^cp~Wc&iKQlI^>;{0%aT zRc9a-MJku^&lC&>=>V3$3znlZtA2OnEp zeh*8fowrx9Ykp5{*D9SibN)V0E2p`?kDiC2Sa9c4>gnS}f2osuflS6)3AIFo4@t?T zGcLmbx($yA!Tw=6W)^h8@q?#@PVqp+biJjUGrGc%qph{JF74nVr5#R4Nv#rnv(}kn z)4YQ|ahe`e)EV7i*tru#>gu=!HReC8VJE z2`=EzkxTEp_-aoQ>d?19_}g88y7zg?hOzH4wT$S0PMb8vsHR_H<6Vo1ka?)SNjOU| zePo~_wF>?uHpB1K`fX;i5}#l0B?Z5fc0bd?6csDO`OIlQ1x-RrPT}DyZ@|bY#ZVE5 z>9o}Kqv=vvhPG-q3CK~2`-4L-D%9g07ud$C9MXF3}Ec z4L3|TFVvEa2KbqEs#bnT-+QNOsA1DpkUz_+4s|@{YjC^$kk}8+&&IwbkMo5N*4I)o z8{@DlP7ZDwa3gW?s50%cz`ZBDDNnt2Qx;vn^L->$7#jqI6t#sW2l3r5+F#P?yz%6h zCL-PPfzK_8`C4XR*Lsl(tHF`CyAl``zs(2Ubiu)jL!t9s>sF4QoWL4Slv#2O~$_P za??cM+wNV8N_^Eg{j7C-a?%Qih-JuDmwsSN405X(Si=^PA2Hn_x=q8 zm#tdJKv$5ALpJA8aQ@HC0B$!gMTeHi{&><2FM~y}{^io0AI#R{#l*H$4e zS}{PHZF(^erj~S>8iRNJJ=)RkU7ZLTDgXTV)&6h51hy~Qw5)bt{5)0NvpzM@qIeo4 zLexE7tPmXYY4}T%WIel5;fb4AIIV&uYjI7eT_XGChc)ql98}HmlVF3ra;hXJ#zd)? z+7>5`HBnX!XoHG3@>dk9`hm(v0j}+at-6-Qvr-+wv)00MzWDg@Lgh1I>XdSSU$CAW zGU#I)M17no(>(Ptd9lqfQmk#khUzk;+kB1WxyDsVy~AX#iqXaWRO9A(Gt%*6G~vvb z(aTiVTphlo`Hk9UpI55RUZ7BoCJ@&=xq(ELRa?-e%SIV02nwzL0b$l~smU|HWA?&| zw+lBX$d*N+PSCRL5>bJU;|``Q4qJXVi+jGgbz`oA$KeJ#7GR}l0L5Kup)`>QJEN0} zEV8MUg`h@egWP8%MGSyMoBs9Gm zPP@wtMhr#)esmSr3nQn<=~{Ju3OK8@u=DTk*&~+P^0DF9z-n^A!ahJ^51odTQOGl}EltPejOI(PBb9l16E_ z;@>CiMB6ytt8Fg(=_^Og2l><{2>*8jmX^qH zuKo@8Jy;rJb?@nfZD_lw+BFF=`I-)>Fd zF9u9tys6gbL@zO7-1f-Z@FHIcY@_ux*D=SEdxSYkbu?Yx6Za*5@U+ezA#wjj+b4yl z`hA%J|CwO~tprk+qq3hfA)^kC+R1m+d9m18XfW;PK!07LvzmrAHIphCm5QRkJs?28 zQVCzn(&w{Q$}nyl@w&-7!in1W%N04W(klPE>BaQj!lsiT*BLGaUXx=zkykdAD{AJ0 zL15iKq*yd7e65wH$}OeUzp{R!N-MMXI8E8I{OKi=vcE;?mYKsbd>qD0KT(WJFdlczOudVEZ-Qk`wIyyfaa(UnS*}`An*8 zT49QUV#3A=Qa$&Ny6SLVRuEPF*CG0{I?K#qKJ^kjxq}ZgK=s8qYjNQ&6xGA$+ep-4 z7u^6=D&3~DV^xvMThr~kgqW5FQ$x9H1o`<@;@awdy2euN_WGc(xs9MyWx%3PY1d-S zo%|%}V#|ve@1Yr9J6Uf!n$#0pY|YJEV@egQXBP-g727~*S)QLo23EbR3+#-SPXp&0)UwM zM=Pr*x+#I&w<u`Ex(KtdD@}Bs_z}XK3^(eE5m6Fo^A^}hj6)Z~A|bI|1ik-^XZACMdU z|DgMCyw48Sf5GuOC#ZUGDssFHb6B)>N7|o8CcWe7Y9H;}I&C)0R3GiON3{&kzV5zs z=ape5tJ$1SV&t3Wy{(S1>kg#)>QM%JRd+uPhf#aFnI2|;?mGZyu81(aiEhtTvRKLHH-abTO@Lm z{jzdI`+kP%_piV6z4bLg&dN1G^IZ}9H%HR7TOu$tQmIUT?`kzWEFsWW;;@DZoyT?_ zJhBv7b#u2z!^yMXN>G4L`xmcdI3N6uteb&inc9}Ju2lQ&9FyJ>wUi)68&*}8pWhvj zzu@GXbI4=Qolk2j^}&~$#We<*nVT;$4Ap~gU7cdexOct_@XIiGoql)zoSj8|utk>7 z%OZoD!Qy$jQ78ppCo`U1Y3k)KsG4s&+#t&z@B$lTQ9E=Nk#%_$(O_WdC|Ivq2WsnU zql83aP+E6Xq_i+ndli+<2Q+~J=QTBM+5PBC*UWM={Kvq#kFEmH)Zf1tz~ z3L`>G0Mu%jrD+Hwy_flQ9cR7O0871YD7j!3a13me4UD7Rs&J#_cq8c3JYIh-e$ zsc4Kd0MU&iW;uBaWBF3&aw_5oLT@IW31I#_UjCj{8`b{j*PRbLCv)0WlO=_2QwT}| zIN!&NwKD#o%Di0_v>0bP1LT3-de=z*3YDds*DHCY5x+IZG0A4kj|&!I7?C@l&nH~N z$W<-m$VkFc^yh;Nkn?9BeprZf`2En?S+nX3aepeHhdBH`>9ur_p0E#TUYpTghivF>K1fOFXO6-?AFBE z?flq`2HvQ7hjNw&M1!dvWe`1Y)3($D+9sq}=grw|9{%zMgA;wuOM9yr;{p0k>o_zw z;6E1^zO{!clKk7Rs3d~rS+A|U%In9z=&qp+u~_>W!F1PjFlMj$U!7L60}e4l;qeBE zC($Fax9vqfbyLSLfNO+uo!nXtW{1QAZ|vbaJ;%ahOf5yr{flD;t#;27Gyk zo^dr!EG>NR(G_ryeRemEfn5>y9>IP3=Y_P*SIBDazK52Z-q}hqo#NGHH^tGR)cZWVKI99fj*!uJS;@x|qVtupTNlFYaf>@WrroIkn&- zUt!O|UHlj@32D8D{hYw+$S=kroI%8V6VE(fUSGmaCNA=|J=WDR1_@* z?mSLl9sBGQvz}N^fa|%-NC1<9jeRCypWY!Kr?F~4=up4#xFOxN>y8i+Vi$hh?E5w3 z(;&|jnpTz3jX=%P9*DaJTvoG{RcY?l$YKBP{?i`!w_cL4UN3juN@Ly1YEpnL5nyS> zxHinVwgXY4`<@(dXdCuVjQ{U&Yxgf)&*=VdAjINU{}=hibZzx^t_#Zc2iDF7T|7P) z4lD8YK$iTnB3e?!1|zcvgvYeZxh-HW7u4bL1qu4Z`@#zA--0i1z%0kV1p9~r$W2A=(Tm%JLzTG?t-=5>}xh}pNkgnEv~T5-Rd$nx>>5Y9y{zF@4=}J zvKP7D=zYDO29RjgXju-^lOp;;o!(g0ZNXaI8p`-;kj!k|e?t!zvnlnQxhtRDu!F^w z6viS_8!-jHa7&#%SscIe{xr<=CYzrkbboKOnD1;TDi_;qt@SJ*=vA0&b%~{a4Lexd zvg9XW4XnNFQgc(7tT;O}zie;=z8cD0-fD%1d7A@GQLZ$1+Z**s^dZpV^p811BR4n4 zg~A3Yj}dlKbIKhjt}gc|Ku_xsQ$5E#v}A{6;;7 znH18mdV^SPIUez4`=eOf_;6asf|JXS9EZI$(?M4C`D;fUMOkY!u8O>@t^QLiWqcMZ zzNCfqyNKa@74MzWh!LIrJdMuoW^;pW87ZOo?-YXI}APY?lg^jHb4ZkWW zSdvsb@P^RjJg`_9-m)Nd3DD>M=tQ&9r zl{B03Fl4?*(5ZLDm0H`-(bjNX`}+uT&2`aM5awkpmsQ(f;?g+rp@oWsg%P#~s%knk z6^}RUv`>)7QH=B~0l1u20{Mz^Jc$KtC-I^!9%^V3AHD#8URcc%O>@bYd?H3quvI&$ zwfc!-BcV+H)`o?VzZ*6)3J3@)@+<+39A=bVJfAEjHbJhIVOSf860kI`;Iuvpu*L)b5g5ViV40!l<`Y0ul}0-$SX+?Lyr6B-%7Ev=`-Aj{&9Od$w6yf)0T7L+izR z&9?;%mc`hR z?@e2G>@2+LV`4Q+Zl@2PwxEUgSG>lx^qK_fo?>G>ZIWKB1q8JL3tL`KnPy76VVS~D znxp2Jv(zv--5Z8W*D30}!35hHK%4Ss)-Nb8X0J`gG0W%Z%4yH!bcvDhjcAi%HtTfW z343W{J$DynnZpEZr*m(#8Qm#)hV1#mk_3@soA07G^IwU2A7T+^{8f!l) z(htT=F4Ol;J zUCz@DUi2d9Cd?Qm)0itHn zZB#ql+22YV;&7&cH7Z4#p)_%z>*<)~U{y^zE{@dxA`Y?H$c8;lRmu=XBwiH+H~Yb^ z)3J`zE!I?xX=rw{C3|s6iP0kqufr^` z(f$9b*6wcrS5%bZei$d_UejwDHfb4DHBQcrqV;XL(aZ2CT7BURp@04hrajeMXT}mt z(g_r>)$crR5WTrU!?YJ%9YMi=6sq9-Rs<=}1~_Mc0}|PGD-#xSdMVk_rJpfPxkb!$ zOoW@IF|AalT94XZ7nt8Py=wfRCt({^6f%5zOPJkg#rQhmw5G^SA>K=gFo(D8hX&x! z&~^&jrV-qKy@E{4ZR_GZ6CqabWj4$EbVV^et?n+ofut$aSxCFzM0x8%vq{xd(a~%$ z*k?W!Y*b*e&6N;j3cz^hI-Hhg)oUqi?5`y4ov>9GdH*>QQ4Ff_(mpgyjqOn0lA(7y zCLCbiHZ)8(rt%o$%b3qTtfzCEhEsD3)m9MRCczzC{S==FLgG)6EJ7XXxa}1$u%K@REF6QQ}+ElPF#lnu0vv8{nS)76F z@C-ei;d{+z^~mA?0X<-%ux=(?!>kmKQ0X`$rFJ36*UNWnJmd2ejQ`&wt6SkL_$}T%@cKx@;Y0VQ>_d3d|N#jrbapSz`PY<1rfr=?|-7AB{YD zSslrynx08JSgm34{n4_!xoKQ8+vA8x$iOiCw+B48t2ZL?rl)WPB^XtUGz+!d#<>Ak+rAR;h4tBj_b=>j7@C%LEyqlI zKt7|6!;lfz^4$2acIW+N_S;S;2ntt>2EW?q;?MfD5{qpX)Gd1l-Z8a$$B2w*?istR zJO_q)n$psRPl79}ZjAiIbzmxIn;?LxYxKK!m3qXabF}SlgK0??nKSzV$~S^%@_oYK z88ZibC)IF*(Qi0K`yNof0j;RH&AjWdMR+z3G{h+N_n`_4qUOMn1QOf53~;pT$3+-8&W+q89`n1_&yV}Tx_{;cu-Ms=Z| zuT4&4>3ZLLp|wh`@{YY>S&^exDs(vF`+@B(vqZxl!u^h1c3iP2KtSODY7N;2#5=Jx z6qzoMwidjhG44x|6CR>x?>b$-#KMxMtv4gCl%g*lk$~YTNjs5oC3`D1JHi^T00^(p zB4JJFT6+mduRr+&)Zj3;b6O(ozh1sNWUq3%6X^CtF{T61k1^Q(hW_Z

t--(xP5{ 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 Ttmha=BSJwQBqDOgKoj(T`Q?>h From d61f3802cb04b424b6117998edb6503d05a9766d Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 23 Aug 2015 17:23:21 -0700 Subject: [PATCH 072/224] Remove line in/out components and traces, microphone. Clean up traces and via stitching affected by removed components. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 4444 ++++++++---------- 1 file changed, 1932 insertions(+), 2512 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 98e22a008..c364fdd71 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -1,30 +1,30 @@ -(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 54.925799 99.809499 180.874201 175.190501) (thickness 1.6) (drawings 24) - (tracks 1715) + (tracks 1594) (zones 0) - (modules 100) - (nets 124) + (modules 77) + (nets 140) ) (page A4) (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) - (38 B.Mask user hide) + (38 B.Mask user) (39 F.Mask user hide) (40 Dwgs.User user hide) (41 Cmts.User user hide) @@ -66,7 +66,7 @@ (grid_origin 60 100) (visible_elements FFFEFFFF) (pcbplotparams - (layerselection 0x00030_80000001) + (layerselection 0x010fc_80000007) (usegerberextensions true) (excludeedgelayer true) (linewidth 0.152400) @@ -105,117 +105,133 @@ (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) @@ -236,34 +252,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 +282,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 +335,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 +405,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 +427,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 +447,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 +467,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 +487,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 +505,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,9 +525,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) (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) @@ -523,7 +555,7 @@ (pad 1 smd rect (at -3.1496 0) (size 4.15036 1.6002) (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)")) + (net 64 "Net-(C18-Pad2)")) ) (module ipc_capae:IPC_CAPAE830X620N (layer 4_bot) (tedit 53B09A65) (tstamp 53AA26CA) @@ -549,9 +581,9 @@ (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)) + (net 15 /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)")) + (net 65 "Net-(C19-Pad2)")) ) (module ipc_capc:IPC_CAPC1608X95N (layer 4_bot) (tedit 53B09A86) (tstamp 53AA26F6) @@ -570,9 +602,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,9 +623,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 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) @@ -619,9 +651,9 @@ (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)")) + (net 66 "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)")) + (net 67 "Net-(C24-Pad2)")) ) (module ipc_capc:IPC_CAPC1608X95N (layer 4_bot) (tedit 53B09AB4) (tstamp 53AA271B) @@ -640,9 +672,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 +694,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 +714,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 +734,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 +754,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 +774,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 +794,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 +814,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 +832,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 +847,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 +876,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 +905,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 +934,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,23 +963,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 molex:MOLEX_54132-40XX_LR locked (layer 4_bot) (tedit 53B09BB0) (tstamp 53AA2868) @@ -981,93 +1013,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 +1117,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 +1137,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 +1157,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 +1177,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 +1236,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 +1244,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 +1265,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 +1286,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 +1307,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 +1328,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 +1349,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 +1370,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,30 +1391,11 @@ (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) (at 149.3 158.5 90) (path /53A8BFC3/53AB09AD) @@ -1438,21 +1451,21 @@ (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) @@ -1474,21 +1487,21 @@ (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) @@ -1510,21 +1523,21 @@ (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 +1556,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 +1577,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 +1598,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 +1610,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 +1618,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 +1640,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 +1660,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 +1680,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 +1700,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 +1720,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 +1740,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 +1760,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 +1780,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 +1798,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 +1820,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 +1840,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 +1858,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 +1880,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 +1900,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 +1920,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 +2001,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 +2013,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,15 +2048,17 @@ (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) @@ -2575,7 +2088,8 @@ (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) (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 2 smd rect (at -3.50012 3.57378 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (net 129 "Net-(U1-Pad2)")) (pad 3 smd rect (at -3.50012 2.92608 90) (size 1.84912 0.44958) (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) @@ -2591,42 +2105,43 @@ (pad 9 smd rect (at -3.50012 -0.97536 90) (size 1.84912 0.44958) (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)) + (net 15 /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)) + (net 63 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)) + (net 130 "Net-(U1-Pad12)")) (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)) + (net 131 "Net-(U1-Pad13)")) (pad 14 smd rect (at -3.50012 -4.22402 90) (size 1.84912 0.44958) (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)) + (net 63 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)) + (net 18 /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)) + (net 13 /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)) + (net 14 /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)) + (net 132 "Net-(U1-Pad19)")) (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)) + (net 133 "Net-(U1-Pad20)")) (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)) + (net 63 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)) + (net 63 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)) + (net 17 /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)) + (net 16 /audio/SCL)) (pad 25 smd rect (at 3.50012 2.27584 90) (size 1.84912 0.44958) (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 26 smd rect (at 3.50012 2.92608 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (net 134 "Net-(U1-Pad26)")) (pad 27 smd rect (at 3.50012 3.57378 90) (size 1.84912 0.44958) (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)) + (net 63 GND)) ) (module ipc_sot:IPC_SOT95P280X110-5N (layer 4_bot) (tedit 53B30B6B) (tstamp 53AA2AE9) @@ -2651,11 +2166,11 @@ (pad 1 smd rect (at -1.34874 0.94996 180) (size 1.09982 0.59944) (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)) + (net 63 GND)) (pad 3 smd rect (at -1.34874 -0.94996 180) (size 1.09982 0.59944) (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)")) + (net 68 "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) (net 1 +1.8V)) ) @@ -2688,37 +2203,37 @@ (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) @@ -2740,11 +2255,11 @@ (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)) + (net 19 /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)) + (net 63 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)")) + (net 69 "Net-(J3-Pad1)")) ) (module header:HEADER_13X2_REV_SM_254_AP (layer 4_bot) (tedit 53F39BE9) (tstamp 53AA297D) @@ -2763,25 +2278,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 +2311,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 +2353,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,45 +2418,50 @@ (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) @@ -2952,136 +2488,141 @@ (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_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_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_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_paste_margin_ratio -0.1)) ) (gr_text 4 (at 77.8 167.4) (layer 4_bot) @@ -3386,1452 +2927,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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (layers 1_top 4_bot) (net 58)) + (via (at 93.4 128.2) (size 0.6985) (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.6985) (layers 1_top 4_bot) (net 59)) + (via (at 110.2 127.8) (size 0.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (drill 0.3429) (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.6985) (drill 0.3429) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (layers 1_top 4_bot) (net 63)) + (via (at 83 101.25) (size 0.6985) (layers 1_top 4_bot) (net 63)) + (via (at 107 101.25) (size 0.6985) (layers 1_top 4_bot) (net 63)) + (via (at 113 101.25) (size 0.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (layers 1_top 4_bot) (net 63)) + (via (at 172 101.25) (size 0.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (layers 1_top 4_bot) (net 63)) + (via (at 64 108) (size 0.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (layers 1_top 4_bot) (net 63)) + (via (at 95 101.25) (size 0.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (layers 1_top 4_bot) (net 63)) + (via (at 172 173.75) (size 0.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (layers 1_top 4_bot) (net 63)) + (via (at 169 122.2) (size 0.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (layers 1_top 4_bot) (net 63)) + (via (at 98 149) (size 0.6985) (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.6985) (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.6985) (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.6985) (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.6985) (layers 1_top 4_bot) (net 63)) + (via (at 142.4 110.5) (size 0.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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.6985) (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)) @@ -4885,7 +4305,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)) @@ -4915,7 +4335,7 @@ ) ) ) - (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 +4361,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 +4387,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)) From c78b7fe196dccf842da54d4dff4f4accfbdd1d6a Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 29 Aug 2015 16:12:45 -0700 Subject: [PATCH 073/224] Reduce mask margin on QFP pads. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index c364fdd71..8e88d219b 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2468,10 +2468,10 @@ (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 55E1E0C3) (tstamp 53AA699D) (at 97.6 132.8 270) (path /53A8C780/53A8D11B) - (attr smd) + (solder_mask_margin 0.0492) (fp_text reference U3 (at 0 0 270) (layer B.SilkS) (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) ) @@ -2616,13 +2616,13 @@ (pad 64 smd rect (at -3 4.2) (size 1.5 0.2) (layers 4_bot B.Paste B.Mask) (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 63 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 63 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 63 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 63 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) From 436e6fd21b73f598c3913209f45d7157a1acdd6c Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 29 Aug 2015 17:14:06 -0700 Subject: [PATCH 074/224] Footprint cleanup Remove courtyard lines from silkscreen. Round coordinates/dimensions to correct values (KiCad's old units don't convert nicely to the new units). Restore U3 refdes silkscreen visibility. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 276 +++++++++---------- 1 file changed, 133 insertions(+), 143 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 8e88d219b..0d0bb8714 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -530,59 +530,57 @@ (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) + (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) + (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.1496 0) (size 4.15036 1.6002) (layers 4_bot B.Paste B.Mask) + (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)")) ) @@ -628,31 +626,30 @@ (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) + (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.75006 0 180) (size 2.55016 1.6002) (layers 4_bot B.Paste B.Mask) + (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)")) ) @@ -1396,20 +1393,19 @@ (net 5 /audio/I2S0_RX_SDA)) ) - (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)) @@ -1432,20 +1428,19 @@ (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)) @@ -1468,20 +1463,19 @@ (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)) @@ -1504,20 +1498,19 @@ (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)) @@ -2065,11 +2058,10 @@ (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 55E23EA1) (tstamp 53AA2AD7) (at 137.4 114 90) (tags "JEDEC MO-150AH") (path /53A8BFC3/53A8C66D) - (attr smd) (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)) ) @@ -2078,100 +2070,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.67614 5.5) (end 4.67614 5.5) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 4.67614 5.5) (end 4.67614 -5.5) (layer B.CrtYd) (width 0.1524)) + (fp_line (start 4.67614 -5.5) (end -4.67614 -5.5) (layer B.CrtYd) (width 0.1524)) + (fp_line (start -4.67614 -5.5) (end -4.67614 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 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.50012 2.92608 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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) + (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.50012 -2.27584 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 -2.92608 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 -3.57378 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 -4.22402 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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) + (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.50012 -3.57378 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 -2.92608 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 -2.27584 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 -1.6256 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 -0.97536 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 -0.32512 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 0.32512 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 0.97536 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 1.6256 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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.50012 2.27584 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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 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.50012 3.57378 90) (size 1.84912 0.44958) (layers 4_bot B.Paste B.Mask) + (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) + (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) + (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.34874 -0.94996 180) (size 1.09982 0.59944) (layers 4_bot B.Paste B.Mask) + (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) + (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.34874 0.94996 180) (size 1.09982 0.59944) (layers 4_bot B.Paste B.Mask) + (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)) ) @@ -2236,29 +2227,28 @@ (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) + (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.15062 -0.94996 180) (size 1.00076 0.59944) (layers 4_bot B.Paste B.Mask) + (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.15062 0 180) (size 1.00076 0.59944) (layers 4_bot B.Paste B.Mask) + (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)")) ) @@ -2468,21 +2458,21 @@ (clearance 0.4)) ) - (module ipc_qfp:IPC_QFP40P900X900X120-65N (layer 4_bot) (tedit 55E1E0C3) (tstamp 53AA699D) + (module ipc_qfp:IPC_QFP40P900X900X120-65N (layer 4_bot) (tedit 55E249FD) (tstamp 53AA699D) (at 97.6 132.8 270) (path /53A8C780/53A8D11B) (solder_mask_margin 0.0492) - (fp_text reference U3 (at 0 0 270) (layer B.SilkS) - (effects (font (size 1 1) (thickness 0.15)) (justify mirror)) + (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)) From bda376df4b1aa5fa98f14a8d832dca61db75a765 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 29 Aug 2015 17:20:41 -0700 Subject: [PATCH 075/224] KiCad added courtyard layers. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 0d0bb8714..626990e2c 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -31,6 +31,8 @@ (42 Eco1.User user hide) (43 Eco2.User user hide) (44 Edge.Cuts user) + (46 B.CrtYd user) + (47 F.CrtYd user) ) (setup From 56c7c31cbb950bc5470d5fd359695a54e6618b83 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 29 Aug 2015 17:54:26 -0700 Subject: [PATCH 076/224] More footprint units cleanup. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 626990e2c..d6367eedf 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2060,7 +2060,7 @@ (clearance 0.4)) ) - (module ipc_sop:IPC_SOP65P780X200-28N (layer 4_bot) (tedit 55E23EA1) (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) @@ -2072,10 +2072,10 @@ ) (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.5) (end 4.67614 5.5) (layer B.CrtYd) (width 0.1524)) - (fp_line (start 4.67614 5.5) (end 4.67614 -5.5) (layer B.CrtYd) (width 0.1524)) - (fp_line (start 4.67614 -5.5) (end -4.67614 -5.5) (layer B.CrtYd) (width 0.1524)) - (fp_line (start -4.67614 -5.5) (end -4.67614 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 -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)) From 1340991dba5597340a3f20aed400cf6b99b89f43 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 29 Aug 2015 18:14:23 -0700 Subject: [PATCH 077/224] Reduce solder mask margin on WM8731. Trying to squeeze some mask web in there! --- hardware/portapack_h1/portapack_h1.kicad_pcb | 1 + 1 file changed, 1 insertion(+) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index d6367eedf..7d2209e3c 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2064,6 +2064,7 @@ (at 137.4 114 90) (tags "JEDEC MO-150AH") (path /53A8BFC3/53A8C66D) + (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)) ) From 732561d01c46a23ebaf011bb90cfbbebd0df51fa Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sat, 29 Aug 2015 22:31:29 -0700 Subject: [PATCH 078/224] Change vias to 13mil, 7mil annular ring. Was 13.5mm, but why?!? --- hardware/portapack_h1/portapack_h1.kicad_pcb | 797 ++++++++++--------- 1 file changed, 399 insertions(+), 398 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 7d2209e3c..22d25af1e 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -46,10 +46,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) @@ -238,8 +239,8 @@ (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) @@ -2652,190 +2653,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)) @@ -2849,11 +2850,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)) @@ -2866,14 +2867,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)) @@ -2881,10 +2882,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)) @@ -2899,7 +2900,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)) @@ -2911,7 +2912,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)) @@ -2949,9 +2950,9 @@ (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.6985) (layers 1_top 4_bot) (net 16)) + (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.6985) (layers 1_top 4_bot) (net 16)) + (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)) @@ -2961,13 +2962,13 @@ (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.6985) (layers 1_top 4_bot) (net 17)) + (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.6985) (layers 1_top 4_bot) (net 17)) + (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)) @@ -2977,13 +2978,13 @@ (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.6985) (layers 1_top 4_bot) (net 19)) + (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.6985) (layers 1_top 4_bot) (net 19)) + (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)) @@ -3053,9 +3054,9 @@ (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.6985) (layers 1_top 4_bot) (net 37)) + (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.6985) (layers 1_top 4_bot) (net 37)) + (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)) @@ -3088,7 +3089,7 @@ (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.6985) (layers 1_top 4_bot) (net 43)) + (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)) @@ -3100,7 +3101,7 @@ (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.6985) (layers 1_top 4_bot) (net 43)) + (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)) @@ -3112,56 +3113,56 @@ (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.6985) (layers 1_top 4_bot) (net 44)) + (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.6985) (layers 1_top 4_bot) (net 44)) + (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.6985) (layers 1_top 4_bot) (net 45)) + (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.6985) (layers 1_top 4_bot) (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.6985) (layers 1_top 4_bot) (net 46)) + (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.6985) (layers 1_top 4_bot) (net 46)) + (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.6985) (layers 1_top 4_bot) (net 47)) + (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.6985) (layers 1_top 4_bot) (net 47)) + (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.6985) (layers 1_top 4_bot) (net 48)) + (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.6985) (layers 1_top 4_bot) (net 48)) + (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.6985) (layers 1_top 4_bot) (net 49)) + (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.6985) (layers 1_top 4_bot) (net 49)) + (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)) @@ -3174,9 +3175,9 @@ (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.6985) (layers 1_top 4_bot) (net 50)) + (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.6985) (layers 1_top 4_bot) (net 50)) + (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)) @@ -3236,8 +3237,8 @@ (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.6985) (layers 1_top 4_bot) (net 58)) - (via (at 93.4 128.2) (size 0.6985) (layers 1_top 4_bot) (net 58)) + (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)) @@ -3252,8 +3253,8 @@ (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.6985) (layers 1_top 4_bot) (net 59)) - (via (at 110.2 127.8) (size 0.6985) (layers 1_top 4_bot) (net 59)) + (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)) @@ -3271,9 +3272,9 @@ (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.6985) (layers 1_top 4_bot) (net 60)) + (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.6985) (layers 1_top 4_bot) (net 60)) + (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)) @@ -3287,9 +3288,9 @@ (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.6985) (layers 1_top 4_bot) (net 61)) + (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.6985) (layers 1_top 4_bot) (net 61)) + (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)) @@ -3312,676 +3313,676 @@ (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.6985) (drill 0.3429) (layers 1_top 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.6985) (drill 0.3429) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) - (via (at 83 101.25) (size 0.6985) (layers 1_top 4_bot) (net 63)) - (via (at 107 101.25) (size 0.6985) (layers 1_top 4_bot) (net 63)) - (via (at 113 101.25) (size 0.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) - (via (at 172 101.25) (size 0.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) - (via (at 64 108) (size 0.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) - (via (at 95 101.25) (size 0.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) - (via (at 172 173.75) (size 0.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) - (via (at 169 122.2) (size 0.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) - (via (at 98 149) (size 0.6985) (layers 1_top 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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) - (via (at 142.4 110.5) (size 0.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63) (status 30)) + (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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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.6985) (layers 1_top 4_bot) (net 63)) + (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)) @@ -4094,10 +4095,10 @@ (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.6985) (layers 1_top 4_bot) (net 103)) + (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.6985) (layers 1_top 4_bot) (net 103)) + (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)) @@ -4105,10 +4106,10 @@ (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.6985) (layers 1_top 4_bot) (net 104)) + (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.6985) (layers 1_top 4_bot) (net 104)) + (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)) @@ -4128,9 +4129,9 @@ (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.6985) (layers 1_top 4_bot) (net 112)) + (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.6985) (layers 1_top 4_bot) (net 112)) + (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)) From ea2cfb7ad2808514bfc28ca8411b168b1673833b Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 30 Aug 2015 09:42:47 -0700 Subject: [PATCH 079/224] Center text in layer legend. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 22d25af1e..c4ca42ab5 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2619,16 +2619,16 @@ (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) + (gr_text 4 (at 77.8 167.3) (layer 4_bot) (effects (font (size 1.5 1.5) (thickness 0.3))) ) - (gr_text 3 (at 75.8 167.4) (layer 3_gnd) + (gr_text 3 (at 75.8 167.3) (layer 3_gnd) (effects (font (size 1.5 1.5) (thickness 0.3))) ) - (gr_text 2 (at 73.8 167.4) (layer 2_pwr) (tstamp 53AE501D) + (gr_text 2 (at 73.8 167.3) (layer 2_pwr) (tstamp 53AE501D) (effects (font (size 1.5 1.5) (thickness 0.3))) ) - (gr_text 1 (at 71.8 167.4) (layer 1_top) (tstamp 53AE4FEC) + (gr_text 1 (at 71.8 167.3) (layer 1_top) (tstamp 53AE4FEC) (effects (font (size 1.5 1.5) (thickness 0.3072))) ) (gr_line (start 60 104) (end 60 121.5) (angle 90) (layer Edge.Cuts) (width 0.381)) From 84b92365f9aeed375162d3ccc5578b7c239b0861 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 30 Aug 2015 10:14:36 -0700 Subject: [PATCH 080/224] Move and shrink copper layer legend. Doesn't need to be visible after assembly. I think. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 24 ++++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index c4ca42ab5..8184a91ca 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2619,17 +2619,17 @@ (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) ) - (gr_text 4 (at 77.8 167.3) (layer 4_bot) - (effects (font (size 1.5 1.5) (thickness 0.3))) + (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 75.8 167.3) (layer 3_gnd) - (effects (font (size 1.5 1.5) (thickness 0.3))) + (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 73.8 167.3) (layer 2_pwr) (tstamp 53AE501D) - (effects (font (size 1.5 1.5) (thickness 0.3))) + (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 71.8 167.3) (layer 1_top) (tstamp 53AE4FEC) - (effects (font (size 1.5 1.5) (thickness 0.3072))) + (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)) @@ -4254,7 +4254,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) ) ) ) @@ -4265,7 +4265,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) ) ) ) @@ -4315,7 +4315,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) ) ) ) @@ -4325,7 +4325,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) ) ) ) From 375cf6f238bc0a38d80feeeea67dd589dfaf2149 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 30 Aug 2015 14:35:04 -0700 Subject: [PATCH 081/224] Tighten solder mask around LCD connector. Shooting for 4mil mask web between pads. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 1 + 1 file changed, 1 insertion(+) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 8184a91ca..494594d8a 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -985,6 +985,7 @@ (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)) From d3acd79df82201b142698f481c1886888e77786a Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 30 Aug 2015 16:23:55 -0700 Subject: [PATCH 082/224] Add PCB stack data and diagram. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 93 ++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 494594d8a..c2f35ea6d 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2620,6 +2620,99 @@ (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) ) + (gr_line (start 87.5 23.5) (end 98.5 23.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 45 23.5) (end 54 23.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 27.5 23.5) (end 32.5 23.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 20 23.5) (end 24 23.5) (layer Dwgs.User) (width 0.1524)) + (gr_text "62 mil +/- 10%\nBoard Thickness" (at 105 41) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) + ) + (gr_line (start 102.5 47) (end 103 45.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 102.5 47) (end 102 45.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 102.5 35) (end 103 36.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 102.5 35) (end 102 36.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 102.5 35) (end 102.5 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 100 47) (end 105 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 100 35) (end 105 35) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 70 39.5) (end 70 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A17)) + (gr_line (start 70 38.5) (end 71 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A16)) + (gr_line (start 70 39.5) (end 72 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A15)) + (gr_line (start 71 39.5) (end 73 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A14)) + (gr_line (start 74 39.5) (end 76 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A13)) + (gr_line (start 73 39.5) (end 75 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A12)) + (gr_line (start 72 39.5) (end 74 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A11)) + (gr_line (start 70 39.5) (end 85 39.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A10)) + (gr_line (start 70 37.5) (end 85 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0F)) + (gr_line (start 79 39.5) (end 81 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0E)) + (gr_line (start 78 39.5) (end 80 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0D)) + (gr_line (start 77 39.5) (end 79 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0C)) + (gr_line (start 76 39.5) (end 78 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0B)) + (gr_line (start 75 39.5) (end 77 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0A)) + (gr_line (start 85 39.5) (end 85 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A09)) + (gr_line (start 84 39.5) (end 85 38.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A08)) + (gr_line (start 83 39.5) (end 85 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A07)) + (gr_line (start 82 39.5) (end 84 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A06)) + (gr_line (start 81 39.5) (end 83 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A05)) + (gr_line (start 80 39.5) (end 82 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A04)) + (gr_line (start 84 44.5) (end 85 43.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 83 44.5) (end 85 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 82 44.5) (end 84 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 81 44.5) (end 83 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 80 44.5) (end 82 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 79 44.5) (end 81 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 78 44.5) (end 80 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 77 44.5) (end 79 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 76 44.5) (end 78 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75 44.5) (end 77 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 74 44.5) (end 76 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 73 44.5) (end 75 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 72 44.5) (end 74 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 71 44.5) (end 73 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 70 44.5) (end 70 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 85 44.5) (end 85 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 79.5 35) (end 80 34.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 78.5 35) (end 80 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 77.5 35) (end 79 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 76.5 35) (end 78 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75.5 35) (end 77 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75 34.5) (end 76 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 79.5 48.5) (end 80 48) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 78.5 48.5) (end 80 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 77.5 48.5) (end 79 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 76.5 48.5) (end 78 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75.5 48.5) (end 77 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75 48) (end 76 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 70 44.5) (end 72 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 70 43.5) (end 71 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 70 52) (end 85 52) (layer Dwgs.User) (width 0.1524) (tstamp 55E38631)) + (gr_line (start 70 30) (end 85 30) (layer Dwgs.User) (width 0.1524) (tstamp 55E385FB)) + (gr_line (start 70 49.5) (end 85 49.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38573)) + (gr_line (start 75 48.5) (end 80 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E3856C)) + (gr_line (start 75 47) (end 75 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38565)) + (gr_line (start 80 47) (end 80 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38563)) + (gr_line (start 70 47) (end 85 47) (layer Dwgs.User) (width 0.1524) (tstamp 55E3855C)) + (gr_line (start 70 44.5) (end 85 44.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38536)) + (gr_line (start 70 42.5) (end 85 42.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38531)) + (gr_line (start 70 32.5) (end 85 32.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E384EF)) + (gr_line (start 80 33.5) (end 80 35) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75 33.5) (end 80 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75 35) (end 75 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 70 35) (end 85 35) (layer Dwgs.User) (width 0.1524)) + (gr_text "Material\n\n\nWhite\nBlack\n1oz Copper + ENIG\nFR-4 TG170\n0.5oz Copper\nFR-4 TG170\n0.5oz Copper\nFR-4 TG170\n1oz 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.3)) (justify left)) + ) + (gr_text "Thickness\n\n\n\n0.8 mil\n1.7 mil\n6.7 mil\n0.7 mil\n47 mil\n0.7 mil\n6.7 mil\n1.7 mil\n0.8 mil\n\n\n\n" (at 87.5 40) (layer Dwgs.User) (tstamp 55E381F6) + (effects (font (size 1.5 1.5) (thickness 0.3)) (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 27.5 40) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.3)) (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.3)) (justify left)) + ) + (gr_text 20150831 (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)) ) From 18b272bcab17fa0d9d3a6870ae7254aa2341aabe Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 30 Aug 2015 16:24:07 -0700 Subject: [PATCH 083/224] Add PCB dimensions --- hardware/portapack_h1/portapack_h1.kicad_pcb | 24 ++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index c2f35ea6d..3aad40d91 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2620,6 +2620,30 @@ (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) ) + (dimension 75 (width 0.3) (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.3))) + ) + (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.3) (layer Dwgs.User) + (gr_text "120.000 mm" (at 120 93.65) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.3))) + ) + (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 87.5 23.5) (end 98.5 23.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 45 23.5) (end 54 23.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 27.5 23.5) (end 32.5 23.5) (layer Dwgs.User) (width 0.1524)) From d2436ca2293fcc930cb6b3da0af60ea3b2abfbd1 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 30 Aug 2015 17:11:59 -0700 Subject: [PATCH 084/224] Add notes block. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 3aad40d91..a2312e200 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2620,6 +2620,9 @@ (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) ) + (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.3)) (justify left)) + ) (dimension 75 (width 0.3) (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.3))) From c5cd3a4498de4fd968499344e6c6542a21a26cae Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 30 Aug 2015 17:12:32 -0700 Subject: [PATCH 085/224] Add title block with copyright, license. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index a2312e200..ca29816f7 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -13,6 +13,15 @@ ) (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) (1 2_pwr mixed) From 85f9b4cdc58cf07672ea9d6c54046e5e70e18424 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 30 Aug 2015 17:18:14 -0700 Subject: [PATCH 086/224] Add default dimension units note. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index ca29816f7..5497343c0 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2629,6 +2629,9 @@ (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) ) + (gr_text "Dimensions in inches, unless otherwise specified." (at 205 168) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) + ) (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.3)) (justify left)) ) From 128dda23bbda887e79538fa1181ac1d6d3264a2c Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Sun, 30 Aug 2015 17:23:53 -0700 Subject: [PATCH 087/224] Note about separate PTH and NPTH drill files. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 5497343c0..cc09835c0 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2629,6 +2629,9 @@ (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) ) + (gr_text "Drills are in two files, one for PTH, one for NPTH." (at 20 63) (layer Dwgs.User) + (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) + ) (gr_text "Dimensions in inches, unless otherwise specified." (at 205 168) (layer Dwgs.User) (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) ) From 968ec6d176cfe468133c92db25683943b5ab27ff Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 10:01:39 -0700 Subject: [PATCH 088/224] Change PCB stack-up for vendor. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 132 +++++++++---------- 1 file changed, 66 insertions(+), 66 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index cc09835c0..c333ea97b 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2662,41 +2662,46 @@ (arrow2a (pts (xy 60 95) (xy 61.126504 95.586421))) (arrow2b (pts (xy 60 95) (xy 61.126504 94.413579))) ) - (gr_line (start 87.5 23.5) (end 98.5 23.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 92.5 23.5) (end 103.5 23.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 45 23.5) (end 54 23.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 27.5 23.5) (end 32.5 23.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 20 23.5) (end 24 23.5) (layer Dwgs.User) (width 0.1524)) - (gr_text "62 mil +/- 10%\nBoard Thickness" (at 105 41) (layer Dwgs.User) + (gr_text "62 mil +/- 10%\nBoard Thickness" (at 110 41) (layer Dwgs.User) (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) ) - (gr_line (start 102.5 47) (end 103 45.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 102.5 47) (end 102 45.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 102.5 35) (end 103 36.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 102.5 35) (end 102 36.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 102.5 35) (end 102.5 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 100 47) (end 105 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 100 35) (end 105 35) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 70 39.5) (end 70 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A17)) - (gr_line (start 70 38.5) (end 71 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A16)) - (gr_line (start 70 39.5) (end 72 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A15)) - (gr_line (start 71 39.5) (end 73 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A14)) - (gr_line (start 74 39.5) (end 76 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A13)) - (gr_line (start 73 39.5) (end 75 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A12)) - (gr_line (start 72 39.5) (end 74 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A11)) - (gr_line (start 70 39.5) (end 85 39.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A10)) - (gr_line (start 70 37.5) (end 85 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0F)) - (gr_line (start 79 39.5) (end 81 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0E)) - (gr_line (start 78 39.5) (end 80 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0D)) - (gr_line (start 77 39.5) (end 79 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0C)) - (gr_line (start 76 39.5) (end 78 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0B)) - (gr_line (start 75 39.5) (end 77 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0A)) - (gr_line (start 85 39.5) (end 85 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A09)) - (gr_line (start 84 39.5) (end 85 38.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A08)) - (gr_line (start 83 39.5) (end 85 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A07)) - (gr_line (start 82 39.5) (end 84 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A06)) - (gr_line (start 81 39.5) (end 83 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A05)) - (gr_line (start 80 39.5) (end 82 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A04)) - (gr_line (start 84 44.5) (end 85 43.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 107.5 47) (end 108 45.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 107.5 47) (end 107 45.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 107.5 35) (end 108 36.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 107.5 35) (end 107 36.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 107.5 35) (end 107.5 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 105 47) (end 110 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 105 35) (end 110 35) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75 39.5) (end 75 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A17)) + (gr_line (start 75 38.5) (end 76 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A16)) + (gr_line (start 75 39.5) (end 77 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A15)) + (gr_line (start 76 39.5) (end 78 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A14)) + (gr_line (start 79 39.5) (end 81 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A13)) + (gr_line (start 78 39.5) (end 80 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A12)) + (gr_line (start 77 39.5) (end 79 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A11)) + (gr_line (start 75 39.5) (end 90 39.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A10)) + (gr_line (start 75 37.5) (end 90 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0F)) + (gr_line (start 84 39.5) (end 86 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0E)) + (gr_line (start 83 39.5) (end 85 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0D)) + (gr_line (start 82 39.5) (end 84 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0C)) + (gr_line (start 81 39.5) (end 83 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0B)) + (gr_line (start 80 39.5) (end 82 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0A)) + (gr_line (start 90 39.5) (end 90 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A09)) + (gr_line (start 89 39.5) (end 90 38.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A08)) + (gr_line (start 88 39.5) (end 90 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A07)) + (gr_line (start 87 39.5) (end 89 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A06)) + (gr_line (start 86 39.5) (end 88 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A05)) + (gr_line (start 85 39.5) (end 87 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A04)) + (gr_line (start 89 44.5) (end 90 43.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 88 44.5) (end 90 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 87 44.5) (end 89 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 86 44.5) (end 88 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 85 44.5) (end 87 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 84 44.5) (end 86 42.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 83 44.5) (end 85 42.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 82 44.5) (end 84 42.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 81 44.5) (end 83 42.5) (layer Dwgs.User) (width 0.1524)) @@ -2705,45 +2710,40 @@ (gr_line (start 78 44.5) (end 80 42.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 77 44.5) (end 79 42.5) (layer Dwgs.User) (width 0.1524)) (gr_line (start 76 44.5) (end 78 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75 44.5) (end 75 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 90 44.5) (end 90 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 84.5 35) (end 85 34.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 83.5 35) (end 85 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 82.5 35) (end 84 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 81.5 35) (end 83 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 80.5 35) (end 82 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 80 34.5) (end 81 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 84.5 48.5) (end 85 48) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 83.5 48.5) (end 85 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 82.5 48.5) (end 84 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 81.5 48.5) (end 83 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 80.5 48.5) (end 82 47) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 80 48) (end 81 47) (layer Dwgs.User) (width 0.1524)) (gr_line (start 75 44.5) (end 77 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 74 44.5) (end 76 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 73 44.5) (end 75 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 72 44.5) (end 74 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 71 44.5) (end 73 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 70 44.5) (end 70 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 85 44.5) (end 85 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 79.5 35) (end 80 34.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 78.5 35) (end 80 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 77.5 35) (end 79 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 76.5 35) (end 78 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75.5 35) (end 77 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 34.5) (end 76 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 79.5 48.5) (end 80 48) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 78.5 48.5) (end 80 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 77.5 48.5) (end 79 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 76.5 48.5) (end 78 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75.5 48.5) (end 77 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 48) (end 76 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 70 44.5) (end 72 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 70 43.5) (end 71 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 70 52) (end 85 52) (layer Dwgs.User) (width 0.1524) (tstamp 55E38631)) - (gr_line (start 70 30) (end 85 30) (layer Dwgs.User) (width 0.1524) (tstamp 55E385FB)) - (gr_line (start 70 49.5) (end 85 49.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38573)) - (gr_line (start 75 48.5) (end 80 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E3856C)) - (gr_line (start 75 47) (end 75 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38565)) - (gr_line (start 80 47) (end 80 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38563)) - (gr_line (start 70 47) (end 85 47) (layer Dwgs.User) (width 0.1524) (tstamp 55E3855C)) - (gr_line (start 70 44.5) (end 85 44.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38536)) - (gr_line (start 70 42.5) (end 85 42.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38531)) - (gr_line (start 70 32.5) (end 85 32.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E384EF)) - (gr_line (start 80 33.5) (end 80 35) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 33.5) (end 80 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 35) (end 75 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 70 35) (end 85 35) (layer Dwgs.User) (width 0.1524)) - (gr_text "Material\n\n\nWhite\nBlack\n1oz Copper + ENIG\nFR-4 TG170\n0.5oz Copper\nFR-4 TG170\n0.5oz Copper\nFR-4 TG170\n1oz Copper + ENIG\nBlack\nWhite\n\nCenter line is finished edge\n" (at 45 40) (layer Dwgs.User) (tstamp 55E3838A) + (gr_line (start 75 43.5) (end 76 42.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75 52) (end 90 52) (layer Dwgs.User) (width 0.1524) (tstamp 55E38631)) + (gr_line (start 75 30) (end 90 30) (layer Dwgs.User) (width 0.1524) (tstamp 55E385FB)) + (gr_line (start 75 49.5) (end 90 49.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38573)) + (gr_line (start 80 48.5) (end 85 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E3856C)) + (gr_line (start 80 47) (end 80 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38565)) + (gr_line (start 85 47) (end 85 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38563)) + (gr_line (start 75 47) (end 90 47) (layer Dwgs.User) (width 0.1524) (tstamp 55E3855C)) + (gr_line (start 75 44.5) (end 90 44.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38536)) + (gr_line (start 75 42.5) (end 90 42.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38531)) + (gr_line (start 75 32.5) (end 90 32.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E384EF)) + (gr_line (start 85 33.5) (end 85 35) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 80 33.5) (end 85 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 80 35) (end 80 33.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 75 35) (end 90 35) (layer Dwgs.User) (width 0.1524)) + (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.3)) (justify left)) ) - (gr_text "Thickness\n\n\n\n0.8 mil\n1.7 mil\n6.7 mil\n0.7 mil\n47 mil\n0.7 mil\n6.7 mil\n1.7 mil\n0.8 mil\n\n\n\n" (at 87.5 40) (layer Dwgs.User) (tstamp 55E381F6) + (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 93 40) (layer Dwgs.User) (tstamp 55E381F6) (effects (font (size 1.5 1.5) (thickness 0.3)) (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 27.5 40) (layer Dwgs.User) From e979b9b64d1139042e23f80a3bc1c86598f158b2 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 10:02:07 -0700 Subject: [PATCH 089/224] Change drawing lines width to 0.1mm. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 174 +++++++++---------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index c333ea97b..ef3772146 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2630,17 +2630,17 @@ ) (gr_text "Drills are in two files, one for PTH, one for NPTH." (at 20 63) (layer Dwgs.User) - (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) ) (gr_text "Dimensions in inches, unless otherwise specified." (at 205 168) (layer Dwgs.User) - (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) ) (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.3)) (justify left)) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) ) - (dimension 75 (width 0.3) (layer Dwgs.User) + (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.3))) + (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))) @@ -2650,9 +2650,9 @@ (arrow2a (pts (xy 55 175) (xy 55.586421 173.873496))) (arrow2b (pts (xy 55 175) (xy 54.413579 173.873496))) ) - (dimension 120 (width 0.3) (layer Dwgs.User) + (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.3))) + (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))) @@ -2662,95 +2662,95 @@ (arrow2a (pts (xy 60 95) (xy 61.126504 95.586421))) (arrow2b (pts (xy 60 95) (xy 61.126504 94.413579))) ) - (gr_line (start 92.5 23.5) (end 103.5 23.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 45 23.5) (end 54 23.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 27.5 23.5) (end 32.5 23.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 20 23.5) (end 24 23.5) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 92.5 23.5) (end 103.5 23.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 45 23.5) (end 54 23.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 27.5 23.5) (end 32.5 23.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 20 23.5) (end 24 23.5) (layer Dwgs.User) (width 0.1)) (gr_text "62 mil +/- 10%\nBoard Thickness" (at 110 41) (layer Dwgs.User) - (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) ) - (gr_line (start 107.5 47) (end 108 45.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 107.5 47) (end 107 45.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 107.5 35) (end 108 36.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 107.5 35) (end 107 36.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 107.5 35) (end 107.5 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 105 47) (end 110 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 105 35) (end 110 35) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 39.5) (end 75 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A17)) - (gr_line (start 75 38.5) (end 76 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A16)) - (gr_line (start 75 39.5) (end 77 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A15)) - (gr_line (start 76 39.5) (end 78 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A14)) - (gr_line (start 79 39.5) (end 81 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A13)) - (gr_line (start 78 39.5) (end 80 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A12)) - (gr_line (start 77 39.5) (end 79 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A11)) - (gr_line (start 75 39.5) (end 90 39.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A10)) - (gr_line (start 75 37.5) (end 90 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0F)) - (gr_line (start 84 39.5) (end 86 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0E)) - (gr_line (start 83 39.5) (end 85 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0D)) - (gr_line (start 82 39.5) (end 84 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0C)) - (gr_line (start 81 39.5) (end 83 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0B)) - (gr_line (start 80 39.5) (end 82 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A0A)) - (gr_line (start 90 39.5) (end 90 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A09)) - (gr_line (start 89 39.5) (end 90 38.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A08)) - (gr_line (start 88 39.5) (end 90 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A07)) - (gr_line (start 87 39.5) (end 89 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A06)) - (gr_line (start 86 39.5) (end 88 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A05)) - (gr_line (start 85 39.5) (end 87 37.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38A04)) - (gr_line (start 89 44.5) (end 90 43.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 88 44.5) (end 90 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 87 44.5) (end 89 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 86 44.5) (end 88 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 85 44.5) (end 87 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 84 44.5) (end 86 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 83 44.5) (end 85 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 82 44.5) (end 84 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 81 44.5) (end 83 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 80 44.5) (end 82 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 79 44.5) (end 81 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 78 44.5) (end 80 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 77 44.5) (end 79 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 76 44.5) (end 78 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 44.5) (end 75 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 90 44.5) (end 90 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 84.5 35) (end 85 34.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 83.5 35) (end 85 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 82.5 35) (end 84 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 81.5 35) (end 83 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 80.5 35) (end 82 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 80 34.5) (end 81 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 84.5 48.5) (end 85 48) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 83.5 48.5) (end 85 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 82.5 48.5) (end 84 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 81.5 48.5) (end 83 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 80.5 48.5) (end 82 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 80 48) (end 81 47) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 44.5) (end 77 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 43.5) (end 76 42.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 52) (end 90 52) (layer Dwgs.User) (width 0.1524) (tstamp 55E38631)) - (gr_line (start 75 30) (end 90 30) (layer Dwgs.User) (width 0.1524) (tstamp 55E385FB)) - (gr_line (start 75 49.5) (end 90 49.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38573)) - (gr_line (start 80 48.5) (end 85 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E3856C)) - (gr_line (start 80 47) (end 80 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38565)) - (gr_line (start 85 47) (end 85 48.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38563)) - (gr_line (start 75 47) (end 90 47) (layer Dwgs.User) (width 0.1524) (tstamp 55E3855C)) - (gr_line (start 75 44.5) (end 90 44.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38536)) - (gr_line (start 75 42.5) (end 90 42.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E38531)) - (gr_line (start 75 32.5) (end 90 32.5) (layer Dwgs.User) (width 0.1524) (tstamp 55E384EF)) - (gr_line (start 85 33.5) (end 85 35) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 80 33.5) (end 85 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 80 35) (end 80 33.5) (layer Dwgs.User) (width 0.1524)) - (gr_line (start 75 35) (end 90 35) (layer Dwgs.User) (width 0.1524)) + (gr_line (start 107.5 47) (end 108 45.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 107.5 47) (end 107 45.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 107.5 35) (end 108 36.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 107.5 35) (end 107 36.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 107.5 35) (end 107.5 47) (layer Dwgs.User) (width 0.1)) + (gr_line (start 105 47) (end 110 47) (layer Dwgs.User) (width 0.1)) + (gr_line (start 105 35) (end 110 35) (layer Dwgs.User) (width 0.1)) + (gr_line (start 75 39.5) (end 75 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A17)) + (gr_line (start 75 38.5) (end 76 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A16)) + (gr_line (start 75 39.5) (end 77 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A15)) + (gr_line (start 76 39.5) (end 78 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A14)) + (gr_line (start 79 39.5) (end 81 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A13)) + (gr_line (start 78 39.5) (end 80 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A12)) + (gr_line (start 77 39.5) (end 79 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A11)) + (gr_line (start 75 39.5) (end 90 39.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A10)) + (gr_line (start 75 37.5) (end 90 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0F)) + (gr_line (start 84 39.5) (end 86 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0E)) + (gr_line (start 83 39.5) (end 85 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0D)) + (gr_line (start 82 39.5) (end 84 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0C)) + (gr_line (start 81 39.5) (end 83 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0B)) + (gr_line (start 80 39.5) (end 82 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0A)) + (gr_line (start 90 39.5) (end 90 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A09)) + (gr_line (start 89 39.5) (end 90 38.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A08)) + (gr_line (start 88 39.5) (end 90 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A07)) + (gr_line (start 87 39.5) (end 89 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A06)) + (gr_line (start 86 39.5) (end 88 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A05)) + (gr_line (start 85 39.5) (end 87 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A04)) + (gr_line (start 89 44.5) (end 90 43.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 88 44.5) (end 90 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 87 44.5) (end 89 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 86 44.5) (end 88 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 85 44.5) (end 87 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 84 44.5) (end 86 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 83 44.5) (end 85 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 82 44.5) (end 84 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 81 44.5) (end 83 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80 44.5) (end 82 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 79 44.5) (end 81 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 78 44.5) (end 80 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 77 44.5) (end 79 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 76 44.5) (end 78 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 75 44.5) (end 75 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 90 44.5) (end 90 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 84.5 35) (end 85 34.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 83.5 35) (end 85 33.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 82.5 35) (end 84 33.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 81.5 35) (end 83 33.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80.5 35) (end 82 33.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80 34.5) (end 81 33.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 84.5 48.5) (end 85 48) (layer Dwgs.User) (width 0.1)) + (gr_line (start 83.5 48.5) (end 85 47) (layer Dwgs.User) (width 0.1)) + (gr_line (start 82.5 48.5) (end 84 47) (layer Dwgs.User) (width 0.1)) + (gr_line (start 81.5 48.5) (end 83 47) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80.5 48.5) (end 82 47) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80 48) (end 81 47) (layer Dwgs.User) (width 0.1)) + (gr_line (start 75 44.5) (end 77 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 75 43.5) (end 76 42.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 75 52) (end 90 52) (layer Dwgs.User) (width 0.1) (tstamp 55E38631)) + (gr_line (start 75 30) (end 90 30) (layer Dwgs.User) (width 0.1) (tstamp 55E385FB)) + (gr_line (start 75 49.5) (end 90 49.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38573)) + (gr_line (start 80 48.5) (end 85 48.5) (layer Dwgs.User) (width 0.1) (tstamp 55E3856C)) + (gr_line (start 80 47) (end 80 48.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38565)) + (gr_line (start 85 47) (end 85 48.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38563)) + (gr_line (start 75 47) (end 90 47) (layer Dwgs.User) (width 0.1) (tstamp 55E3855C)) + (gr_line (start 75 44.5) (end 90 44.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38536)) + (gr_line (start 75 42.5) (end 90 42.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38531)) + (gr_line (start 75 32.5) (end 90 32.5) (layer Dwgs.User) (width 0.1) (tstamp 55E384EF)) + (gr_line (start 85 33.5) (end 85 35) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80 33.5) (end 85 33.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 80 35) (end 80 33.5) (layer Dwgs.User) (width 0.1)) + (gr_line (start 75 35) (end 90 35) (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.3)) (justify left)) + (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 93 40) (layer Dwgs.User) (tstamp 55E381F6) - (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) + (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 27.5 40) (layer Dwgs.User) - (effects (font (size 1.5 1.5) (thickness 0.3)) (justify left)) + (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.3)) (justify left)) + (effects (font (size 1.5 1.5) (thickness 0.1)) (justify left)) ) (gr_text 20150831 (at 75 164 180) (layer F.SilkS) (effects (font (size 1.524 0.762) (thickness 0.1524))) From f3f5a9647b99ee1878eeed8f181e8e3acddbc546 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 10:13:51 -0700 Subject: [PATCH 090/224] Board stack-up drawing clean-up. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 158 +++++++++---------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index ef3772146..491fb5306 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2629,7 +2629,7 @@ (net 63 GND) (solder_mask_margin 0.0762) (solder_paste_margin_ratio -0.1)) ) - (gr_text "Drills are in two files, one for PTH, one for NPTH." (at 20 63) (layer Dwgs.User) + (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 "Dimensions in inches, unless otherwise specified." (at 205 168) (layer Dwgs.User) @@ -2662,91 +2662,91 @@ (arrow2a (pts (xy 60 95) (xy 61.126504 95.586421))) (arrow2b (pts (xy 60 95) (xy 61.126504 94.413579))) ) - (gr_line (start 92.5 23.5) (end 103.5 23.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 45 23.5) (end 54 23.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 27.5 23.5) (end 32.5 23.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 20 23.5) (end 24 23.5) (layer Dwgs.User) (width 0.1)) - (gr_text "62 mil +/- 10%\nBoard Thickness" (at 110 41) (layer Dwgs.User) + (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 107.5 47) (end 108 45.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 107.5 47) (end 107 45.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 107.5 35) (end 108 36.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 107.5 35) (end 107 36.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 107.5 35) (end 107.5 47) (layer Dwgs.User) (width 0.1)) - (gr_line (start 105 47) (end 110 47) (layer Dwgs.User) (width 0.1)) - (gr_line (start 105 35) (end 110 35) (layer Dwgs.User) (width 0.1)) - (gr_line (start 75 39.5) (end 75 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A17)) - (gr_line (start 75 38.5) (end 76 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A16)) - (gr_line (start 75 39.5) (end 77 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A15)) - (gr_line (start 76 39.5) (end 78 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A14)) - (gr_line (start 79 39.5) (end 81 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A13)) - (gr_line (start 78 39.5) (end 80 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A12)) - (gr_line (start 77 39.5) (end 79 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A11)) - (gr_line (start 75 39.5) (end 90 39.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A10)) - (gr_line (start 75 37.5) (end 90 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0F)) - (gr_line (start 84 39.5) (end 86 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0E)) - (gr_line (start 83 39.5) (end 85 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0D)) - (gr_line (start 82 39.5) (end 84 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0C)) - (gr_line (start 81 39.5) (end 83 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0B)) - (gr_line (start 80 39.5) (end 82 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A0A)) - (gr_line (start 90 39.5) (end 90 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A09)) - (gr_line (start 89 39.5) (end 90 38.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A08)) - (gr_line (start 88 39.5) (end 90 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A07)) - (gr_line (start 87 39.5) (end 89 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A06)) - (gr_line (start 86 39.5) (end 88 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A05)) - (gr_line (start 85 39.5) (end 87 37.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38A04)) - (gr_line (start 89 44.5) (end 90 43.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 88 44.5) (end 90 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 87 44.5) (end 89 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 86 44.5) (end 88 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 85 44.5) (end 87 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 84 44.5) (end 86 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 83 44.5) (end 85 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 82 44.5) (end 84 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 81 44.5) (end 83 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 80 44.5) (end 82 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 79 44.5) (end 81 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 78 44.5) (end 80 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 77 44.5) (end 79 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 76 44.5) (end 78 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 75 44.5) (end 75 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 90 44.5) (end 90 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 84.5 35) (end 85 34.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 83.5 35) (end 85 33.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 82.5 35) (end 84 33.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 81.5 35) (end 83 33.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 80.5 35) (end 82 33.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 80 34.5) (end 81 33.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 84.5 48.5) (end 85 48) (layer Dwgs.User) (width 0.1)) - (gr_line (start 83.5 48.5) (end 85 47) (layer Dwgs.User) (width 0.1)) - (gr_line (start 82.5 48.5) (end 84 47) (layer Dwgs.User) (width 0.1)) - (gr_line (start 81.5 48.5) (end 83 47) (layer Dwgs.User) (width 0.1)) - (gr_line (start 80.5 48.5) (end 82 47) (layer Dwgs.User) (width 0.1)) - (gr_line (start 80 48) (end 81 47) (layer Dwgs.User) (width 0.1)) - (gr_line (start 75 44.5) (end 77 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 75 43.5) (end 76 42.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 75 52) (end 90 52) (layer Dwgs.User) (width 0.1) (tstamp 55E38631)) - (gr_line (start 75 30) (end 90 30) (layer Dwgs.User) (width 0.1) (tstamp 55E385FB)) - (gr_line (start 75 49.5) (end 90 49.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38573)) - (gr_line (start 80 48.5) (end 85 48.5) (layer Dwgs.User) (width 0.1) (tstamp 55E3856C)) - (gr_line (start 80 47) (end 80 48.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38565)) - (gr_line (start 85 47) (end 85 48.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38563)) - (gr_line (start 75 47) (end 90 47) (layer Dwgs.User) (width 0.1) (tstamp 55E3855C)) - (gr_line (start 75 44.5) (end 90 44.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38536)) - (gr_line (start 75 42.5) (end 90 42.5) (layer Dwgs.User) (width 0.1) (tstamp 55E38531)) - (gr_line (start 75 32.5) (end 90 32.5) (layer Dwgs.User) (width 0.1) (tstamp 55E384EF)) - (gr_line (start 85 33.5) (end 85 35) (layer Dwgs.User) (width 0.1)) - (gr_line (start 80 33.5) (end 85 33.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 80 35) (end 80 33.5) (layer Dwgs.User) (width 0.1)) - (gr_line (start 75 35) (end 90 35) (layer Dwgs.User) (width 0.1)) + (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 93 40) (layer Dwgs.User) (tstamp 55E381F6) + (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 27.5 40) (layer Dwgs.User) + (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) From 73e9dabf722031421aa001615a76d45188fd7ade Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 10:14:36 -0700 Subject: [PATCH 091/224] Change default layer visibility. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 491fb5306..3ffd70a2b 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -31,17 +31,17 @@ (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) - (38 B.Mask user) + (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) - (47 F.CrtYd user) + (46 B.CrtYd user hide) + (47 F.CrtYd user hide) ) (setup From 1c2b3b82ced3f3684413fef619e0045cea62467a Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 10:17:30 -0700 Subject: [PATCH 092/224] Update layers exported during PCB plot. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 3ffd70a2b..6ffb96c65 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -78,7 +78,7 @@ (grid_origin 60 100) (visible_elements FFFEFFFF) (pcbplotparams - (layerselection 0x010fc_80000007) + (layerselection 0x011fc_80000007) (usegerberextensions true) (excludeedgelayer true) (linewidth 0.152400) From d9568f7f475921ff5546c343346bbd76c42a70f9 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 11:09:19 -0700 Subject: [PATCH 093/224] Update date code to 20150901. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 6ffb96c65..4a1b91aab 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -2752,7 +2752,7 @@ (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 20150831 (at 75 164 180) (layer F.SilkS) + (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) From 805442d46fbee73e252c0cbf5d66d650a98c8795 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 11:10:50 -0700 Subject: [PATCH 094/224] Allow KiCad to update metadata. --- hardware/portapack_h1/portapack_h1.kicad_pcb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hardware/portapack_h1/portapack_h1.kicad_pcb b/hardware/portapack_h1/portapack_h1.kicad_pcb index 4a1b91aab..8830b2d21 100644 --- a/hardware/portapack_h1/portapack_h1.kicad_pcb +++ b/hardware/portapack_h1/portapack_h1.kicad_pcb @@ -3,9 +3,9 @@ (general (links 291) (no_connects 0) - (area 54.925799 99.809499 180.874201 175.190501) + (area 19.949999 22.3 274.050002 175.190501) (thickness 1.6) - (drawings 24) + (drawings 110) (tracks 1594) (zones 0) (modules 77) From 5d8c636f4049813c1ea01e9683e1f6271ed03809 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 13:49:09 -0700 Subject: [PATCH 095/224] Halt M4 right after sending M0 the shutdown message. Addresses issue #55. --- firmware/baseband/main.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 82a27049a..8952dcca3 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -205,6 +205,13 @@ static void shutdown() { systick_stop(); } +static void halt() { + port_disable(); + while(true) { + port_wait_for_interrupt(); + } +} + class EventDispatcher { public: MessageHandlerMap& message_handlers() { @@ -346,5 +353,7 @@ int main(void) { ShutdownMessage shutdown_message; shared_memory.application_queue.push(shutdown_message); + halt(); + return 0; } From 4846557f128ebc4476ef82feb4172b2748e08d45 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 14:21:40 -0700 Subject: [PATCH 096/224] Missed spots when renaming REVISION to GIT_REVISION. --- firmware/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index 8049df9f4..d735d3d79 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -44,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 From 0fd2dcf04a619f1a6c95d6532bf475fd8a153a42 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 31 Aug 2015 22:07:34 -0700 Subject: [PATCH 097/224] Experimenting with Travis CI for firmware builds. --- .travis.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 000000000..221c84d86 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,7 @@ +language: c++ + +before_script: + - sudo apt-get update -qq + - sudo apt-get install -y gcc-arm-none-eabi + +script: make From 92674706ed8a94fdd08d531c87118bd764879f09 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 31 Aug 2015 22:10:07 -0700 Subject: [PATCH 098/224] Oops, bad Travis CI .yml syntax. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 221c84d86..d7ab7c5b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -language: c++ +language: cpp before_script: - sudo apt-get update -qq From 0f39d52f484e812185698c89d8e418902f1bcf30 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 31 Aug 2015 22:26:07 -0700 Subject: [PATCH 099/224] More Travis CI stumbling. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index d7ab7c5b3..53f1015f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: cpp -before_script: +before_install: - sudo apt-get update -qq - sudo apt-get install -y gcc-arm-none-eabi From 8b465a593ecbf86e4f30838f9e2fd4e0de510852 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 31 Aug 2015 22:27:37 -0700 Subject: [PATCH 100/224] Whitespace, huh? OK... --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 53f1015f7..ae157a969 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: cpp before_install: - - sudo apt-get update -qq - - sudo apt-get install -y gcc-arm-none-eabi + - sudo apt-get update -qq + - sudo apt-get install -y gcc-arm-none-eabi script: make From e0c313b2403673b2b336037420a802bb26624d52 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 31 Aug 2015 22:32:31 -0700 Subject: [PATCH 101/224] Switch to shiny container. --- .travis.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index ae157a969..c56efc088 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,12 @@ +sudo: false + language: cpp -before_install: - - sudo apt-get update -qq - - sudo apt-get install -y gcc-arm-none-eabi +addons: + apt: + packages: + - gcc-arm-none-eabi -script: make +script: + - cd firmware/ + - make From e96895d18c1719a8e1ee78314207a616b081afc6 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 31 Aug 2015 22:51:06 -0700 Subject: [PATCH 102/224] Container's not flexible enough, back to the old approach. --- .travis.yml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index c56efc088..1175e56ca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,16 @@ -sudo: false +# sudo: false language: cpp -addons: - apt: - packages: - - gcc-arm-none-eabi +# addons: +# apt: +# packages: +# - gcc-arm-none-eabi + +before_script: + - 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 script: - cd firmware/ From 61d765aeac24d2dd8ad4b9547556cd0147e6731d Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Mon, 31 Aug 2015 22:58:11 -0700 Subject: [PATCH 103/224] before_install vs. before_script? No idea... --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1175e56ca..5be546d9b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,9 @@ language: cpp # packages: # - gcc-arm-none-eabi -before_script: +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 From 340fc4dd8357f3afd48acc4709951e93b3d151d0 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 11:49:50 -0700 Subject: [PATCH 104/224] Override compilers. --- .travis.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.travis.yml b/.travis.yml index 5be546d9b..69cf53a1d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,10 @@ before_install: - 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: - cd firmware/ - make From 57ec7aac41101434f222126847439619e0692027 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 14:36:14 -0700 Subject: [PATCH 105/224] Remove container stuff. --- .travis.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 69cf53a1d..49056a0c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,12 +1,5 @@ -# sudo: false - language: cpp -# addons: -# apt: -# packages: -# - gcc-arm-none-eabi - cache: apt before_install: From a06ee31566c4dfaa58dba4dd67a3c457c2fe407e Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 14:36:30 -0700 Subject: [PATCH 106/224] Make release and post on S3. --- .travis.yml | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 49056a0c7..3081b7a20 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,4 +13,11 @@ before_script: script: - cd firmware/ - - make + - make release + +addons: + artifacts: + s3_region: "us-west-1" + paths: + - $(ls firmware/portapack-h1-firmware-*.tar.bz2 | tr "\n" ":") + - $(ls firmware/portapack-h1-firmware-*.zip | tr "\n" ":") From 72a59c3dae0f2e56a94018b5543ec9981887fd94 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 15:07:31 -0700 Subject: [PATCH 107/224] Fix cwd when uploading release files. --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3081b7a20..2f1832079 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,8 +12,10 @@ before_script: - export CXX="arm-none-eabi-g++" script: - - cd firmware/ + # TODO: Introduce top-level Makefile, this is lame. + - pushd firmware/ - make release + - popd addons: artifacts: From 2c778b72e25fba162ea86c3deac46dd4b48dd76f Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 15:15:24 -0700 Subject: [PATCH 108/224] Wrong S3 region. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 2f1832079..32a717e32 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ script: addons: artifacts: - s3_region: "us-west-1" + s3_region: "us-west-2" paths: - $(ls firmware/portapack-h1-firmware-*.tar.bz2 | tr "\n" ":") - $(ls firmware/portapack-h1-firmware-*.zip | tr "\n" ":") From 250da67d0f6049c4de934d9386184ec47c4f7aa5 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 15:47:08 -0700 Subject: [PATCH 109/224] Remove region, put in environment variables. --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 32a717e32..da50f6cf4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,6 @@ script: addons: artifacts: - s3_region: "us-west-2" paths: - $(ls firmware/portapack-h1-firmware-*.tar.bz2 | tr "\n" ":") - $(ls firmware/portapack-h1-firmware-*.zip | tr "\n" ":") From 24e398ca6229f47f1fbee9229efdad4347773d30 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 20:23:11 -0700 Subject: [PATCH 110/224] Add HackRF mode explanation text. --- firmware/application/ui_navigation.cpp | 4 ++++ firmware/application/ui_navigation.hpp | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/firmware/application/ui_navigation.cpp b/firmware/application/ui_navigation.cpp index 3096cfc20..5a9e5b52d 100644 --- a/firmware/application/ui_navigation.cpp +++ b/firmware/application/ui_navigation.cpp @@ -155,6 +155,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 ee816a042..fae713e57 100644 --- a/firmware/application/ui_navigation.hpp +++ b/firmware/application/ui_navigation.hpp @@ -93,8 +93,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 { From d4c85bd786d392f54fe82a5ef65aefdf7a459943 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 20:38:59 -0700 Subject: [PATCH 111/224] Move receiver "back" button to separate row. --- firmware/application/ui_receiver.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/firmware/application/ui_receiver.hpp b/firmware/application/ui_receiver.hpp index 01725aad5..fe2e05859 100644 --- a/firmware/application/ui_receiver.hpp +++ b/firmware/application/ui_receiver.hpp @@ -386,12 +386,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 { From 687e627daeb43365cc064bd6b11fed4df99154c1 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 21:04:27 -0700 Subject: [PATCH 112/224] Mechanism to clear waterfall when switching modulations. --- firmware/application/ui_receiver.cpp | 2 ++ firmware/application/ui_spectrum.hpp | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/firmware/application/ui_receiver.cpp b/firmware/application/ui_receiver.cpp index 2ff8c8f23..97cc21dbe 100644 --- a/firmware/application/ui_receiver.cpp +++ b/firmware/application/ui_receiver.cpp @@ -567,6 +567,8 @@ void ReceiverView::on_modulation_changed(int32_t modulation) { receiver_model.set_baseband_bandwidth(1750000); break; } + + waterfall.clear(); } void ReceiverView::on_show_options_frequency() { diff --git a/firmware/application/ui_spectrum.hpp b/firmware/application/ui_spectrum.hpp index aba04a48b..cc1fa314c 100644 --- a/firmware/application/ui_spectrum.hpp +++ b/firmware/application/ui_spectrum.hpp @@ -75,6 +75,12 @@ public: draw_frequency_ticks(painter, r); } + void clear() { + spectrum_sampling_rate = 0; + spectrum_bins = 0; + set_dirty(); + } + private: static constexpr Dim filter_band_height = 4; @@ -197,6 +203,13 @@ public: (void)painter; } + void clear() { + display.fill_rectangle( + screen_rect(), + Color::black() + ); + } + void on_channel_spectrum( const ChannelSpectrum& spectrum ) { @@ -260,6 +273,11 @@ public: (void)painter; } + void clear() { + waterfall_view.clear(); + frequency_scale.clear(); + } + private: WaterfallView waterfall_view; FrequencyScale frequency_scale; From c52de7abe69c2b12df8c1df765fb2665a9c7da92 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 21:05:32 -0700 Subject: [PATCH 113/224] Clean up baseband/RSSI streaming control. Address hang-up of baseband and RSSI when switching modulation modes really fast. --- firmware/baseband/main.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 8952dcca3..4ef32f738 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -278,6 +278,11 @@ int main(void) { auto message = reinterpret_cast(p); if( message->configuration.mode != baseband_configuration.mode ) { + if( baseband_processor ) { + baseband::dma::disable(); + rf::rssi::stop(); + } + // TODO: Timing problem around disabling DMA and nulling and deleting old processor auto old_p = baseband_processor; baseband_processor = nullptr; @@ -313,9 +318,6 @@ int main(void) { rf::rssi::start(); } baseband::dma::enable(direction); - } else { - baseband::dma::disable(); - rf::rssi::stop(); } } From c4de9c4423d9b1d50ab86a4f371e7ba2fe4d0a9d Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Tue, 1 Sep 2015 21:05:47 -0700 Subject: [PATCH 114/224] Mute audio whenever baseband mode is changed. --- firmware/baseband/main.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/firmware/baseband/main.cpp b/firmware/baseband/main.cpp index 4ef32f738..3f0410707 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -279,6 +279,7 @@ int main(void) { if( message->configuration.mode != baseband_configuration.mode ) { if( baseband_processor ) { + i2s::i2s0::tx_mute(); baseband::dma::disable(); rf::rssi::stop(); } From e2bb77d7560c25f490f210b3118532a560245bba Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 2 Sep 2015 11:29:38 -0700 Subject: [PATCH 115/224] Change wideband FFT bin filter, clean up code a bit. --- firmware/baseband/proc_wideband_spectrum.cpp | 291 ++++++++++--------- 1 file changed, 150 insertions(+), 141 deletions(-) diff --git a/firmware/baseband/proc_wideband_spectrum.cpp b/firmware/baseband/proc_wideband_spectrum.cpp index aa8d6f5f2..8fc46197c 100644 --- a/firmware/baseband/proc_wideband_spectrum.cpp +++ b/firmware/baseband/proc_wideband_spectrum.cpp @@ -31,136 +31,144 @@ using namespace lpc43xx; #include -// numpy.array(numpy.round(scipy.signal.windows.blackmanharris(1024) * 32767), dtype=numpy.int16) -static constexpr std::array window_blackmanharris_1024 { { - 2, 2, 2, 2, 2, 2, 3, 3, - 3, 3, 4, 4, 5, 5, 5, 6, - 7, 7, 8, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, - 22, 23, 24, 26, 27, 29, 31, 32, - 34, 36, 38, 40, 42, 44, 46, 48, - 51, 53, 56, 58, 61, 64, 67, 70, - 73, 76, 79, 82, 86, 89, 93, 97, - 100, 104, 109, 113, 117, 122, 126, 131, - 136, 141, 146, 151, 156, 162, 168, 173, - 179, 186, 192, 198, 205, 212, 219, 226, - 233, 241, 249, 256, 265, 273, 281, 290, - 299, 308, 317, 327, 337, 347, 357, 367, - 378, 389, 400, 411, 423, 435, 447, 459, - 472, 485, 498, 512, 526, 540, 554, 569, - 584, 599, 614, 630, 646, 663, 680, 697, - 714, 732, 750, 769, 788, 807, 827, 846, - 867, 887, 908, 930, 952, 974, 996, 1019, - 1043, 1066, 1091, 1115, 1140, 1166, 1192, 1218, - 1245, 1272, 1299, 1327, 1356, 1385, 1414, 1444, - 1475, 1506, 1537, 1569, 1601, 1634, 1667, 1701, - 1735, 1770, 1805, 1841, 1878, 1915, 1952, 1990, - 2029, 2068, 2107, 2147, 2188, 2229, 2271, 2314, - 2357, 2400, 2444, 2489, 2534, 2580, 2627, 2674, - 2721, 2770, 2819, 2868, 2918, 2969, 3020, 3072, - 3125, 3178, 3232, 3287, 3342, 3398, 3454, 3511, - 3569, 3628, 3687, 3746, 3807, 3868, 3930, 3992, - 4055, 4119, 4183, 4249, 4314, 4381, 4448, 4516, - 4585, 4654, 4724, 4794, 4866, 4938, 5010, 5084, - 5158, 5233, 5308, 5385, 5462, 5539, 5618, 5697, - 5776, 5857, 5938, 6020, 6103, 6186, 6270, 6355, - 6440, 6526, 6613, 6700, 6789, 6878, 6967, 7058, - 7149, 7240, 7333, 7426, 7520, 7614, 7710, 7805, - 7902, 7999, 8097, 8196, 8295, 8395, 8496, 8597, - 8699, 8802, 8905, 9009, 9114, 9219, 9325, 9431, - 9539, 9646, 9755, 9864, 9974, 10084, 10195, 10306, -10419, 10531, 10645, 10759, 10873, 10988, 11104, 11220, -11337, 11454, 11572, 11691, 11810, 11929, 12049, 12170, -12291, 12412, 12534, 12657, 12780, 12903, 13027, 13152, -13277, 13402, 13528, 13654, 13781, 13908, 14035, 14163, -14291, 14420, 14549, 14678, 14808, 14938, 15068, 15199, -15330, 15461, 15593, 15725, 15857, 15989, 16122, 16255, -16388, 16522, 16655, 16789, 16923, 17058, 17192, 17327, -17461, 17596, 17731, 17867, 18002, 18137, 18273, 18408, -18544, 18680, 18815, 18951, 19087, 19223, 19358, 19494, -19630, 19765, 19901, 20037, 20172, 20308, 20443, 20578, -20713, 20848, 20983, 21118, 21252, 21386, 21520, 21654, -21788, 21921, 22054, 22187, 22320, 22452, 22584, 22716, -22847, 22978, 23109, 23239, 23369, 23499, 23628, 23757, -23885, 24013, 24140, 24267, 24394, 24520, 24645, 24770, -24894, 25018, 25142, 25264, 25386, 25508, 25629, 25749, -25869, 25988, 26106, 26224, 26341, 26457, 26573, 26688, -26802, 26915, 27028, 27139, 27251, 27361, 27470, 27579, -27687, 27794, 27900, 28005, 28109, 28213, 28315, 28417, -28518, 28617, 28716, 28814, 28911, 29007, 29102, 29196, -29288, 29380, 29471, 29561, 29650, 29737, 29824, 29909, -29994, 30077, 30159, 30240, 30320, 30399, 30477, 30553, -30628, 30702, 30775, 30847, 30918, 30987, 31055, 31122, -31188, 31252, 31315, 31377, 31438, 31497, 31555, 31612, -31667, 31721, 31774, 31826, 31876, 31925, 31972, 32019, -32064, 32107, 32149, 32190, 32230, 32268, 32304, 32340, -32374, 32406, 32438, 32467, 32496, 32523, 32548, 32573, -32595, 32617, 32637, 32655, 32672, 32688, 32702, 32715, -32727, 32737, 32745, 32753, 32758, 32763, 32765, 32767, -32767, 32765, 32763, 32758, 32753, 32745, 32737, 32727, -32715, 32702, 32688, 32672, 32655, 32637, 32617, 32595, -32573, 32548, 32523, 32496, 32467, 32438, 32406, 32374, -32340, 32304, 32268, 32230, 32190, 32149, 32107, 32064, -32019, 31972, 31925, 31876, 31826, 31774, 31721, 31667, -31612, 31555, 31497, 31438, 31377, 31315, 31252, 31188, -31122, 31055, 30987, 30918, 30847, 30775, 30702, 30628, -30553, 30477, 30399, 30320, 30240, 30159, 30077, 29994, -29909, 29824, 29737, 29650, 29561, 29471, 29380, 29288, -29196, 29102, 29007, 28911, 28814, 28716, 28617, 28518, -28417, 28315, 28213, 28109, 28005, 27900, 27794, 27687, -27579, 27470, 27361, 27251, 27139, 27028, 26915, 26802, -26688, 26573, 26457, 26341, 26224, 26106, 25988, 25869, -25749, 25629, 25508, 25386, 25264, 25142, 25018, 24894, -24770, 24645, 24520, 24394, 24267, 24140, 24013, 23885, -23757, 23628, 23499, 23369, 23239, 23109, 22978, 22847, -22716, 22584, 22452, 22320, 22187, 22054, 21921, 21788, -21654, 21520, 21386, 21252, 21118, 20983, 20848, 20713, -20578, 20443, 20308, 20172, 20037, 19901, 19765, 19630, -19494, 19358, 19223, 19087, 18951, 18815, 18680, 18544, -18408, 18273, 18137, 18002, 17867, 17731, 17596, 17461, -17327, 17192, 17058, 16923, 16789, 16655, 16522, 16388, -16255, 16122, 15989, 15857, 15725, 15593, 15461, 15330, -15199, 15068, 14938, 14808, 14678, 14549, 14420, 14291, -14163, 14035, 13908, 13781, 13654, 13528, 13402, 13277, -13152, 13027, 12903, 12780, 12657, 12534, 12412, 12291, -12170, 12049, 11929, 11810, 11691, 11572, 11454, 11337, -11220, 11104, 10988, 10873, 10759, 10645, 10531, 10419, -10306, 10195, 10084, 9974, 9864, 9755, 9646, 9539, - 9431, 9325, 9219, 9114, 9009, 8905, 8802, 8699, - 8597, 8496, 8395, 8295, 8196, 8097, 7999, 7902, - 7805, 7710, 7614, 7520, 7426, 7333, 7240, 7149, - 7058, 6967, 6878, 6789, 6700, 6613, 6526, 6440, - 6355, 6270, 6186, 6103, 6020, 5938, 5857, 5776, - 5697, 5618, 5539, 5462, 5385, 5308, 5233, 5158, - 5084, 5010, 4938, 4866, 4794, 4724, 4654, 4585, - 4516, 4448, 4381, 4314, 4249, 4183, 4119, 4055, - 3992, 3930, 3868, 3807, 3746, 3687, 3628, 3569, - 3511, 3454, 3398, 3342, 3287, 3232, 3178, 3125, - 3072, 3020, 2969, 2918, 2868, 2819, 2770, 2721, - 2674, 2627, 2580, 2534, 2489, 2444, 2400, 2357, - 2314, 2271, 2229, 2188, 2147, 2107, 2068, 2029, - 1990, 1952, 1915, 1878, 1841, 1805, 1770, 1735, - 1701, 1667, 1634, 1601, 1569, 1537, 1506, 1475, - 1444, 1414, 1385, 1356, 1327, 1299, 1272, 1245, - 1218, 1192, 1166, 1140, 1115, 1091, 1066, 1043, - 1019, 996, 974, 952, 930, 908, 887, 867, - 846, 827, 807, 788, 769, 750, 732, 714, - 697, 680, 663, 646, 630, 614, 599, 584, - 569, 554, 540, 526, 512, 498, 485, 472, - 459, 447, 435, 423, 411, 400, 389, 378, - 367, 357, 347, 337, 327, 317, 308, 299, - 290, 281, 273, 265, 256, 249, 241, 233, - 226, 219, 212, 205, 198, 192, 186, 179, - 173, 168, 162, 156, 151, 146, 141, 136, - 131, 126, 122, 117, 113, 109, 104, 100, - 97, 93, 89, 86, 82, 79, 76, 73, - 70, 67, 64, 61, 58, 56, 53, 51, - 48, 46, 44, 42, 40, 38, 36, 34, - 32, 31, 29, 27, 26, 24, 23, 22, - 20, 19, 18, 17, 16, 15, 14, 13, - 12, 11, 10, 9, 8, 8, 7, 7, - 6, 5, 5, 5, 4, 4, 3, 3, - 3, 3, 2, 2, 2, 2, 2, 2, +/* +Employ window-presum technique with a window constructed to act like a bin filter. +See: http://www.embedded.com/design/real-time-and-performance/4007611/DSP-Tricks-Building-a-practical-spectrum-analyzer + +import scipy.signal + +d = scipy.signal.remez(1024, (0.0, 32000, 48000, 10000000), (1, 0), Hz=20000000) +for n in range(0, len(d), 8): print(' '.join(['%5d,' % int(round(v * 32768 * 128)) for v in d[n:n+8]])) +*/ +static constexpr std::array window_wideband_bin_lpf { { + 0, -3409, -3284, -3358, -3235, -3312, -3187, -3270, + -3143, -3233, -3100, -3202, -3057, -3186, -3009, -3261, + -2777, -2904, -3087, -3076, -3058, -3069, -3013, -3037, + -2969, -3004, -2931, -2976, -2898, -2956, -2870, -2957, + -2871, -2830, -2866, -2914, -2874, -2919, -2864, -2911, + -2854, -2905, -2849, -2905, -2851, -2910, -2858, -2917, + -2893, -2901, -2866, -2949, -2901, -2970, -2914, -2979, + -2923, -2987, -2932, -2997, -2945, -3009, -2960, -3020, + -2986, -3043, -2971, -3059, -3005, -3082, -3023, -3094, + -3035, -3105, -3048, -3119, -3064, -3135, -3083, -3153, + -3102, -3186, -3111, -3193, -3141, -3221, -3166, -3242, + -3186, -3260, -3204, -3280, -3225, -3302, -3249, -3327, + -3269, -3358, -3296, -3367, -3318, -3395, -3344, -3418, + -3364, -3436, -3381, -3455, -3400, -3474, -3420, -3495, + -3437, -3515, -3464, -3527, -3475, -3546, -3494, -3564, + -3510, -3578, -3523, -3591, -3535, -3604, -3549, -3618, + -3563, -3628, -3581, -3641, -3585, -3650, -3596, -3661, + -3605, -3668, -3610, -3672, -3615, -3676, -3619, -3680, + -3624, -3680, -3626, -3686, -3622, -3680, -3619, -3677, + -3616, -3672, -3609, -3663, -3600, -3653, -3590, -3642, + -3580, -3630, -3564, -3619, -3550, -3599, -3531, -3581, + -3513, -3561, -3492, -3538, -3468, -3513, -3443, -3487, + -3417, -3461, -3386, -3432, -3358, -3398, -3323, -3362, + -3288, -3326, -3251, -3287, -3210, -3245, -3168, -3202, + -3123, -3158, -3076, -3108, -3030, -3059, -2976, -3004, + -2922, -2949, -2866, -2892, -2808, -2832, -2746, -2770, + -2683, -2706, -2619, -2637, -2552, -2570, -2481, -2497, + -2407, -2423, -2333, -2347, -2256, -2269, -2177, -2188, + -2095, -2104, -2012, -2018, -1924, -1931, -1835, -1839, + -1742, -1745, -1648, -1650, -1552, -1552, -1452, -1451, + -1351, -1347, -1247, -1243, -1139, -1135, -1031, -1024, + -919, -910, -805, -795, -689, -678, -571, -558, + -451, -436, -327, -313, -202, -186, -75, -57, + 55, 75, 187, 208, 320, 342, 456, 480, + 594, 619, 735, 760, 877, 905, 1021, 1050, + 1168, 1199, 1317, 1349, 1467, 1500, 1619, 1653, + 1773, 1808, 1930, 1966, 2086, 2125, 2247, 2285, + 2407, 2448, 2570, 2611, 2734, 2776, 2899, 2942, + 3066, 3110, 3234, 3280, 3403, 3450, 3575, 3622, + 3746, 3795, 3920, 3970, 4095, 4145, 4270, 4321, + 4446, 4499, 4624, 4678, 4803, 4856, 4983, 5037, + 5163, 5218, 5344, 5400, 5526, 5582, 5708, 5765, + 5891, 5948, 6074, 6133, 6259, 6316, 6442, 6502, + 6627, 6686, 6811, 6871, 6996, 7057, 7181, 7241, + 7365, 7427, 7550, 7612, 7736, 7797, 7920, 7982, + 8105, 8167, 8288, 8351, 8473, 8536, 8656, 8719, + 8839, 8902, 9022, 9084, 9204, 9267, 9385, 9448, + 9566, 9629, 9745, 9808, 9924, 9987, 10102, 10165, + 10279, 10341, 10455, 10517, 10629, 10692, 10803, 10864, + 10974, 11036, 11145, 11206, 11314, 11375, 11482, 11542, + 11648, 11708, 11812, 11872, 11975, 12035, 12137, 12195, + 12296, 12354, 12453, 12511, 12609, 12666, 12762, 12819, + 12914, 12970, 13063, 13119, 13210, 13265, 13356, 13409, + 13498, 13551, 13639, 13690, 13776, 13827, 13911, 13962, + 14044, 14094, 14174, 14223, 14302, 14349, 14427, 14474, + 14549, 14595, 14669, 14713, 14785, 14828, 14899, 14941, + 15010, 15051, 15117, 15158, 15223, 15261, 15324, 15363, + 15423, 15460, 15519, 15555, 15611, 15646, 15700, 15734, + 15787, 15819, 15870, 15900, 15949, 15978, 16024, 16053, + 16098, 16125, 16166, 16193, 16232, 16257, 16294, 16317, + 16353, 16375, 16409, 16429, 16460, 16480, 16508, 16526, + 16553, 16570, 16594, 16609, 16632, 16645, 16665, 16677, + 16696, 16707, 16723, 16732, 16745, 16754, 16765, 16771, + 16780, 16786, 16792, 16796, 16801, 16803, 16805, 16805, + 16805, 16805, 16803, 16801, 16796, 16792, 16786, 16780, + 16771, 16765, 16754, 16745, 16732, 16723, 16707, 16696, + 16677, 16665, 16645, 16632, 16609, 16594, 16570, 16553, + 16526, 16508, 16480, 16460, 16429, 16409, 16375, 16353, + 16317, 16294, 16257, 16232, 16193, 16166, 16125, 16098, + 16053, 16024, 15978, 15949, 15900, 15870, 15819, 15787, + 15734, 15700, 15646, 15611, 15555, 15519, 15460, 15423, + 15363, 15324, 15261, 15223, 15158, 15117, 15051, 15010, + 14941, 14899, 14828, 14785, 14713, 14669, 14595, 14549, + 14474, 14427, 14349, 14302, 14223, 14174, 14094, 14044, + 13962, 13911, 13827, 13776, 13690, 13639, 13551, 13498, + 13409, 13356, 13265, 13210, 13119, 13063, 12970, 12914, + 12819, 12762, 12666, 12609, 12511, 12453, 12354, 12296, + 12195, 12137, 12035, 11975, 11872, 11812, 11708, 11648, + 11542, 11482, 11375, 11314, 11206, 11145, 11036, 10974, + 10864, 10803, 10692, 10629, 10517, 10455, 10341, 10279, + 10165, 10102, 9987, 9924, 9808, 9745, 9629, 9566, + 9448, 9385, 9267, 9204, 9084, 9022, 8902, 8839, + 8719, 8656, 8536, 8473, 8351, 8288, 8167, 8105, + 7982, 7920, 7797, 7736, 7612, 7550, 7427, 7365, + 7241, 7181, 7057, 6996, 6871, 6811, 6686, 6627, + 6502, 6442, 6316, 6259, 6133, 6074, 5948, 5891, + 5765, 5708, 5582, 5526, 5400, 5344, 5218, 5163, + 5037, 4983, 4856, 4803, 4678, 4624, 4499, 4446, + 4321, 4270, 4145, 4095, 3970, 3920, 3795, 3746, + 3622, 3575, 3450, 3403, 3280, 3234, 3110, 3066, + 2942, 2899, 2776, 2734, 2611, 2570, 2448, 2407, + 2285, 2247, 2125, 2086, 1966, 1930, 1808, 1773, + 1653, 1619, 1500, 1467, 1349, 1317, 1199, 1168, + 1050, 1021, 905, 877, 760, 735, 619, 594, + 480, 456, 342, 320, 208, 187, 75, 55, + -57, -75, -186, -202, -313, -327, -436, -451, + -558, -571, -678, -689, -795, -805, -910, -919, + -1024, -1031, -1135, -1139, -1243, -1247, -1347, -1351, + -1451, -1452, -1552, -1552, -1650, -1648, -1745, -1742, + -1839, -1835, -1931, -1924, -2018, -2012, -2104, -2095, + -2188, -2177, -2269, -2256, -2347, -2333, -2423, -2407, + -2497, -2481, -2570, -2552, -2637, -2619, -2706, -2683, + -2770, -2746, -2832, -2808, -2892, -2866, -2949, -2922, + -3004, -2976, -3059, -3030, -3108, -3076, -3158, -3123, + -3202, -3168, -3245, -3210, -3287, -3251, -3326, -3288, + -3362, -3323, -3398, -3358, -3432, -3386, -3461, -3417, + -3487, -3443, -3513, -3468, -3538, -3492, -3561, -3513, + -3581, -3531, -3599, -3550, -3619, -3564, -3630, -3580, + -3642, -3590, -3653, -3600, -3663, -3609, -3672, -3616, + -3677, -3619, -3680, -3622, -3686, -3626, -3680, -3624, + -3680, -3619, -3676, -3615, -3672, -3610, -3668, -3605, + -3661, -3596, -3650, -3585, -3641, -3581, -3628, -3563, + -3618, -3549, -3604, -3535, -3591, -3523, -3578, -3510, + -3564, -3494, -3546, -3475, -3527, -3464, -3515, -3437, + -3495, -3420, -3474, -3400, -3455, -3381, -3436, -3364, + -3418, -3344, -3395, -3318, -3367, -3296, -3358, -3269, + -3327, -3249, -3302, -3225, -3280, -3204, -3260, -3186, + -3242, -3166, -3221, -3141, -3193, -3111, -3186, -3102, + -3153, -3083, -3135, -3064, -3119, -3048, -3105, -3035, + -3094, -3023, -3082, -3005, -3059, -2971, -3043, -2986, + -3020, -2960, -3009, -2945, -2997, -2932, -2987, -2923, + -2979, -2914, -2970, -2901, -2949, -2866, -2901, -2893, + -2917, -2858, -2910, -2851, -2905, -2849, -2905, -2854, + -2911, -2864, -2919, -2874, -2914, -2866, -2830, -2871, + -2957, -2870, -2956, -2898, -2976, -2931, -3004, -2969, + -3037, -3013, -3069, -3058, -3076, -3087, -2904, -2777, + -3261, -3009, -3186, -3057, -3202, -3100, -3233, -3143, + -3270, -3187, -3312, -3235, -3358, -3284, -3409, 0, } }; void WidebandSpectrum::execute(buffer_c8_t buffer) { @@ -171,18 +179,19 @@ void WidebandSpectrum::execute(buffer_c8_t buffer) { if( channel_spectrum_request_update == false ) { channel_spectrum_request_update = true; - constexpr int32_t k = 128 * 4 * 8; + constexpr int32_t k = 128 * 16; + const auto& window = window_wideband_bin_lpf; for(size_t i=0; i Date: Wed, 2 Sep 2015 17:30:16 -0700 Subject: [PATCH 116/224] Init radio in RX mode, not TX mode. --- firmware/common/pins.hpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) 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) */ From f1ca3fe5bb00df6aaee15259f40ad1cf3f765a48 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 2 Sep 2015 17:45:19 -0700 Subject: [PATCH 117/224] Switch RFFC5072, MAX2837 back to 40MHz reference. Turns out the MAX2837 can't tune the necessary range when given a 50MHz reference. Oops. --- firmware/application/clock_manager.cpp | 16 ++++------------ firmware/common/hackrf_hal.hpp | 4 ++-- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/firmware/application/clock_manager.cpp b/firmware/application/clock_manager.cpp index fdd41b010..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); 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; From 9a3454d6958ead85c1dc55f52657c932207a1fe9 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 2 Sep 2015 18:48:38 -0700 Subject: [PATCH 118/224] Touch code cleanup, stop scanning when no touch. No need to change voltages on touch panel when no touch is detected. This should reduce noise a bit. --- firmware/application/irq_controls.cpp | 53 +++++++++++++++------------ 1 file changed, 29 insertions(+), 24 deletions(-) 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; From f91f17b9fb579976b0e4aaea6c00cdbdc60fa60b Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 2 Sep 2015 18:48:51 -0700 Subject: [PATCH 119/224] Increase touch sensitivity a bit. --- firmware/application/touch.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/application/touch.hpp b/firmware/application/touch.hpp index ec0491feb..cbd13b069 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; From aa733b1b618bf924da6776a1676a4b9dbb1d33c2 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 2 Sep 2015 18:55:00 -0700 Subject: [PATCH 120/224] Remove FSK from receiver menu. It doesn't do anything (yet). --- firmware/application/ui_receiver.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/firmware/application/ui_receiver.hpp b/firmware/application/ui_receiver.hpp index fe2e05859..8cafb9777 100644 --- a/firmware/application/ui_receiver.hpp +++ b/firmware/application/ui_receiver.hpp @@ -418,7 +418,6 @@ private: { " AM ", 0 }, { "NFM ", 1 }, { "WFM ", 2 }, - { "FSK ", 3 }, { "SPEC", 4 }, } }; From 7f46f0d071f63d59c45d7bfd0c29df156c7b4b9c Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 14 Oct 2015 10:44:20 -0700 Subject: [PATCH 121/224] Add tick tracking for all baseband threads. --- .../baseband/baseband_stats_collector.hpp | 30 +++++++++++++++++-- firmware/baseband/main.cpp | 20 +++++++++---- firmware/common/message.hpp | 2 ++ 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/firmware/baseband/baseband_stats_collector.hpp b/firmware/baseband/baseband_stats_collector.hpp index 6fc5439be..fe5c7fe98 100644 --- a/firmware/baseband/baseband_stats_collector.hpp +++ b/firmware/baseband/baseband_stats_collector.hpp @@ -33,6 +33,18 @@ 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,19 @@ 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; + 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; @@ -62,7 +82,13 @@ private: 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/main.cpp b/firmware/baseband/main.cpp index 3f0410707..71fc37ea1 100755 --- a/firmware/baseband/main.cpp +++ b/firmware/baseband/main.cpp @@ -82,6 +82,9 @@ constexpr auto baseband_thread_priority = NORMALPRIO + 20; constexpr auto rssi_thread_priority = NORMALPRIO + 10; +const Thread* thread_main; +const Thread* thread_rssi; + static BasebandProcessor* baseband_processor { nullptr }; static BasebandConfiguration baseband_configuration; @@ -90,7 +93,12 @@ static __attribute__((noreturn)) msg_t baseband_fn(void *arg) { (void)arg; chRegSetThreadName("baseband"); - BasebandStatsCollector stats; + BasebandStatsCollector stats { + chSysGetIdleThread(), + thread_main, + thread_rssi, + chThdSelf() + }; while(true) { // TODO: Place correct sampling rate into buffer returned here: @@ -182,13 +190,15 @@ static void init() { rf::rssi::init(); touch::dma::init(); - chThdCreateStatic(baseband_thread_wa, sizeof(baseband_thread_wa), - baseband_thread_priority, baseband_fn, + thread_main = chThdSelf(); + + thread_rssi = chThdCreateStatic(rssi_thread_wa, sizeof(rssi_thread_wa), + rssi_thread_priority, rssi_fn, nullptr ); - chThdCreateStatic(rssi_thread_wa, sizeof(rssi_thread_wa), - rssi_thread_priority, rssi_fn, + chThdCreateStatic(baseband_thread_wa, sizeof(baseband_thread_wa), + baseband_thread_priority, baseband_fn, nullptr ); } diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index fa06c7034..8d028ea94 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -76,6 +76,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 }; }; From 8f7e26b5c11941406c5c3789faa98bb853c9f0b3 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 14 Oct 2015 10:59:32 -0700 Subject: [PATCH 122/224] Break out BasebandStatsView, add main, RSSI threads. --- firmware/application/Makefile | 1 + .../application/ui_baseband_stats_view.cpp | 73 +++++++++++++++++++ .../application/ui_baseband_stats_view.hpp | 48 ++++++++++++ firmware/application/ui_debug.cpp | 37 ---------- firmware/application/ui_debug.hpp | 21 ------ 5 files changed, 122 insertions(+), 58 deletions(-) create mode 100644 firmware/application/ui_baseband_stats_view.cpp create mode 100644 firmware/application/ui_baseband_stats_view.hpp diff --git a/firmware/application/Makefile b/firmware/application/Makefile index b212639c0..e875d25d4 100755 --- a/firmware/application/Makefile +++ b/firmware/application/Makefile @@ -161,6 +161,7 @@ CPPSRC = main.cpp \ ui_font_fixed_8x16.cpp \ ui_setup.cpp \ ui_debug.cpp \ + ui_baseband_stats_view.cpp \ ui_console.cpp \ ui_receiver.cpp \ ui_spectrum.cpp \ diff --git a/firmware/application/ui_baseband_stats_view.cpp b/firmware/application/ui_baseband_stats_view.cpp new file mode 100644 index 000000000..2e54b67ba --- /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_debug.cpp b/firmware/application/ui_debug.cpp index d337a7068..28d99abf3 100644 --- a/firmware/application/ui_debug.cpp +++ b/firmware/application/ui_debug.cpp @@ -25,45 +25,8 @@ #include "radio.hpp" -#include "hackrf_hal.hpp" -using namespace hackrf::one; - namespace ui { -/* BasebandStatsView *****************************************************/ - -BasebandStatsView::BasebandStatsView() { - add_children({ { - &text_used, - &text_idle, - } }); -} - -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) { - 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, diff --git a/firmware/application/ui_debug.hpp b/firmware/application/ui_debug.hpp index 3f92fa6d3..92fa0c47b 100644 --- a/firmware/application/ui_debug.hpp +++ b/firmware/application/ui_debug.hpp @@ -32,27 +32,6 @@ namespace ui { -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); From 882fbbef3182973be53e06107580478c7f7e4df3 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 17 Sep 2015 17:27:37 -0700 Subject: [PATCH 123/224] Add more fft_swap bit reversal functions. --- firmware/common/dsp_fft.hpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/firmware/common/dsp_fft.hpp b/firmware/common/dsp_fft.hpp index 5fbf08428..3f88b6a3d 100644 --- a/firmware/common/dsp_fft.hpp +++ b/firmware/common/dsp_fft.hpp @@ -29,6 +29,7 @@ #include #include +#include "dsp_types.hpp" #include "complex.hpp" #include "hal.h" @@ -54,6 +55,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 +84,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]); } From 291de8f869bfd3fa0cb0b87eec6c15fa8bf29f33 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 17 Sep 2015 17:37:05 -0700 Subject: [PATCH 124/224] Change channel_spectrum type to std::complex. Move FFT bit-reversal to complex -> complex copy. Change window so that adjacent bins have constant(-ish) gain. Change window to float. Change time domain samples to accumulate at even intervals over the FFT interval. --- firmware/baseband/baseband_processor.cpp | 10 +- firmware/baseband/baseband_processor.hpp | 3 +- firmware/baseband/proc_wideband_spectrum.cpp | 439 ++++++++++++------- firmware/baseband/proc_wideband_spectrum.hpp | 4 + 4 files changed, 294 insertions(+), 162 deletions(-) diff --git a/firmware/baseband/baseband_processor.cpp b/firmware/baseband/baseband_processor.cpp index 7edb8da10..83e6d857e 100644 --- a/firmware/baseband/baseband_processor.cpp +++ b/firmware/baseband/baseband_processor.cpp @@ -38,14 +38,12 @@ 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. */ - std::array, 256> samples_swapped; - fft_swap(channel_spectrum, samples_swapped); channel_spectrum_request_update = false; - fft_c_preswapped(samples_swapped); + fft_c_preswapped(channel_spectrum); ChannelSpectrumMessage spectrum_message; for(size_t i=0; i #include +#include class BasebandProcessor { public: @@ -52,7 +53,7 @@ protected: void fill_audio_buffer(const buffer_s16_t audio); volatile bool channel_spectrum_request_update { false }; - std::array channel_spectrum; + 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 }; diff --git a/firmware/baseband/proc_wideband_spectrum.cpp b/firmware/baseband/proc_wideband_spectrum.cpp index 8fc46197c..62d93885b 100644 --- a/firmware/baseband/proc_wideband_spectrum.cpp +++ b/firmware/baseband/proc_wideband_spectrum.cpp @@ -26,6 +26,8 @@ #include "i2s.hpp" using namespace lpc43xx; +#include "dsp_fft.hpp" + #include #include @@ -35,173 +37,300 @@ using namespace lpc43xx; Employ window-presum technique with a window constructed to act like a bin filter. See: http://www.embedded.com/design/real-time-and-performance/4007611/DSP-Tricks-Building-a-practical-spectrum-analyzer -import scipy.signal +20MHz / 256 bins = 78.125kHz/bin -d = scipy.signal.remez(1024, (0.0, 32000, 48000, 10000000), (1, 0), Hz=20000000) -for n in range(0, len(d), 8): print(' '.join(['%5d,' % int(round(v * 32768 * 128)) for v in d[n:n+8]])) +Taps made with IPython Notebook "specan_lpf", 26041.666667Hz pass, 53400Hz stop, 1024 taps, Remez, gain of 4 * 128. */ -static constexpr std::array window_wideband_bin_lpf { { - 0, -3409, -3284, -3358, -3235, -3312, -3187, -3270, - -3143, -3233, -3100, -3202, -3057, -3186, -3009, -3261, - -2777, -2904, -3087, -3076, -3058, -3069, -3013, -3037, - -2969, -3004, -2931, -2976, -2898, -2956, -2870, -2957, - -2871, -2830, -2866, -2914, -2874, -2919, -2864, -2911, - -2854, -2905, -2849, -2905, -2851, -2910, -2858, -2917, - -2893, -2901, -2866, -2949, -2901, -2970, -2914, -2979, - -2923, -2987, -2932, -2997, -2945, -3009, -2960, -3020, - -2986, -3043, -2971, -3059, -3005, -3082, -3023, -3094, - -3035, -3105, -3048, -3119, -3064, -3135, -3083, -3153, - -3102, -3186, -3111, -3193, -3141, -3221, -3166, -3242, - -3186, -3260, -3204, -3280, -3225, -3302, -3249, -3327, - -3269, -3358, -3296, -3367, -3318, -3395, -3344, -3418, - -3364, -3436, -3381, -3455, -3400, -3474, -3420, -3495, - -3437, -3515, -3464, -3527, -3475, -3546, -3494, -3564, - -3510, -3578, -3523, -3591, -3535, -3604, -3549, -3618, - -3563, -3628, -3581, -3641, -3585, -3650, -3596, -3661, - -3605, -3668, -3610, -3672, -3615, -3676, -3619, -3680, - -3624, -3680, -3626, -3686, -3622, -3680, -3619, -3677, - -3616, -3672, -3609, -3663, -3600, -3653, -3590, -3642, - -3580, -3630, -3564, -3619, -3550, -3599, -3531, -3581, - -3513, -3561, -3492, -3538, -3468, -3513, -3443, -3487, - -3417, -3461, -3386, -3432, -3358, -3398, -3323, -3362, - -3288, -3326, -3251, -3287, -3210, -3245, -3168, -3202, - -3123, -3158, -3076, -3108, -3030, -3059, -2976, -3004, - -2922, -2949, -2866, -2892, -2808, -2832, -2746, -2770, - -2683, -2706, -2619, -2637, -2552, -2570, -2481, -2497, - -2407, -2423, -2333, -2347, -2256, -2269, -2177, -2188, - -2095, -2104, -2012, -2018, -1924, -1931, -1835, -1839, - -1742, -1745, -1648, -1650, -1552, -1552, -1452, -1451, - -1351, -1347, -1247, -1243, -1139, -1135, -1031, -1024, - -919, -910, -805, -795, -689, -678, -571, -558, - -451, -436, -327, -313, -202, -186, -75, -57, - 55, 75, 187, 208, 320, 342, 456, 480, - 594, 619, 735, 760, 877, 905, 1021, 1050, - 1168, 1199, 1317, 1349, 1467, 1500, 1619, 1653, - 1773, 1808, 1930, 1966, 2086, 2125, 2247, 2285, - 2407, 2448, 2570, 2611, 2734, 2776, 2899, 2942, - 3066, 3110, 3234, 3280, 3403, 3450, 3575, 3622, - 3746, 3795, 3920, 3970, 4095, 4145, 4270, 4321, - 4446, 4499, 4624, 4678, 4803, 4856, 4983, 5037, - 5163, 5218, 5344, 5400, 5526, 5582, 5708, 5765, - 5891, 5948, 6074, 6133, 6259, 6316, 6442, 6502, - 6627, 6686, 6811, 6871, 6996, 7057, 7181, 7241, - 7365, 7427, 7550, 7612, 7736, 7797, 7920, 7982, - 8105, 8167, 8288, 8351, 8473, 8536, 8656, 8719, - 8839, 8902, 9022, 9084, 9204, 9267, 9385, 9448, - 9566, 9629, 9745, 9808, 9924, 9987, 10102, 10165, - 10279, 10341, 10455, 10517, 10629, 10692, 10803, 10864, - 10974, 11036, 11145, 11206, 11314, 11375, 11482, 11542, - 11648, 11708, 11812, 11872, 11975, 12035, 12137, 12195, - 12296, 12354, 12453, 12511, 12609, 12666, 12762, 12819, - 12914, 12970, 13063, 13119, 13210, 13265, 13356, 13409, - 13498, 13551, 13639, 13690, 13776, 13827, 13911, 13962, - 14044, 14094, 14174, 14223, 14302, 14349, 14427, 14474, - 14549, 14595, 14669, 14713, 14785, 14828, 14899, 14941, - 15010, 15051, 15117, 15158, 15223, 15261, 15324, 15363, - 15423, 15460, 15519, 15555, 15611, 15646, 15700, 15734, - 15787, 15819, 15870, 15900, 15949, 15978, 16024, 16053, - 16098, 16125, 16166, 16193, 16232, 16257, 16294, 16317, - 16353, 16375, 16409, 16429, 16460, 16480, 16508, 16526, - 16553, 16570, 16594, 16609, 16632, 16645, 16665, 16677, - 16696, 16707, 16723, 16732, 16745, 16754, 16765, 16771, - 16780, 16786, 16792, 16796, 16801, 16803, 16805, 16805, - 16805, 16805, 16803, 16801, 16796, 16792, 16786, 16780, - 16771, 16765, 16754, 16745, 16732, 16723, 16707, 16696, - 16677, 16665, 16645, 16632, 16609, 16594, 16570, 16553, - 16526, 16508, 16480, 16460, 16429, 16409, 16375, 16353, - 16317, 16294, 16257, 16232, 16193, 16166, 16125, 16098, - 16053, 16024, 15978, 15949, 15900, 15870, 15819, 15787, - 15734, 15700, 15646, 15611, 15555, 15519, 15460, 15423, - 15363, 15324, 15261, 15223, 15158, 15117, 15051, 15010, - 14941, 14899, 14828, 14785, 14713, 14669, 14595, 14549, - 14474, 14427, 14349, 14302, 14223, 14174, 14094, 14044, - 13962, 13911, 13827, 13776, 13690, 13639, 13551, 13498, - 13409, 13356, 13265, 13210, 13119, 13063, 12970, 12914, - 12819, 12762, 12666, 12609, 12511, 12453, 12354, 12296, - 12195, 12137, 12035, 11975, 11872, 11812, 11708, 11648, - 11542, 11482, 11375, 11314, 11206, 11145, 11036, 10974, - 10864, 10803, 10692, 10629, 10517, 10455, 10341, 10279, - 10165, 10102, 9987, 9924, 9808, 9745, 9629, 9566, - 9448, 9385, 9267, 9204, 9084, 9022, 8902, 8839, - 8719, 8656, 8536, 8473, 8351, 8288, 8167, 8105, - 7982, 7920, 7797, 7736, 7612, 7550, 7427, 7365, - 7241, 7181, 7057, 6996, 6871, 6811, 6686, 6627, - 6502, 6442, 6316, 6259, 6133, 6074, 5948, 5891, - 5765, 5708, 5582, 5526, 5400, 5344, 5218, 5163, - 5037, 4983, 4856, 4803, 4678, 4624, 4499, 4446, - 4321, 4270, 4145, 4095, 3970, 3920, 3795, 3746, - 3622, 3575, 3450, 3403, 3280, 3234, 3110, 3066, - 2942, 2899, 2776, 2734, 2611, 2570, 2448, 2407, - 2285, 2247, 2125, 2086, 1966, 1930, 1808, 1773, - 1653, 1619, 1500, 1467, 1349, 1317, 1199, 1168, - 1050, 1021, 905, 877, 760, 735, 619, 594, - 480, 456, 342, 320, 208, 187, 75, 55, - -57, -75, -186, -202, -313, -327, -436, -451, - -558, -571, -678, -689, -795, -805, -910, -919, - -1024, -1031, -1135, -1139, -1243, -1247, -1347, -1351, - -1451, -1452, -1552, -1552, -1650, -1648, -1745, -1742, - -1839, -1835, -1931, -1924, -2018, -2012, -2104, -2095, - -2188, -2177, -2269, -2256, -2347, -2333, -2423, -2407, - -2497, -2481, -2570, -2552, -2637, -2619, -2706, -2683, - -2770, -2746, -2832, -2808, -2892, -2866, -2949, -2922, - -3004, -2976, -3059, -3030, -3108, -3076, -3158, -3123, - -3202, -3168, -3245, -3210, -3287, -3251, -3326, -3288, - -3362, -3323, -3398, -3358, -3432, -3386, -3461, -3417, - -3487, -3443, -3513, -3468, -3538, -3492, -3561, -3513, - -3581, -3531, -3599, -3550, -3619, -3564, -3630, -3580, - -3642, -3590, -3653, -3600, -3663, -3609, -3672, -3616, - -3677, -3619, -3680, -3622, -3686, -3626, -3680, -3624, - -3680, -3619, -3676, -3615, -3672, -3610, -3668, -3605, - -3661, -3596, -3650, -3585, -3641, -3581, -3628, -3563, - -3618, -3549, -3604, -3535, -3591, -3523, -3578, -3510, - -3564, -3494, -3546, -3475, -3527, -3464, -3515, -3437, - -3495, -3420, -3474, -3400, -3455, -3381, -3436, -3364, - -3418, -3344, -3395, -3318, -3367, -3296, -3358, -3269, - -3327, -3249, -3302, -3225, -3280, -3204, -3260, -3186, - -3242, -3166, -3221, -3141, -3193, -3111, -3186, -3102, - -3153, -3083, -3135, -3064, -3119, -3048, -3105, -3035, - -3094, -3023, -3082, -3005, -3059, -2971, -3043, -2986, - -3020, -2960, -3009, -2945, -2997, -2932, -2987, -2923, - -2979, -2914, -2970, -2901, -2949, -2866, -2901, -2893, - -2917, -2858, -2910, -2851, -2905, -2849, -2905, -2854, - -2911, -2864, -2919, -2874, -2914, -2866, -2830, -2871, - -2957, -2870, -2956, -2898, -2976, -2931, -3004, -2969, - -3037, -3013, -3069, -3058, -3076, -3087, -2904, -2777, - -3261, -3009, -3186, -3057, -3202, -3100, -3233, -3143, - -3270, -3187, -3312, -3235, -3358, -3284, -3409, 0, +static constexpr std::array window_wideband_bin_lpf { { + 0.0000000000f, -0.1215729938f, -0.1213842597f, -0.1201684429f, + -0.1201208291f, -0.1190024264f, -0.1190858794f, -0.1180910084f, + -0.1182902140f, -0.1173947314f, -0.1177379144f, -0.1169320615f, + -0.1174165122f, -0.1166760717f, -0.1173065305f, -0.1166353753f, + -0.1174295604f, -0.1168115435f, -0.1177737061f, -0.1171681501f, + -0.1183154633f, -0.1176885372f, -0.1190734477f, -0.1183823726f, + -0.1200564042f, -0.1191925052f, -0.1212624937f, -0.1200347844f, + -0.1227782673f, -0.1205369109f, -0.1247875900f, -0.1173893915f, + -0.1356269751f, -0.1333820215f, -0.1230013683f, -0.1270419996f, + -0.1248521391f, -0.1280766855f, -0.1275474455f, -0.1303677621f, + -0.1305094750f, -0.1330985791f, -0.1335694857f, -0.1359864220f, + -0.1366453783f, -0.1389458751f, -0.1397338876f, -0.1419434716f, + -0.1428068116f, -0.1449481895f, -0.1458627832f, -0.1479788256f, + -0.1489403301f, -0.1510623954f, -0.1520476681f, -0.1541795914f, + -0.1551676484f, -0.1573540028f, -0.1583282171f, -0.1606274956f, + -0.1614806858f, -0.1640690747f, -0.1645983125f, -0.1683593655f, + -0.1685811576f, -0.1666149935f, -0.1723006308f, -0.1738005522f, + -0.1764397529f, -0.1778294249f, -0.1798377067f, -0.1812660021f, + -0.1831168886f, -0.1846305866f, -0.1864679413f, -0.1881030278f, + -0.1899836720f, -0.1917311189f, -0.1936526632f, -0.1954904285f, + -0.1974621775f, -0.1993785604f, -0.2013983100f, -0.2033652690f, + -0.2054038199f, -0.2073919547f, -0.2094317510f, -0.2114475228f, + -0.2134958020f, -0.2155244502f, -0.2175598198f, -0.2195723764f, + -0.2216212397f, -0.2236245172f, -0.2256330226f, -0.2276718013f, + -0.2285011851f, -0.2330266272f, -0.2341760732f, -0.2355468158f, + -0.2372897729f, -0.2390892017f, -0.2410984360f, -0.2430630996f, + -0.2451131271f, -0.2470901019f, -0.2491104380f, -0.2510271295f, + -0.2529788379f, -0.2548171418f, -0.2567089643f, -0.2584896769f, + -0.2603277216f, -0.2620527778f, -0.2638390865f, -0.2655133466f, + -0.2672727018f, -0.2689155628f, -0.2706716369f, -0.2722769142f, + -0.2740080396f, -0.2755608442f, -0.2772761254f, -0.2787902978f, + -0.2804988036f, -0.2818896819f, -0.2836812630f, -0.2847616987f, + -0.2872351631f, -0.2879411883f, -0.2887415908f, -0.2908411467f, + -0.2922042842f, -0.2938671020f, -0.2950580040f, -0.2964174081f, + -0.2974931002f, -0.2987161065f, -0.2997260603f, -0.3008800902f, + -0.3018593574f, -0.3029682798f, -0.3039122280f, -0.3049525345f, + -0.3058372184f, -0.3068011429f, -0.3076169401f, -0.3085060392f, + -0.3092353383f, -0.3100296179f, -0.3106447420f, -0.3113288653f, + -0.3118458639f, -0.3124439347f, -0.3128663068f, -0.3133679403f, + -0.3136545108f, -0.3141297440f, -0.3142523940f, -0.3147549076f, + -0.3146688330f, -0.3145152697f, -0.3154945639f, -0.3152392795f, + -0.3152146050f, -0.3149481827f, -0.3148580017f, -0.3146624743f, + -0.3145480407f, -0.3143048413f, -0.3140959719f, -0.3137462882f, + -0.3133944699f, -0.3129048624f, -0.3123958369f, -0.3117751598f, + -0.3111336729f, -0.3103913733f, -0.3096257208f, -0.3087558210f, + -0.3078644089f, -0.3068771119f, -0.3058756301f, -0.3047953307f, + -0.3036791840f, -0.3024750370f, -0.3012206975f, -0.2998832522f, + -0.2985327732f, -0.2970457316f, -0.2955408715f, -0.2939578995f, + -0.2921271926f, -0.2909536921f, -0.2886979015f, -0.2867034021f, + -0.2848865889f, -0.2829509809f, -0.2809996598f, -0.2788599641f, + -0.2766682382f, -0.2743418063f, -0.2719823809f, -0.2695102609f, + -0.2670290887f, -0.2644425265f, -0.2618581518f, -0.2591571117f, + -0.2564433319f, -0.2536057399f, -0.2507463340f, -0.2477656128f, + -0.2447669078f, -0.2416375134f, -0.2384901545f, -0.2351846242f, + -0.2318685842f, -0.2284043787f, -0.2249483716f, -0.2213504338f, + -0.2177326536f, -0.2139529315f, -0.2102567274f, -0.2062425510f, + -0.2025752799f, -0.1982312400f, -0.1941135048f, -0.1902676621f, + -0.1859484086f, -0.1816310071f, -0.1771140890f, -0.1726183100f, + -0.1680332327f, -0.1634326051f, -0.1587317239f, -0.1539912234f, + -0.1491346512f, -0.1442198838f, -0.1391845207f, -0.1340828639f, + -0.1288821834f, -0.1236191798f, -0.1182710743f, -0.1128619755f, + -0.1073604731f, -0.1018001799f, -0.0961440884f, -0.0904454283f, + -0.0846659246f, -0.0788312843f, -0.0729015436f, -0.0668947833f, + -0.0607956180f, -0.0546891309f, -0.0483829023f, -0.0421512920f, + -0.0356596108f, -0.0291537434f, -0.0229218816f, -0.0160240942f, + -0.0093228281f, -0.0025108764f, 0.0042491810f, 0.0111402133f, + 0.0180789645f, 0.0251689168f, 0.0322938011f, 0.0395537898f, + 0.0468355725f, 0.0542297395f, 0.0616418371f, 0.0691492555f, + 0.0766873597f, 0.0843282945f, 0.0920097856f, 0.0998030288f, + 0.1076300783f, 0.1155633999f, 0.1235258532f, 0.1315923511f, + 0.1397136271f, 0.1479358113f, 0.1562017822f, 0.1645454321f, + 0.1729007855f, 0.1814067004f, 0.1898938500f, 0.1984767185f, + 0.2071598962f, 0.2156750628f, 0.2246834377f, 0.2334738679f, + 0.2422305215f, 0.2511740186f, 0.2601619588f, 0.2692982077f, + 0.2784363297f, 0.2876515447f, 0.2968698668f, 0.3061706020f, + 0.3154820195f, 0.3248945791f, 0.3343234494f, 0.3438662338f, + 0.3534259170f, 0.3630855246f, 0.3727544495f, 0.3825072994f, + 0.3922658126f, 0.4021151299f, 0.4119710813f, 0.4219304098f, + 0.4318755419f, 0.4419066050f, 0.4519266790f, 0.4620411273f, + 0.4721924196f, 0.4824099358f, 0.4925918161f, 0.5029672026f, + 0.5131676220f, 0.5237112702f, 0.5340474666f, 0.5443687487f, + 0.5549596923f, 0.5655037792f, 0.5760846623f, 0.5866412762f, + 0.5972195405f, 0.6078470214f, 0.6185164530f, 0.6292346029f, + 0.6399890869f, 0.6507775481f, 0.6615869909f, 0.6724215836f, + 0.6832601692f, 0.6941326055f, 0.7050115342f, 0.7159351783f, + 0.7268750405f, 0.7378519124f, 0.7488402816f, 0.7598478405f, + 0.7708626189f, 0.7819213638f, 0.7929898181f, 0.8041032024f, + 0.8151863856f, 0.8262675846f, 0.8374347030f, 0.8485124885f, + 0.8596901081f, 0.8708298046f, 0.8818521053f, 0.8932043400f, + 0.9043106868f, 0.9154712945f, 0.9265928796f, 0.9377943260f, + 0.9489884395f, 0.9602246825f, 0.9714051258f, 0.9826151929f, + 0.9937649659f, 1.0049460392f, 1.0160814715f, 1.0272496293f, + 1.0383880993f, 1.0495571434f, 1.0606883842f, 1.0718420204f, + 1.0829385916f, 1.0940532343f, 1.1051116703f, 1.1161955290f, + 1.1272425119f, 1.1382946085f, 1.1492896227f, 1.1602787038f, + 1.1712107201f, 1.1822261399f, 1.1931082102f, 1.2040321660f, + 1.2149338949f, 1.2257216453f, 1.2366886195f, 1.2474232220f, + 1.2581260885f, 1.2689166363f, 1.2796266048f, 1.2903413723f, + 1.3009452557f, 1.3115347597f, 1.3220588330f, 1.3325885128f, + 1.3430577723f, 1.3535351287f, 1.3639358829f, 1.3743362159f, + 1.3846448962f, 1.3949381321f, 1.4051428918f, 1.4153304829f, + 1.4254416597f, 1.4355455123f, 1.4455694200f, 1.4555829383f, + 1.4654880955f, 1.4753745521f, 1.4851755647f, 1.4949664411f, + 1.5047009642f, 1.5143471956f, 1.5238981621f, 1.5335015901f, + 1.5428771970f, 1.5523880267f, 1.5616442576f, 1.5708923706f, + 1.5801889794f, 1.5893352932f, 1.5983995178f, 1.6073964215f, + 1.6163275268f, 1.6252361387f, 1.6340558312f, 1.6428196478f, + 1.6514803963f, 1.6600728279f, 1.6685645243f, 1.6769969948f, + 1.6853322111f, 1.6936257655f, 1.7018206388f, 1.7099724793f, + 1.7180180271f, 1.7260006052f, 1.7338708023f, 1.7416709937f, + 1.7493721167f, 1.7570307435f, 1.7645736334f, 1.7720587141f, + 1.7793864240f, 1.7866595518f, 1.7939083209f, 1.8009680396f, + 1.8080175914f, 1.8149423807f, 1.8217244084f, 1.8285934275f, + 1.8351580541f, 1.8417084040f, 1.8481458306f, 1.8545405038f, + 1.8608040839f, 1.8669819454f, 1.8730100097f, 1.8789794347f, + 1.8848148272f, 1.8906028239f, 1.8962629246f, 1.9018629597f, + 1.9073312666f, 1.9127216689f, 1.9179684698f, 1.9231368617f, + 1.9281575220f, 1.9331147367f, 1.9379346294f, 1.9426980945f, + 1.9473253537f, 1.9518608547f, 1.9562473102f, 1.9605563249f, + 1.9647377083f, 1.9689130417f, 1.9728201948f, 1.9767204935f, + 1.9804869777f, 1.9840965410f, 1.9877044695f, 1.9910612418f, + 1.9943519434f, 1.9976117863f, 2.0006898142f, 2.0036817820f, + 2.0065068911f, 2.0092612533f, 2.0118899336f, 2.0144381201f, + 2.0168403950f, 2.0191500613f, 2.0212978024f, 2.0233571150f, + 2.0252586877f, 2.0270797012f, 2.0287613011f, 2.0303632435f, + 2.0318318976f, 2.0332139460f, 2.0344458593f, 2.0355811762f, + 2.0365507956f, 2.0374411193f, 2.0382032761f, 2.0388791314f, + 2.0394289467f, 2.0397935314f, 2.0400654417f, 2.0403149729f, + 2.0402865682f, 2.0403149729f, 2.0400654417f, 2.0397935314f, + 2.0394289467f, 2.0388791314f, 2.0382032761f, 2.0374411193f, + 2.0365507956f, 2.0355811762f, 2.0344458593f, 2.0332139460f, + 2.0318318976f, 2.0303632435f, 2.0287613011f, 2.0270797012f, + 2.0252586877f, 2.0233571150f, 2.0212978024f, 2.0191500613f, + 2.0168403950f, 2.0144381201f, 2.0118899336f, 2.0092612533f, + 2.0065068911f, 2.0036817820f, 2.0006898142f, 1.9976117863f, + 1.9943519434f, 1.9910612418f, 1.9877044695f, 1.9840965410f, + 1.9804869777f, 1.9767204935f, 1.9728201948f, 1.9689130417f, + 1.9647377083f, 1.9605563249f, 1.9562473102f, 1.9518608547f, + 1.9473253537f, 1.9426980945f, 1.9379346294f, 1.9331147367f, + 1.9281575220f, 1.9231368617f, 1.9179684698f, 1.9127216689f, + 1.9073312666f, 1.9018629597f, 1.8962629246f, 1.8906028239f, + 1.8848148272f, 1.8789794347f, 1.8730100097f, 1.8669819454f, + 1.8608040839f, 1.8545405038f, 1.8481458306f, 1.8417084040f, + 1.8351580541f, 1.8285934275f, 1.8217244084f, 1.8149423807f, + 1.8080175914f, 1.8009680396f, 1.7939083209f, 1.7866595518f, + 1.7793864240f, 1.7720587141f, 1.7645736334f, 1.7570307435f, + 1.7493721167f, 1.7416709937f, 1.7338708023f, 1.7260006052f, + 1.7180180271f, 1.7099724793f, 1.7018206388f, 1.6936257655f, + 1.6853322111f, 1.6769969948f, 1.6685645243f, 1.6600728279f, + 1.6514803963f, 1.6428196478f, 1.6340558312f, 1.6252361387f, + 1.6163275268f, 1.6073964215f, 1.5983995178f, 1.5893352932f, + 1.5801889794f, 1.5708923706f, 1.5616442576f, 1.5523880267f, + 1.5428771970f, 1.5335015901f, 1.5238981621f, 1.5143471956f, + 1.5047009642f, 1.4949664411f, 1.4851755647f, 1.4753745521f, + 1.4654880955f, 1.4555829383f, 1.4455694200f, 1.4355455123f, + 1.4254416597f, 1.4153304829f, 1.4051428918f, 1.3949381321f, + 1.3846448962f, 1.3743362159f, 1.3639358829f, 1.3535351287f, + 1.3430577723f, 1.3325885128f, 1.3220588330f, 1.3115347597f, + 1.3009452557f, 1.2903413723f, 1.2796266048f, 1.2689166363f, + 1.2581260885f, 1.2474232220f, 1.2366886195f, 1.2257216453f, + 1.2149338949f, 1.2040321660f, 1.1931082102f, 1.1822261399f, + 1.1712107201f, 1.1602787038f, 1.1492896227f, 1.1382946085f, + 1.1272425119f, 1.1161955290f, 1.1051116703f, 1.0940532343f, + 1.0829385916f, 1.0718420204f, 1.0606883842f, 1.0495571434f, + 1.0383880993f, 1.0272496293f, 1.0160814715f, 1.0049460392f, + 0.9937649659f, 0.9826151929f, 0.9714051258f, 0.9602246825f, + 0.9489884395f, 0.9377943260f, 0.9265928796f, 0.9154712945f, + 0.9043106868f, 0.8932043400f, 0.8818521053f, 0.8708298046f, + 0.8596901081f, 0.8485124885f, 0.8374347030f, 0.8262675846f, + 0.8151863856f, 0.8041032024f, 0.7929898181f, 0.7819213638f, + 0.7708626189f, 0.7598478405f, 0.7488402816f, 0.7378519124f, + 0.7268750405f, 0.7159351783f, 0.7050115342f, 0.6941326055f, + 0.6832601692f, 0.6724215836f, 0.6615869909f, 0.6507775481f, + 0.6399890869f, 0.6292346029f, 0.6185164530f, 0.6078470214f, + 0.5972195405f, 0.5866412762f, 0.5760846623f, 0.5655037792f, + 0.5549596923f, 0.5443687487f, 0.5340474666f, 0.5237112702f, + 0.5131676220f, 0.5029672026f, 0.4925918161f, 0.4824099358f, + 0.4721924196f, 0.4620411273f, 0.4519266790f, 0.4419066050f, + 0.4318755419f, 0.4219304098f, 0.4119710813f, 0.4021151299f, + 0.3922658126f, 0.3825072994f, 0.3727544495f, 0.3630855246f, + 0.3534259170f, 0.3438662338f, 0.3343234494f, 0.3248945791f, + 0.3154820195f, 0.3061706020f, 0.2968698668f, 0.2876515447f, + 0.2784363297f, 0.2692982077f, 0.2601619588f, 0.2511740186f, + 0.2422305215f, 0.2334738679f, 0.2246834377f, 0.2156750628f, + 0.2071598962f, 0.1984767185f, 0.1898938500f, 0.1814067004f, + 0.1729007855f, 0.1645454321f, 0.1562017822f, 0.1479358113f, + 0.1397136271f, 0.1315923511f, 0.1235258532f, 0.1155633999f, + 0.1076300783f, 0.0998030288f, 0.0920097856f, 0.0843282945f, + 0.0766873597f, 0.0691492555f, 0.0616418371f, 0.0542297395f, + 0.0468355725f, 0.0395537898f, 0.0322938011f, 0.0251689168f, + 0.0180789645f, 0.0111402133f, 0.0042491810f, -0.0025108764f, + -0.0093228281f, -0.0160240942f, -0.0229218816f, -0.0291537434f, + -0.0356596108f, -0.0421512920f, -0.0483829023f, -0.0546891309f, + -0.0607956180f, -0.0668947833f, -0.0729015436f, -0.0788312843f, + -0.0846659246f, -0.0904454283f, -0.0961440884f, -0.1018001799f, + -0.1073604731f, -0.1128619755f, -0.1182710743f, -0.1236191798f, + -0.1288821834f, -0.1340828639f, -0.1391845207f, -0.1442198838f, + -0.1491346512f, -0.1539912234f, -0.1587317239f, -0.1634326051f, + -0.1680332327f, -0.1726183100f, -0.1771140890f, -0.1816310071f, + -0.1859484086f, -0.1902676621f, -0.1941135048f, -0.1982312400f, + -0.2025752799f, -0.2062425510f, -0.2102567274f, -0.2139529315f, + -0.2177326536f, -0.2213504338f, -0.2249483716f, -0.2284043787f, + -0.2318685842f, -0.2351846242f, -0.2384901545f, -0.2416375134f, + -0.2447669078f, -0.2477656128f, -0.2507463340f, -0.2536057399f, + -0.2564433319f, -0.2591571117f, -0.2618581518f, -0.2644425265f, + -0.2670290887f, -0.2695102609f, -0.2719823809f, -0.2743418063f, + -0.2766682382f, -0.2788599641f, -0.2809996598f, -0.2829509809f, + -0.2848865889f, -0.2867034021f, -0.2886979015f, -0.2909536921f, + -0.2921271926f, -0.2939578995f, -0.2955408715f, -0.2970457316f, + -0.2985327732f, -0.2998832522f, -0.3012206975f, -0.3024750370f, + -0.3036791840f, -0.3047953307f, -0.3058756301f, -0.3068771119f, + -0.3078644089f, -0.3087558210f, -0.3096257208f, -0.3103913733f, + -0.3111336729f, -0.3117751598f, -0.3123958369f, -0.3129048624f, + -0.3133944699f, -0.3137462882f, -0.3140959719f, -0.3143048413f, + -0.3145480407f, -0.3146624743f, -0.3148580017f, -0.3149481827f, + -0.3152146050f, -0.3152392795f, -0.3154945639f, -0.3145152697f, + -0.3146688330f, -0.3147549076f, -0.3142523940f, -0.3141297440f, + -0.3136545108f, -0.3133679403f, -0.3128663068f, -0.3124439347f, + -0.3118458639f, -0.3113288653f, -0.3106447420f, -0.3100296179f, + -0.3092353383f, -0.3085060392f, -0.3076169401f, -0.3068011429f, + -0.3058372184f, -0.3049525345f, -0.3039122280f, -0.3029682798f, + -0.3018593574f, -0.3008800902f, -0.2997260603f, -0.2987161065f, + -0.2974931002f, -0.2964174081f, -0.2950580040f, -0.2938671020f, + -0.2922042842f, -0.2908411467f, -0.2887415908f, -0.2879411883f, + -0.2872351631f, -0.2847616987f, -0.2836812630f, -0.2818896819f, + -0.2804988036f, -0.2787902978f, -0.2772761254f, -0.2755608442f, + -0.2740080396f, -0.2722769142f, -0.2706716369f, -0.2689155628f, + -0.2672727018f, -0.2655133466f, -0.2638390865f, -0.2620527778f, + -0.2603277216f, -0.2584896769f, -0.2567089643f, -0.2548171418f, + -0.2529788379f, -0.2510271295f, -0.2491104380f, -0.2470901019f, + -0.2451131271f, -0.2430630996f, -0.2410984360f, -0.2390892017f, + -0.2372897729f, -0.2355468158f, -0.2341760732f, -0.2330266272f, + -0.2285011851f, -0.2276718013f, -0.2256330226f, -0.2236245172f, + -0.2216212397f, -0.2195723764f, -0.2175598198f, -0.2155244502f, + -0.2134958020f, -0.2114475228f, -0.2094317510f, -0.2073919547f, + -0.2054038199f, -0.2033652690f, -0.2013983100f, -0.1993785604f, + -0.1974621775f, -0.1954904285f, -0.1936526632f, -0.1917311189f, + -0.1899836720f, -0.1881030278f, -0.1864679413f, -0.1846305866f, + -0.1831168886f, -0.1812660021f, -0.1798377067f, -0.1778294249f, + -0.1764397529f, -0.1738005522f, -0.1723006308f, -0.1666149935f, + -0.1685811576f, -0.1683593655f, -0.1645983125f, -0.1640690747f, + -0.1614806858f, -0.1606274956f, -0.1583282171f, -0.1573540028f, + -0.1551676484f, -0.1541795914f, -0.1520476681f, -0.1510623954f, + -0.1489403301f, -0.1479788256f, -0.1458627832f, -0.1449481895f, + -0.1428068116f, -0.1419434716f, -0.1397338876f, -0.1389458751f, + -0.1366453783f, -0.1359864220f, -0.1335694857f, -0.1330985791f, + -0.1305094750f, -0.1303677621f, -0.1275474455f, -0.1280766855f, + -0.1248521391f, -0.1270419996f, -0.1230013683f, -0.1333820215f, + -0.1356269751f, -0.1173893915f, -0.1247875900f, -0.1205369109f, + -0.1227782673f, -0.1200347844f, -0.1212624937f, -0.1191925052f, + -0.1200564042f, -0.1183823726f, -0.1190734477f, -0.1176885372f, + -0.1183154633f, -0.1171681501f, -0.1177737061f, -0.1168115435f, + -0.1174295604f, -0.1166353753f, -0.1173065305f, -0.1166760717f, + -0.1174165122f, -0.1169320615f, -0.1177379144f, -0.1173947314f, + -0.1182902140f, -0.1180910084f, -0.1190858794f, -0.1190024264f, + -0.1201208291f, -0.1201684429f, -0.1213842597f, -0.1215729938f, } }; void WidebandSpectrum::execute(buffer_c8_t buffer) { - sample_count += buffer.count; - if( sample_count > 400000 ) { - sample_count -= 400000; + // 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 ) { + const size_t window_offset = (phase >> 3) * 256; + const auto window_p = &window_wideband_bin_lpf[window_offset]; + for(size_t i=0; i { buffer.p[i].real() * window_p[i], buffer.p[i].imag() * window_p[i] }; + } + } + + if( phase == 23 ) { if( channel_spectrum_request_update == false ) { - channel_spectrum_request_update = true; - - constexpr int32_t k = 128 * 16; - const auto& window = window_wideband_bin_lpf; - for(size_t i=0; i +#include +#include class WidebandSpectrum : public BasebandProcessor { public: @@ -32,6 +34,8 @@ public: private: size_t sample_count = 0; + + std::array, 256> spectrum; }; #endif/*__PROC_WIDEBAND_SPECTRUM_H__*/ From b41ff962f4f99e8bf0c44eb23bc6b694de051e4a Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 14 Oct 2015 10:41:50 -0700 Subject: [PATCH 125/224] Replace std::sin() with interpolated LUT. --- firmware/common/dsp_fft.hpp | 5 +- firmware/common/sine_table.hpp | 150 +++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+), 2 deletions(-) create mode 100644 firmware/common/sine_table.hpp diff --git a/firmware/common/dsp_fft.hpp b/firmware/common/dsp_fft.hpp index 3f88b6a3d..3dce015a3 100644 --- a/firmware/common/dsp_fft.hpp +++ b/firmware/common/dsp_fft.hpp @@ -31,6 +31,7 @@ #include "dsp_types.hpp" #include "complex.hpp" +#include "sine_table.hpp" #include "hal.h" namespace std { @@ -113,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/sine_table.hpp b/firmware/common/sine_table.hpp new file mode 100644 index 000000000..479de877e --- /dev/null +++ b/firmware/common/sine_table.hpp @@ -0,0 +1,150 @@ +/* + * 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; + const float result = std::fma(n_frac, diff, p0); + return result; +} + +#endif/*__SINE_TABLE_H__*/ From 144b121b0e3c96e946c5dd33cd5b5516817a447a Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Thu, 22 Oct 2015 11:37:28 -0700 Subject: [PATCH 126/224] Windows 8.1 firmware tool images. --- doc/images/wiki/windows/gpl_v2_accept_win81.png | Bin 0 -> 24470 bytes ...stall_device_firmware_sharebrained_win81.png | Bin 0 -> 19689 bytes .../wiki/windows/installer_finished_win81.png | Bin 0 -> 11207 bytes .../portapack_firmware_install_cmd_win81.png | Bin 0 -> 12709 bytes doc/images/wiki/windows/program_group_win81.png | Bin 0 -> 9229 bytes .../uac_installer_sharebrained_win81.png | Bin 0 -> 24675 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/images/wiki/windows/gpl_v2_accept_win81.png create mode 100644 doc/images/wiki/windows/install_device_firmware_sharebrained_win81.png create mode 100644 doc/images/wiki/windows/installer_finished_win81.png create mode 100644 doc/images/wiki/windows/portapack_firmware_install_cmd_win81.png create mode 100644 doc/images/wiki/windows/program_group_win81.png create mode 100644 doc/images/wiki/windows/uac_installer_sharebrained_win81.png 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 0000000000000000000000000000000000000000..6887d4f1adfe711ecbce1972ac52de99d0c3c798 GIT binary patch literal 24470 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 literal 0 HcmV?d00001 From 934936d3f68d60eea114fa0cce91c44aa31fbcf2 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Wed, 2 Sep 2015 19:19:43 -0700 Subject: [PATCH 127/224] Enhancements to clock recovery Linearly interpolate input and delayed samples, based on phase of internal symbol clock. --- firmware/baseband/clock_recovery.hpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/firmware/baseband/clock_recovery.hpp b/firmware/baseband/clock_recovery.hpp index 8b7059afd..4224032d1 100644 --- a/firmware/baseband/clock_recovery.hpp +++ b/firmware/baseband/clock_recovery.hpp @@ -38,13 +38,15 @@ public: ) { 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; if( phase_0 || phase_180 ) { t2 = t1; t1 = t0; - t0 = in; + + const uint32_t phase_boundary = phase_180 ? (1U << 31) : 0; + const float alpha = (phase_boundary - phase_last) / float(phase_increment + phase_adjustment); + const float t = last_sample + alpha * (in - last_sample); + t0 = t; } if( phase_0 ) { @@ -59,6 +61,10 @@ public: // Correct phase (don't change frequency!) phase_adjustment = -phase_increment * error_filtered / 200.0f; } + + phase_last = phase; + phase += phase_increment + phase_adjustment; + last_sample = in; } private: @@ -66,6 +72,7 @@ private: uint32_t phase_last { 0 }; uint32_t phase_adjustment { 0 }; uint32_t phase_increment { 0 }; + float last_sample { 0 }; float t0 { 0 }; float t1 { 0 }; float t2 { 0 }; From f13e2d32c0ee546b6b0370dc46c93b3c85e2743f Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 25 Sep 2015 22:08:55 -0700 Subject: [PATCH 128/224] Add symbol coding namespace, NRZI decoder. --- firmware/baseband/symbol_coding.hpp | 43 +++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 firmware/baseband/symbol_coding.hpp diff --git a/firmware/baseband/symbol_coding.hpp b/firmware/baseband/symbol_coding.hpp new file mode 100644 index 000000000..d474f4b17 --- /dev/null +++ b/firmware/baseband/symbol_coding.hpp @@ -0,0 +1,43 @@ +/* + * 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 + +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__*/ From 8b2e75a29918fa4e3c2a077a96fc6bc18dca7ffa Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 25 Sep 2015 22:09:35 -0700 Subject: [PATCH 129/224] Add LinearResampler implementation for clock recovery. --- firmware/baseband/linear_resampler.hpp | 78 ++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 firmware/baseband/linear_resampler.hpp diff --git a/firmware/baseband/linear_resampler.hpp b/firmware/baseband/linear_resampler.hpp new file mode 100644 index 000000000..f481c94b8 --- /dev/null +++ b/firmware/baseband/linear_resampler.hpp @@ -0,0 +1,78 @@ +/* + * 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: + constexpr LinearResampler( + const float input_rate, + const float output_rate + ) : last_sample { 0.0f }, + phase { 0.0f }, + phase_increment { calculate_increment(input_rate, output_rate) } + { + } + + 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); + advance(); + } + last_sample = sample; + phase -= 1.0f; + } + + void advance(const float fraction = 1.0f) { + phase += (fraction * phase_increment); + } + +private: + float last_sample; + float phase; + float phase_increment; + + 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__*/ From a3cce5632e7253e1f2b6f4ebe06acef4dbab9507 Mon Sep 17 00:00:00 2001 From: Jared Boone Date: Fri, 25 Sep 2015 22:13:36 -0700 Subject: [PATCH 130/224] Complete rewrite of clock recovery, lots of refactoring. --- firmware/baseband/clock_recovery.cpp | 9 -- firmware/baseband/clock_recovery.hpp | 149 ++++++++++++++++++--------- firmware/baseband/proc_fsk.cpp | 28 +++-- firmware/baseband/proc_fsk.hpp | 14 ++- 4 files changed, 125 insertions(+), 75 deletions(-) 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 4224032d1..697233751 100644 --- a/firmware/baseband/clock_recovery.hpp +++ b/firmware/baseband/clock_recovery.hpp @@ -22,72 +22,125 @@ #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); + /* 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; - - const uint32_t phase_boundary = phase_180 ? (1U << 31) : 0; - const float alpha = (phase_boundary - phase_last) / float(phase_increment + phase_adjustment); - const float t = last_sample + alpha * (in - last_sample); - t0 = t; + 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; - } - - phase_last = phase; - phase += phase_increment + phase_adjustment; - last_sample = in; + 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 last_sample { 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 +class LinearErrorFilter { +public: + float operator()( + const float error ) { - return float(symbol_rate) / float(sampling_rate); + error_filtered = filter_alpha * error_filtered + (1.0f - filter_alpha) * error; + return error_filtered * error_weight; } - static constexpr uint32_t phase_increment_u32(const float fractional_symbol_rate) { - return 4294967296.0f * fractional_symbol_rate; +private: + float filter_alpha { 0.95f }; + float error_filtered { 0.0f }; + float error_weight { 0.5f }; +}; + +class FixedErrorFilter { +public: + float operator()( + const float lateness + ) { + return (lateness < 0.0f) ? weight : -weight; + } + +private: + float weight { 1.0f / 16.0f }; +}; + +class ClockRecovery { +public: + ClockRecovery( + const float sampling_rate, + const float symbol_rate, + std::function symbol_handler + ) : resampler(sampling_rate, symbol_rate * timing_error_detector.samples_per_symbol), + symbol_handler { symbol_handler } + { + } + + void configure( + const float sampling_rate, + const float symbol_rate + ) { + resampler.configure(sampling_rate, symbol_rate * timing_error_detector.samples_per_symbol); + } + + 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; + FixedErrorFilter 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/proc_fsk.cpp b/firmware/baseband/proc_fsk.cpp index a4ccdbdc0..f2b1ef060 100644 --- a/firmware/baseband/proc_fsk.cpp +++ b/firmware/baseband/proc_fsk.cpp @@ -43,8 +43,8 @@ FSKProcessor::~FSKProcessor() { } void FSKProcessor::configure(const FSKConfiguration new_configuration) { - demod.configure(76800, 2 * new_configuration.symbol_rate); - clock_recovery.configure(new_configuration.symbol_rate, 76800); + demod.configure(sampling_rate, 2 * new_configuration.symbol_rate); + clock_recovery.configure(sampling_rate / 4, new_configuration.symbol_rate); access_code_correlator.configure( new_configuration.access_code, new_configuration.access_code_length, @@ -78,12 +78,6 @@ void FSKProcessor::execute(buffer_c8_t buffer) { 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 { @@ -93,16 +87,16 @@ void FSKProcessor::execute(buffer_c8_t buffer) { auto demodulated = demod.execute(channel, work_demod_buffer); - i2s::i2s0::tx_mute(); - - for(size_t i=0; i