mirror of
https://github.com/eddyem/stm32samples.git
synced 2025-12-08 11:45:22 +03:00
Compare commits
2 Commits
73557762a4
...
c4529a8447
| Author | SHA1 | Date | |
|---|---|---|---|
| c4529a8447 | |||
| 6701ac841b |
9
F1:F103/BISS_C_encoders/Makefile
Normal file
9
F1:F103/BISS_C_encoders/Makefile
Normal file
@ -0,0 +1,9 @@
|
||||
BINARY := encoders
|
||||
# MCU code
|
||||
MCU ?= F103x8
|
||||
# change this linking script depending on particular MCU model,
|
||||
LDSCRIPT ?= stm32f103x8.ld
|
||||
DEFINES := -DSTM32F10X_MD
|
||||
|
||||
include ../makefile.f1
|
||||
include ../../makefile.stm32
|
||||
5
F1:F103/BISS_C_encoders/Readme.md
Normal file
5
F1:F103/BISS_C_encoders/Readme.md
Normal file
@ -0,0 +1,5 @@
|
||||
Get data from 2 encoders by BISS-C protocol
|
||||
===========================================
|
||||
|
||||
|
||||
tl;dr
|
||||
BIN
F1:F103/BISS_C_encoders/encoders.bin
Executable file
BIN
F1:F103/BISS_C_encoders/encoders.bin
Executable file
Binary file not shown.
1
F1:F103/BISS_C_encoders/encoders.cflags
Normal file
1
F1:F103/BISS_C_encoders/encoders.cflags
Normal file
@ -0,0 +1 @@
|
||||
-std=c17
|
||||
6
F1:F103/BISS_C_encoders/encoders.config
Normal file
6
F1:F103/BISS_C_encoders/encoders.config
Normal file
@ -0,0 +1,6 @@
|
||||
#define EBUG
|
||||
#define STM32F1
|
||||
#define STM32F103x8
|
||||
#define STM32F10X_MD
|
||||
#define BUILD_NUMBER 1
|
||||
#define BUILD_DATE "xx"
|
||||
1
F1:F103/BISS_C_encoders/encoders.creator
Normal file
1
F1:F103/BISS_C_encoders/encoders.creator
Normal file
@ -0,0 +1 @@
|
||||
[General]
|
||||
183
F1:F103/BISS_C_encoders/encoders.creator.user
Normal file
183
F1:F103/BISS_C_encoders/encoders.creator.user
Normal file
@ -0,0 +1,183 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE QtCreatorProject>
|
||||
<!-- Written by QtCreator 15.0.0, 2025-01-08T17:55:30. -->
|
||||
<qtcreator>
|
||||
<data>
|
||||
<variable>EnvironmentId</variable>
|
||||
<value type="QByteArray">{7bd84e39-ca37-46d3-be9d-99ebea85bc0d}</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.ActiveTarget</variable>
|
||||
<value type="qlonglong">0</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.EditorSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
|
||||
<value type="bool" key="EditorConfiguration.AutoSpacesForTabs">false</value>
|
||||
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
|
||||
<value type="QString" key="language">Cpp</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
|
||||
<value type="QString" key="language">QmlJS</value>
|
||||
<valuemap type="QVariantMap" key="value">
|
||||
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
|
||||
<value type="QByteArray" key="EditorConfiguration.Codec">KOI8-R</value>
|
||||
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.IndentSize">4</value>
|
||||
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
|
||||
<value type="int" key="EditorConfiguration.LineEndingBehavior">0</value>
|
||||
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
|
||||
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
|
||||
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
|
||||
<value type="int" key="EditorConfiguration.PreferAfterWhitespaceComments">0</value>
|
||||
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
|
||||
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
|
||||
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
|
||||
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
|
||||
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
|
||||
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
|
||||
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
|
||||
<value type="int" key="EditorConfiguration.TabSize">8</value>
|
||||
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
|
||||
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
|
||||
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
|
||||
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanIndentation">false</value>
|
||||
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
|
||||
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
|
||||
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
|
||||
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
|
||||
<value type="bool" key="EditorConfiguration.tintMarginArea">true</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.PluginSettings</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
|
||||
<value type="bool" key="AutoTest.Framework.Boost">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.CTest">false</value>
|
||||
<value type="bool" key="AutoTest.Framework.Catch">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.GTest">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
|
||||
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
|
||||
</valuemap>
|
||||
<value type="bool" key="AutoTest.ApplyFilter">false</value>
|
||||
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
|
||||
<valuelist type="QVariantList" key="AutoTest.PathFilters"/>
|
||||
<value type="int" key="AutoTest.RunAfterBuild">0</value>
|
||||
<value type="bool" key="AutoTest.UseGlobal">true</value>
|
||||
<valuemap type="QVariantMap" key="ClangTools">
|
||||
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
|
||||
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
|
||||
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
|
||||
<value type="int" key="ClangTools.ParallelJobs">8</value>
|
||||
<value type="bool" key="ClangTools.PreferConfigFile">true</value>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
|
||||
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
|
||||
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
|
||||
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
|
||||
</valuemap>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Target.0</variable>
|
||||
<valuemap type="QVariantMap">
|
||||
<value type="QString" key="DeviceType">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{65a14f9e-e008-4c1b-89df-4eaa4774b6e3}</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
|
||||
<value type="QString">all</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
|
||||
</valuemap>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
|
||||
<valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
|
||||
<value type="QString">clean</value>
|
||||
</valuelist>
|
||||
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
|
||||
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
|
||||
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Default</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericBuildConfiguration</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
|
||||
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
|
||||
</valuemap>
|
||||
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
|
||||
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
|
||||
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
|
||||
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
|
||||
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
|
||||
<value type="int" key="Analyzer.Valgrind.Callgrind.CostFormat">0</value>
|
||||
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
|
||||
<value type="QList<int>" key="Analyzer.Valgrind.VisibleErrorKinds"></value>
|
||||
<valuelist type="QVariantList" key="CustomOutputParsers"/>
|
||||
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
|
||||
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
|
||||
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
|
||||
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
|
||||
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
|
||||
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
|
||||
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</value>
|
||||
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
|
||||
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
|
||||
</valuemap>
|
||||
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
|
||||
</valuemap>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.TargetCount</variable>
|
||||
<value type="qlonglong">1</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>ProjectExplorer.Project.Updater.FileVersion</variable>
|
||||
<value type="int">22</value>
|
||||
</data>
|
||||
<data>
|
||||
<variable>Version</variable>
|
||||
<value type="int">22</value>
|
||||
</data>
|
||||
</qtcreator>
|
||||
1
F1:F103/BISS_C_encoders/encoders.cxxflags
Normal file
1
F1:F103/BISS_C_encoders/encoders.cxxflags
Normal file
@ -0,0 +1 @@
|
||||
-std=c++17
|
||||
17
F1:F103/BISS_C_encoders/encoders.files
Normal file
17
F1:F103/BISS_C_encoders/encoders.files
Normal file
@ -0,0 +1,17 @@
|
||||
hardware.c
|
||||
hardware.h
|
||||
main.c
|
||||
proto.c
|
||||
proto.h
|
||||
ringbuffer.c
|
||||
ringbuffer.h
|
||||
strfunc.c
|
||||
strfunc.h
|
||||
usart.c
|
||||
usart.h
|
||||
usb_descr.c
|
||||
usb_descr.h
|
||||
usb_lib.c
|
||||
usb_lib.h
|
||||
usb_dev.c
|
||||
usb_dev.h
|
||||
6
F1:F103/BISS_C_encoders/encoders.includes
Normal file
6
F1:F103/BISS_C_encoders/encoders.includes
Normal file
@ -0,0 +1,6 @@
|
||||
.
|
||||
../inc
|
||||
../inc/Fx
|
||||
../inc/cm
|
||||
../inc/ld
|
||||
../inc/startup
|
||||
50
F1:F103/BISS_C_encoders/hardware.c
Normal file
50
F1:F103/BISS_C_encoders/hardware.c
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright 2024 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "hardware.h"
|
||||
|
||||
static inline void gpio_setup(){
|
||||
// Enable clocks to the GPIO subsystems (PB for ADC), turn on AFIO clocking to disable SWD/JTAG
|
||||
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_IOPCEN | RCC_APB2ENR_AFIOEN;
|
||||
// turn off SWJ/JTAG
|
||||
// AFIO->MAPR = AFIO_MAPR_SWJ_CFG_DISABLE;
|
||||
AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE; // for PA15
|
||||
// Set led as opendrain output
|
||||
GPIOC->CRH |= CRH(13, CNF_ODOUTPUT|MODE_SLOW);
|
||||
// USB pullup (PA15) - pushpull output
|
||||
GPIOA->CRH = CRH(15, CNF_PPOUTPUT|MODE_SLOW);
|
||||
}
|
||||
|
||||
void hw_setup(){
|
||||
gpio_setup();
|
||||
}
|
||||
|
||||
#ifndef EBUG
|
||||
void iwdg_setup(){
|
||||
uint32_t tmout = 16000000;
|
||||
RCC->CSR |= RCC_CSR_LSION;
|
||||
while((RCC->CSR & RCC_CSR_LSIRDY) != RCC_CSR_LSIRDY){if(--tmout == 0) break;} /* (2) */
|
||||
IWDG->KR = IWDG_START;
|
||||
IWDG->KR = IWDG_WRITE_ACCESS;
|
||||
IWDG->PR = IWDG_PR_PR_1;
|
||||
IWDG->RLR = 1250;
|
||||
tmout = 16000000;
|
||||
while(IWDG->SR){if(--tmout == 0) break;}
|
||||
IWDG->KR = IWDG_REFRESH;
|
||||
}
|
||||
#endif
|
||||
|
||||
37
F1:F103/BISS_C_encoders/hardware.h
Normal file
37
F1:F103/BISS_C_encoders/hardware.h
Normal file
@ -0,0 +1,37 @@
|
||||
/*
|
||||
* Copyright 2024 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "stm32f1.h"
|
||||
|
||||
// LED0 - PC13 (bluepill), blinking each second
|
||||
#define LED0_port GPIOC
|
||||
#define LED0_pin (1<<13)
|
||||
|
||||
// USB pullup (not present in bluepill, should be soldered) - PA15
|
||||
#define USBPU_port GPIOA
|
||||
#define USBPU_pin (1<<15)
|
||||
#define USBPU_ON() pin_set(USBPU_port, USBPU_pin)
|
||||
#define USBPU_OFF() pin_clear(USBPU_port, USBPU_pin)
|
||||
|
||||
#define LED_blink(x) pin_toggle(x ## _port, x ## _pin)
|
||||
#define LED_on(x) pin_clear(x ## _port, x ## _pin)
|
||||
#define LED_off(x) pin_set(x ## _port, x ## _pin)
|
||||
|
||||
void hw_setup();
|
||||
void iwdg_setup();
|
||||
94
F1:F103/BISS_C_encoders/main.c
Normal file
94
F1:F103/BISS_C_encoders/main.c
Normal file
@ -0,0 +1,94 @@
|
||||
/*
|
||||
* This file is part of the I2Cscan project.
|
||||
* Copyright 2020 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "hardware.h"
|
||||
#include "proto.h"
|
||||
#include "strfunc.h"
|
||||
#include "usart.h"
|
||||
#include "usb_dev.h"
|
||||
|
||||
volatile uint32_t Tms = 0;
|
||||
|
||||
/* Called when systick fires */
|
||||
void sys_tick_handler(void){
|
||||
++Tms;
|
||||
}
|
||||
|
||||
int main(){
|
||||
char inbuff[RBINSZ];
|
||||
uint32_t lastT = 0, lastS = 0;
|
||||
StartHSE();
|
||||
hw_setup();
|
||||
USBPU_OFF();
|
||||
SysTick_Config(72000);
|
||||
#ifdef EBUG
|
||||
usart_setup();
|
||||
DBG("Start");
|
||||
uint32_t tt = 0;
|
||||
#endif
|
||||
USB_setup();
|
||||
#ifndef EBUG
|
||||
iwdg_setup();
|
||||
#endif
|
||||
USBPU_ON();
|
||||
while (1){
|
||||
IWDG->KR = IWDG_REFRESH; // refresh watchdog
|
||||
if(Tms - lastT > 499){
|
||||
LED_blink(LED0);
|
||||
lastT = Tms;
|
||||
}
|
||||
#ifdef EBUG
|
||||
if(Tms != tt){
|
||||
__disable_irq();
|
||||
usart_transmit();
|
||||
tt = Tms;
|
||||
__enable_irq();
|
||||
}
|
||||
#endif
|
||||
if(CDCready[I_CMD]){
|
||||
if(Tms - lastS > 9999){
|
||||
USB_sendstr(I_CMD, "Tms=");
|
||||
USB_sendstr(I_CMD, u2str(Tms));
|
||||
newline(I_CMD);
|
||||
lastS = Tms;
|
||||
}
|
||||
int l = USB_receivestr(I_CMD, inbuff, RBINSZ);
|
||||
if(l < 0) CMDWRn("ERROR: CMD USB buffer overflow or string was too long");
|
||||
else if(l) parse_cmd(inbuff);
|
||||
}
|
||||
if(CDCready[I_X]){
|
||||
int l = USB_receivestr(I_X, inbuff, RBINSZ);
|
||||
if(l < 0) CMDWRn("ERROR: encX USB buffer overflow or string was too long");
|
||||
else if(l){
|
||||
CMDWR("EncX got: '");
|
||||
CMDWR(inbuff);
|
||||
CMDWR("'\n");
|
||||
}
|
||||
}
|
||||
if(CDCready[I_Y]){
|
||||
int l = USB_receivestr(I_Y, inbuff, RBINSZ);
|
||||
if(l < 0) CMDWRn("ERROR: encY USB buffer overflow or string was too long");
|
||||
else if(l){
|
||||
CMDWR("EncY got: '");
|
||||
CMDWR(inbuff);
|
||||
CMDWR("'\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
4
F1:F103/BISS_C_encoders/openocd.cfg
Normal file
4
F1:F103/BISS_C_encoders/openocd.cfg
Normal file
@ -0,0 +1,4 @@
|
||||
set FLASH_SIZE 0x10000
|
||||
|
||||
source [find interface/stlink-v2-1.cfg]
|
||||
source [find target/stm32f1x.cfg]
|
||||
170
F1:F103/BISS_C_encoders/proto.c
Normal file
170
F1:F103/BISS_C_encoders/proto.c
Normal file
@ -0,0 +1,170 @@
|
||||
/*
|
||||
* This file is part of the encoders project.
|
||||
* Copyright 2025 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "proto.h"
|
||||
#include "strfunc.h"
|
||||
#include "usb_dev.h"
|
||||
#include "version.inc"
|
||||
|
||||
// commands indexes
|
||||
typedef enum{
|
||||
C_dummy,
|
||||
C_help,
|
||||
C_sendX,
|
||||
C_sendY,
|
||||
C_AMOUNT
|
||||
} cmd_e;
|
||||
|
||||
// error codes
|
||||
typedef enum {
|
||||
ERR_OK, // no errors
|
||||
ERR_FAIL, // failed to run command
|
||||
ERR_BADCMD, // bad command
|
||||
ERR_BADPAR, // bad parameter (absent or wrong value)
|
||||
ERR_SILENCE, // getter or other - don't need to send "OK"
|
||||
ERR_AMOUNT
|
||||
} errcode_e;
|
||||
|
||||
static const char* const errors[ERR_AMOUNT] = {
|
||||
[ERR_OK] = "OK",
|
||||
[ERR_FAIL] = "FAIL",
|
||||
[ERR_BADCMD] = "BADCMD",
|
||||
[ERR_BADPAR] = "BADPAR",
|
||||
[ERR_SILENCE] = "",
|
||||
};
|
||||
|
||||
// command handler (idx - index of command in list, par - all after equal sign in "cmd = par")
|
||||
typedef errcode_e (*handler_t)(cmd_e idx, char *par);
|
||||
|
||||
typedef struct{
|
||||
const char* cmd; // command
|
||||
handler_t handler; // handler function
|
||||
} funcdescr_t;
|
||||
|
||||
static const funcdescr_t commands[C_AMOUNT];
|
||||
|
||||
// getter for integer parameter
|
||||
#define IGETTER(idx, ival) do{CMDWR(commands[idx].cmd); USB_putbyte(I_CMD, '='); \
|
||||
CMDWR(i2str(ival)); CMDn(); return ERR_SILENCE; }while(0)
|
||||
|
||||
static errcode_e help(cmd_e idx, char* par);
|
||||
|
||||
static errcode_e dummy(cmd_e idx, char *par){
|
||||
static int32_t val = -111;
|
||||
if(par && *par){
|
||||
int32_t i;
|
||||
char *nxt = getint(par, &i);
|
||||
DBGs(par);
|
||||
DBGs(nxt);
|
||||
if(par == nxt) return ERR_BADPAR;
|
||||
val = i;
|
||||
}
|
||||
IGETTER(idx, val);
|
||||
}
|
||||
|
||||
static errcode_e sendenc(cmd_e idx, char *par){
|
||||
if(!par || !*par) return ERR_BADPAR;
|
||||
switch(idx){
|
||||
case C_sendX:
|
||||
if(!CDCready[I_X]) return ERR_FAIL;
|
||||
if(!USB_sendstr(I_X, par)) return ERR_FAIL;
|
||||
newline(I_X);
|
||||
break;
|
||||
case C_sendY:
|
||||
if(!CDCready[I_Y]) return ERR_FAIL;
|
||||
if(!USB_sendstr(I_Y, par)) return ERR_FAIL;
|
||||
newline(I_Y);
|
||||
break;
|
||||
default:
|
||||
return ERR_BADCMD;
|
||||
}
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
// text commands
|
||||
static const funcdescr_t commands[C_AMOUNT] = {
|
||||
[C_dummy] = {"dummy", dummy},
|
||||
[C_help] = {"help", help},
|
||||
[C_sendX] = {"sendx", sendenc},
|
||||
[C_sendY] = {"sendy", sendenc},
|
||||
};
|
||||
|
||||
typedef struct{
|
||||
int idx; // command index (if < 0 - just display `help` as grouping header)
|
||||
const char *help; // help message
|
||||
} help_t;
|
||||
|
||||
// SHOUL be sorted and grouped
|
||||
static const help_t helpmessages[] = {
|
||||
{-1, "Different commands"},
|
||||
{C_dummy, "dummy integer setter/getter"},
|
||||
{C_help, "show this help"},
|
||||
{-1, "Debug commands"},
|
||||
{C_sendX, "send text string to X encoder"},
|
||||
{C_sendY, "send text string to Y encoder"},
|
||||
{-1, NULL},
|
||||
};
|
||||
|
||||
static errcode_e help(_U_ cmd_e idx, _U_ char* par){
|
||||
CMDWRn("https://github.com/eddyem/stm32samples/tree/master/F1:F103/ build #" BUILD_NUMBER " @ " BUILD_DATE);
|
||||
CMDWRn("commands format: command[=setter]\\n");
|
||||
const help_t *c = helpmessages;
|
||||
while(c->help){
|
||||
if(c->idx < 0){ // header
|
||||
CMDWR("\n ");
|
||||
CMDWR(c->help);
|
||||
USB_putbyte(I_CMD, ':');
|
||||
}else{
|
||||
CMDWR(commands[c->idx].cmd);
|
||||
CMDWR(" - ");
|
||||
CMDWR(c->help);
|
||||
}
|
||||
CMDn();
|
||||
++c;
|
||||
}
|
||||
return ERR_OK;
|
||||
}
|
||||
|
||||
// *cmd is "command" for commands/getters or "parameter=value" for setters
|
||||
void parse_cmd(char *cmd){
|
||||
errcode_e ecode = ERR_BADCMD;
|
||||
// command and its parameter
|
||||
char *cmdstart = omit_spaces(cmd), *parstart = NULL;
|
||||
if(!cmdstart) goto retn;
|
||||
char *ptr = cmdstart;
|
||||
while(*ptr > '@') ++ptr;
|
||||
if(*ptr && *ptr <= ' '){ // there's spaces after command
|
||||
*ptr++ = 0;
|
||||
ptr = omit_spaces(ptr);
|
||||
}
|
||||
if(*ptr){ // check rest of string
|
||||
if(*ptr != '=') goto retn; // strange symbols after command name
|
||||
*ptr++ = 0;
|
||||
parstart = omit_spaces(ptr); // get parameter
|
||||
if(*parstart <= ' ') goto retn; // no parameter after equal sign
|
||||
}
|
||||
int idx = 0;
|
||||
for(; idx < C_AMOUNT; ++idx) // search in command lists
|
||||
if(0 == strcmp(commands[idx].cmd, cmdstart)) break;
|
||||
if(idx >= C_AMOUNT) goto retn; // not found
|
||||
ecode = commands[idx].handler(idx, parstart);
|
||||
retn:
|
||||
if(ecode != ERR_SILENCE) CMDWRn(errors[ecode]);
|
||||
}
|
||||
21
F1:F103/BISS_C_encoders/proto.h
Normal file
21
F1:F103/BISS_C_encoders/proto.h
Normal file
@ -0,0 +1,21 @@
|
||||
/*
|
||||
* This file is part of the encoders project.
|
||||
* Copyright 2025 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
void parse_cmd(char *cmd);
|
||||
166
F1:F103/BISS_C_encoders/ringbuffer.c
Normal file
166
F1:F103/BISS_C_encoders/ringbuffer.c
Normal file
@ -0,0 +1,166 @@
|
||||
/*
|
||||
* Copyright 2023 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "ringbuffer.h"
|
||||
|
||||
static int datalen(ringbuffer *b){
|
||||
if(b->tail >= b->head) return (b->tail - b->head);
|
||||
else return (b->length - b->head + b->tail);
|
||||
}
|
||||
|
||||
// stored data length
|
||||
int RB_datalen(ringbuffer *b){
|
||||
if(b->busy) return -1;
|
||||
b->busy = 1;
|
||||
int l = datalen(b);
|
||||
b->busy = 0;
|
||||
return l;
|
||||
}
|
||||
|
||||
static int hasbyte(ringbuffer *b, uint8_t byte){
|
||||
if(b->head == b->tail) return -1; // no data in buffer
|
||||
int startidx = b->head;
|
||||
if(b->head > b->tail){ //
|
||||
for(int found = b->head; found < b->length; ++found)
|
||||
if(b->data[found] == byte) return found;
|
||||
startidx = 0;
|
||||
}
|
||||
for(int found = startidx; found < b->tail; ++found)
|
||||
if(b->data[found] == byte) return found;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RB_hasbyte - check if buffer has given byte stored
|
||||
* @param b - buffer
|
||||
* @param byte - byte to find
|
||||
* @return index if found, -1 if none or busy
|
||||
*/
|
||||
int RB_hasbyte(ringbuffer *b, uint8_t byte){
|
||||
if(b->busy) return -1;
|
||||
b->busy = 1;
|
||||
int ret = hasbyte(b, byte);
|
||||
b->busy = 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
// poor memcpy
|
||||
static void mcpy(uint8_t *targ, const uint8_t *src, int l){
|
||||
while(l--) *targ++ = *src++;
|
||||
}
|
||||
|
||||
// increment head or tail
|
||||
TRUE_INLINE void incr(ringbuffer *b, volatile int *what, int n){
|
||||
*what += n;
|
||||
if(*what >= b->length) *what -= b->length;
|
||||
}
|
||||
|
||||
static int read(ringbuffer *b, uint8_t *s, int len){
|
||||
int l = datalen(b);
|
||||
if(!l) return 0;
|
||||
if(l > len) l = len;
|
||||
int _1st = b->length - b->head;
|
||||
if(_1st > l) _1st = l;
|
||||
if(_1st > len) _1st = len;
|
||||
mcpy(s, b->data + b->head, _1st);
|
||||
if(_1st < len && l > _1st){
|
||||
mcpy(s+_1st, b->data, l - _1st);
|
||||
incr(b, &b->head, l);
|
||||
return l;
|
||||
}
|
||||
incr(b, &b->head, _1st);
|
||||
return _1st;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RB_read - read data from ringbuffer
|
||||
* @param b - buffer
|
||||
* @param s - array to write data
|
||||
* @param len - max len of `s`
|
||||
* @return bytes read or -1 if busy
|
||||
*/
|
||||
int RB_read(ringbuffer *b, uint8_t *s, int len){
|
||||
if(b->busy) return -1;
|
||||
b->busy = 1;
|
||||
int r = read(b, s, len);
|
||||
b->busy = 0;
|
||||
return r;
|
||||
}
|
||||
|
||||
static int readto(ringbuffer *b, uint8_t byte, uint8_t *s, int len){
|
||||
int idx = hasbyte(b, byte);
|
||||
if(idx < 0) return 0;
|
||||
int partlen = idx + 1 - b->head;
|
||||
// now calculate length of new data portion
|
||||
if(idx < b->head) partlen += b->length;
|
||||
if(partlen > len) return -read(b, s, len);
|
||||
return read(b, s, partlen);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RB_readto fill array `s` with data until byte `byte` (with it)
|
||||
* @param b - ringbuffer
|
||||
* @param byte - check byte
|
||||
* @param s - buffer to write data
|
||||
* @param len - length of `s`
|
||||
* @return amount of bytes written (negative, if len<data in buffer or buffer is busy)
|
||||
*/
|
||||
int RB_readto(ringbuffer *b, uint8_t byte, uint8_t *s, int len){
|
||||
if(b->busy) return -1;
|
||||
b->busy = 1;
|
||||
int n = readto(b, byte, s, len);
|
||||
b->busy = 0;
|
||||
return n;
|
||||
}
|
||||
|
||||
static int write(ringbuffer *b, const uint8_t *str, int l){
|
||||
int r = b->length - 1 - datalen(b); // rest length
|
||||
if(l > r || !l) return 0;
|
||||
int _1st = b->length - b->tail;
|
||||
if(_1st > l) _1st = l;
|
||||
mcpy(b->data + b->tail, str, _1st);
|
||||
if(_1st < l){ // add another piece from start
|
||||
mcpy(b->data, str+_1st, l-_1st);
|
||||
}
|
||||
incr(b, &b->tail, l);
|
||||
return l;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief RB_write - write some data to ringbuffer
|
||||
* @param b - buffer
|
||||
* @param str - data
|
||||
* @param l - length
|
||||
* @return amount of bytes written or -1 if busy
|
||||
*/
|
||||
int RB_write(ringbuffer *b, const uint8_t *str, int l){
|
||||
if(b->busy) return -1;
|
||||
b->busy = 1;
|
||||
int w = write(b, str, l);
|
||||
b->busy = 0;
|
||||
return w;
|
||||
}
|
||||
|
||||
// just delete all information in buffer `b`
|
||||
int RB_clearbuf(ringbuffer *b){
|
||||
if(b->busy) return -1;
|
||||
b->busy = 1;
|
||||
b->head = 0;
|
||||
b->tail = 0;
|
||||
b->busy = 0;
|
||||
return 1;
|
||||
}
|
||||
41
F1:F103/BISS_C_encoders/ringbuffer.h
Normal file
41
F1:F103/BISS_C_encoders/ringbuffer.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright 2023 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#if defined STM32F0
|
||||
#include <stm32f0.h>
|
||||
#elif defined STM32F1
|
||||
#include <stm32f1.h>
|
||||
#elif defined STM32F3
|
||||
#include <stm32f3.h>
|
||||
#endif
|
||||
|
||||
typedef struct{
|
||||
uint8_t *data; // data buffer
|
||||
const int length; // its length
|
||||
int head; // head index
|
||||
int tail; // tail index
|
||||
volatile int busy; // == TRUE if buffer is busy now
|
||||
} ringbuffer;
|
||||
|
||||
int RB_read(ringbuffer *b, uint8_t *s, int len);
|
||||
int RB_readto(ringbuffer *b, uint8_t byte, uint8_t *s, int len);
|
||||
int RB_hasbyte(ringbuffer *b, uint8_t byte);
|
||||
int RB_write(ringbuffer *b, const uint8_t *str, int l);
|
||||
int RB_datalen(ringbuffer *b);
|
||||
int RB_clearbuf(ringbuffer *b);
|
||||
266
F1:F103/BISS_C_encoders/strfunc.c
Normal file
266
F1:F103/BISS_C_encoders/strfunc.c
Normal file
@ -0,0 +1,266 @@
|
||||
/*
|
||||
* This file is part of the encoders project.
|
||||
* Copyright 2025 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stm32f1.h>
|
||||
#include <string.h>
|
||||
|
||||
/**
|
||||
* @brief hexdump - dump hex array by 16 bytes in string
|
||||
* @param sendfun - function to send data
|
||||
* @param arr - array to dump
|
||||
* @param len - length of `arr`
|
||||
*/
|
||||
void hexdump(int (*sendfun)(const char *s), uint8_t *arr, uint16_t len){
|
||||
char buf[52], *bptr = buf;
|
||||
for(uint16_t l = 0; l < len; ++l, ++arr){
|
||||
for(int16_t j = 1; j > -1; --j){
|
||||
register uint8_t half = (*arr >> (4*j)) & 0x0f;
|
||||
if(half < 10) *bptr++ = half + '0';
|
||||
else *bptr++ = half - 10 + 'a';
|
||||
}
|
||||
if(l % 16 == 15){
|
||||
*bptr++ = '\n';
|
||||
*bptr = 0;
|
||||
sendfun(buf);
|
||||
bptr = buf;
|
||||
}else *bptr++ = ' ';
|
||||
}
|
||||
if(bptr != buf){
|
||||
*bptr++ = '\n';
|
||||
*bptr = 0;
|
||||
sendfun(buf);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief _2str - convert value into string buffer
|
||||
* @param val - |value|
|
||||
* @param minus - ==0 if value > 0
|
||||
* @return buffer with number
|
||||
*/
|
||||
static char *_2str(uint32_t val, uint8_t minus){
|
||||
static char strbuf[12];
|
||||
char *bufptr = &strbuf[11];
|
||||
*bufptr = 0;
|
||||
if(!val){
|
||||
*(--bufptr) = '0';
|
||||
}else{
|
||||
while(val){
|
||||
uint32_t x = val / 10;
|
||||
*(--bufptr) = (val - 10*x) + '0';
|
||||
val = x;
|
||||
}
|
||||
}
|
||||
if(minus) *(--bufptr) = '-';
|
||||
return bufptr;
|
||||
}
|
||||
|
||||
// return string with number `val`
|
||||
char *u2str(uint32_t val){
|
||||
return _2str(val, 0);
|
||||
}
|
||||
char *i2str(int32_t i){
|
||||
uint8_t minus = 0;
|
||||
uint32_t val;
|
||||
if(i < 0){
|
||||
minus = 1;
|
||||
val = -i;
|
||||
}else val = i;
|
||||
return _2str(val, minus);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief uhex2str - print 32bit unsigned int as hex
|
||||
* @param val - value
|
||||
* @return string with number
|
||||
*/
|
||||
char *uhex2str(uint32_t val){
|
||||
static char buf[12] = "0x";
|
||||
int npos = 2;
|
||||
uint8_t *ptr = (uint8_t*)&val + 3;
|
||||
int8_t i, j, z=1;
|
||||
for(i = 0; i < 4; ++i, --ptr){
|
||||
if(*ptr == 0){ // omit leading zeros
|
||||
if(i == 3) z = 0;
|
||||
if(z) continue;
|
||||
}
|
||||
else z = 0;
|
||||
for(j = 1; j > -1; --j){
|
||||
uint8_t half = (*ptr >> (4*j)) & 0x0f;
|
||||
if(half < 10) buf[npos++] = half + '0';
|
||||
else buf[npos++] = half - 10 + 'a';
|
||||
}
|
||||
}
|
||||
buf[npos] = 0;
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief omit_spaces - eliminate leading spaces and other trash in string
|
||||
* @param buf - string
|
||||
* @return - pointer to first character in `buf` > ' '
|
||||
*/
|
||||
char *omit_spaces(char *buf){
|
||||
while(*buf){
|
||||
if(*buf > ' ') break;
|
||||
++buf;
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief getdec - read decimal number & return pointer to next non-number symbol
|
||||
* @param buf - string
|
||||
* @param N - number read
|
||||
* @return Next non-number symbol. In case of overflow return `buf` and N==0xffffffff
|
||||
*/
|
||||
static char *getdec(char *buf, uint32_t *N){
|
||||
char *start = (char*)buf;
|
||||
uint32_t num = 0;
|
||||
while(*buf){
|
||||
char c = *buf;
|
||||
if(c < '0' || c > '9'){
|
||||
break;
|
||||
}
|
||||
if(num > 429496729 || (num == 429496729 && c > '5')){ // overflow
|
||||
*N = 0xffffff;
|
||||
return start;
|
||||
}
|
||||
num *= 10;
|
||||
num += c - '0';
|
||||
++buf;
|
||||
}
|
||||
*N = num;
|
||||
return buf;
|
||||
}
|
||||
// read hexadecimal number (without 0x prefix!)
|
||||
static char *gethex(char *buf, uint32_t *N){
|
||||
char *start = buf;
|
||||
uint32_t num = 0;
|
||||
while(*buf){
|
||||
char c = *buf;
|
||||
uint8_t M = 0;
|
||||
if(c >= '0' && c <= '9'){
|
||||
M = '0';
|
||||
}else if(c >= 'A' && c <= 'F'){
|
||||
M = 'A' - 10;
|
||||
}else if(c >= 'a' && c <= 'f'){
|
||||
M = 'a' - 10;
|
||||
}
|
||||
if(M){
|
||||
if(num & 0xf0000000){ // overflow
|
||||
*N = 0xffffff;
|
||||
return start;
|
||||
}
|
||||
num <<= 4;
|
||||
num += c - M;
|
||||
}else{
|
||||
break;
|
||||
}
|
||||
++buf;
|
||||
}
|
||||
*N = num;
|
||||
return buf;
|
||||
}
|
||||
// read octal number (without 0 prefix!)
|
||||
static char *getoct(char *buf, uint32_t *N){
|
||||
char *start = (char*)buf;
|
||||
uint32_t num = 0;
|
||||
while(*buf){
|
||||
char c = *buf;
|
||||
if(c < '0' || c > '7'){
|
||||
break;
|
||||
}
|
||||
if(num & 0xe0000000){ // overflow
|
||||
*N = 0xffffff;
|
||||
return start;
|
||||
}
|
||||
num <<= 3;
|
||||
num += c - '0';
|
||||
++buf;
|
||||
}
|
||||
*N = num;
|
||||
return buf;
|
||||
}
|
||||
// read binary number (without b prefix!)
|
||||
static char *getbin(char *buf, uint32_t *N){
|
||||
char *start = (char*)buf;
|
||||
uint32_t num = 0;
|
||||
while(*buf){
|
||||
char c = *buf;
|
||||
if(c < '0' || c > '1'){
|
||||
break;
|
||||
}
|
||||
if(num & 0x80000000){ // overflow
|
||||
*N = 0xffffff;
|
||||
return start;
|
||||
}
|
||||
num <<= 1;
|
||||
if(c == '1') num |= 1;
|
||||
++buf;
|
||||
}
|
||||
*N = num;
|
||||
return buf;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief getnum - read uint32_t from string (dec, hex or bin: 127, 0x7f, 0b1111111)
|
||||
* @param buf - buffer with number and so on
|
||||
* @param N - the number read
|
||||
* @return pointer to first non-number symbol in buf
|
||||
* (if it is == buf, there's no number or if *N==0xffffffff there was overflow)
|
||||
*/
|
||||
char *getnum(char *txt, uint32_t *N){
|
||||
char *nxt = NULL;
|
||||
char *s = omit_spaces(txt);
|
||||
if(*s == '0'){ // hex, oct or 0
|
||||
if(s[1] == 'x' || s[1] == 'X'){ // hex
|
||||
nxt = gethex(s+2, N);
|
||||
if(nxt == s+2) nxt = (char*)txt;
|
||||
}else if(s[1] > '0'-1 && s[1] < '8'){ // oct
|
||||
nxt = getoct(s+1, N);
|
||||
if(nxt == s+1) nxt = (char*)txt;
|
||||
}else{ // 0
|
||||
nxt = s+1;
|
||||
*N = 0;
|
||||
}
|
||||
}else if(*s == 'b' || *s == 'B'){
|
||||
nxt = getbin(s+1, N);
|
||||
if(nxt == s+1) nxt = (char*)txt;
|
||||
}else{
|
||||
nxt = getdec(s, N);
|
||||
if(nxt == s) nxt = (char*)txt;
|
||||
}
|
||||
return nxt;
|
||||
}
|
||||
|
||||
// get signed integer
|
||||
char *getint(char *txt, int32_t *I){
|
||||
char *s = omit_spaces(txt);
|
||||
int32_t sign = 1;
|
||||
uint32_t U;
|
||||
if(*s == '-'){
|
||||
sign = -1;
|
||||
++s;
|
||||
}
|
||||
char *nxt = getnum(s, &U);
|
||||
if(nxt == s) return txt;
|
||||
if(U & 0x80000000) return txt; // overfull
|
||||
*I = sign * (int32_t)U;
|
||||
return nxt;
|
||||
}
|
||||
30
F1:F103/BISS_C_encoders/strfunc.h
Normal file
30
F1:F103/BISS_C_encoders/strfunc.h
Normal file
@ -0,0 +1,30 @@
|
||||
/*
|
||||
* This file is part of the encoders project.
|
||||
* Copyright 2025 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void hexdump(int (*sendfun)(const char *s), uint8_t *arr, uint16_t len);
|
||||
char *u2str(uint32_t val);
|
||||
char *i2str(int32_t i);
|
||||
char *uhex2str(uint32_t val);
|
||||
char *getnum(char *txt, uint32_t *N);
|
||||
char *omit_spaces(char *buf);
|
||||
char *getint(char *txt, int32_t *I);
|
||||
|
||||
100
F1:F103/BISS_C_encoders/usart.c
Normal file
100
F1:F103/BISS_C_encoders/usart.c
Normal file
@ -0,0 +1,100 @@
|
||||
/*
|
||||
* usart.c
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* 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 of the License, 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; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "stm32f1.h"
|
||||
#include "usart.h"
|
||||
#include "ringbuffer.h"
|
||||
|
||||
extern volatile uint32_t Tms;
|
||||
// buffers for out ringbuffer and DMA send
|
||||
static uint8_t buf[UARTBUFSZ], txbuf[UARTBUFSZ];
|
||||
static ringbuffer ringbuf = {.data = buf, .length = UARTBUFSZ};
|
||||
|
||||
static volatile int usart_txrdy = 1; // transmission done
|
||||
|
||||
// transmit current tbuf
|
||||
void usart_transmit(){
|
||||
if(RB_hasbyte(&ringbuf, '\n') < 0 || !usart_txrdy) return;
|
||||
int L = 0, l = 0;
|
||||
do{
|
||||
l = RB_readto(&ringbuf, '\n', txbuf + L, UARTBUFSZ - L);
|
||||
if(l > 0) L += l;
|
||||
}while(l > 0 && L < UARTBUFSZ);
|
||||
if(L < 1) return;
|
||||
usart_txrdy = 0;
|
||||
if(L < UARTBUFSZ-1){
|
||||
txbuf[L++] = '$'; txbuf[L++] = '\n';
|
||||
}
|
||||
DMA1_Channel4->CCR &= ~DMA_CCR_EN;
|
||||
DMA1_Channel4->CMAR = (uint32_t) txbuf; // mem
|
||||
DMA1_Channel4->CNDTR = L;
|
||||
DMA1_Channel4->CCR |= DMA_CCR_EN;
|
||||
}
|
||||
|
||||
void usart_putchar(const char ch){
|
||||
RB_write(&ringbuf, (const uint8_t*)&ch, 1);
|
||||
}
|
||||
|
||||
void usart_send(const char *str){
|
||||
int l = strlen(str);
|
||||
if(RB_datalen(&ringbuf) > UARTBUFSZ/2) usart_transmit();
|
||||
RB_write(&ringbuf, (const uint8_t*)str, l);
|
||||
}
|
||||
|
||||
/*
|
||||
* USART speed: baudrate = Fck/(USARTDIV)
|
||||
* USARTDIV stored in USART->BRR
|
||||
*
|
||||
* for 72MHz USARTDIV=72000/f(kboud); so for 115200 USARTDIV=72000/115.2=625 -> BRR=0x271
|
||||
* 9600: BRR = 7500 (0x1D4C)
|
||||
*/
|
||||
|
||||
void usart_setup(){
|
||||
uint32_t tmout = 16000000;
|
||||
// PA9 - Tx, PA10 - Rx
|
||||
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_USART1EN | RCC_APB2ENR_AFIOEN;
|
||||
RCC->AHBENR |= RCC_AHBENR_DMA1EN;
|
||||
GPIOA->CRH |= CRH(9, CNF_AFPP|MODE_NORMAL) | CRH(10, CNF_FLINPUT|MODE_INPUT);
|
||||
|
||||
// USART1 Tx DMA - Channel4 (Rx - channel 5)
|
||||
DMA1_Channel4->CPAR = (uint32_t) &USART1->DR; // periph
|
||||
DMA1_Channel4->CCR |= DMA_CCR_MINC | DMA_CCR_DIR | DMA_CCR_TCIE; // 8bit, mem++, mem->per, transcompl irq
|
||||
// Tx CNDTR set @ each transmission due to data size
|
||||
NVIC_SetPriority(DMA1_Channel4_IRQn, 3);
|
||||
NVIC_EnableIRQ(DMA1_Channel4_IRQn);
|
||||
NVIC_SetPriority(USART1_IRQn, 0);
|
||||
// setup usart1
|
||||
USART1->BRR = 72000000 / 4000000;
|
||||
USART1->CR1 = USART_CR1_TE | USART_CR1_UE; // 1start,8data,nstop; enable Rx,Tx,USART
|
||||
while(!(USART1->SR & USART_SR_TC)){if(--tmout == 0) break;} // polling idle frame Transmission
|
||||
USART1->SR = 0; // clear flags
|
||||
USART1->CR1 |= USART_CR1_RXNEIE; // allow Rx IRQ
|
||||
USART1->CR3 = USART_CR3_DMAT; // enable DMA Tx
|
||||
}
|
||||
|
||||
void dma1_channel4_isr(){
|
||||
if(DMA1->ISR & DMA_ISR_TCIF4){ // Tx
|
||||
DMA1->IFCR = DMA_IFCR_CTCIF4; // clear TC flag
|
||||
usart_txrdy = 1;
|
||||
}
|
||||
}
|
||||
32
F1:F103/BISS_C_encoders/usart.h
Normal file
32
F1:F103/BISS_C_encoders/usart.h
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* usart.h
|
||||
*
|
||||
* Copyright 2018 Edward V. Emelianoff <eddy@sao.ru, edward.emelianoff@gmail.com>
|
||||
*
|
||||
* 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 of the License, 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; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
|
||||
* MA 02110-1301, USA.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define UARTBUFSZ (128)
|
||||
|
||||
// macro for static strings
|
||||
#define USEND(str) usart_send(str)
|
||||
|
||||
void usart_transmit();
|
||||
void usart_setup();
|
||||
void usart_send(const char *str);
|
||||
void usart_putchar(const char ch);
|
||||
248
F1:F103/BISS_C_encoders/usb_descr.c
Normal file
248
F1:F103/BISS_C_encoders/usb_descr.c
Normal file
@ -0,0 +1,248 @@
|
||||
/*
|
||||
* Copyright 2024 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "usb_descr.h"
|
||||
|
||||
#undef DBG
|
||||
#define DBG(x)
|
||||
#undef DBGs
|
||||
#define DBGs(x)
|
||||
|
||||
// low/high for uint16_t
|
||||
#define L16(x) (x & 0xff)
|
||||
#define H16(x) (x >> 8)
|
||||
|
||||
static const uint8_t USB_DeviceDescriptor[] = {
|
||||
USB_DT_DEVICE_SIZE, // bLength
|
||||
USB_DT_DEVICE, // bDescriptorType
|
||||
L16(bcdUSB), // bcdUSB_L
|
||||
H16(bcdUSB), // bcdUSB_H
|
||||
USB_CLASS_MISC, // bDeviceClass
|
||||
bDeviceSubClass, // bDeviceSubClass
|
||||
bDeviceProtocol, // bDeviceProtocol
|
||||
USB_EP0BUFSZ, // bMaxPacketSize
|
||||
L16(idVendor), // idVendor_L
|
||||
H16(idVendor), // idVendor_H
|
||||
L16(idProduct), // idProduct_L
|
||||
H16(idProduct), // idProduct_H
|
||||
L16(bcdDevice_Ver), // bcdDevice_Ver_L
|
||||
H16(bcdDevice_Ver), // bcdDevice_Ver_H
|
||||
iMANUFACTURER_DESCR, // iManufacturer - indexes of string descriptors in array
|
||||
iPRODUCT_DESCR, // iProduct
|
||||
iSERIAL_DESCR, // iSerial
|
||||
bNumConfigurations // bNumConfigurations
|
||||
};
|
||||
|
||||
static const uint8_t USB_DeviceQualifierDescriptor[] = {
|
||||
USB_DT_QUALIFIER_SIZE, //bLength
|
||||
USB_DT_QUALIFIER, // bDescriptorType
|
||||
L16(bcdUSB), // bcdUSB_L
|
||||
H16(bcdUSB), // bcdUSB_H
|
||||
USB_CLASS_PER_INTERFACE, // bDeviceClass
|
||||
bDeviceSubClass, // bDeviceSubClass
|
||||
bDeviceProtocol, // bDeviceProtocol
|
||||
USB_EP0BUFSZ, // bMaxPacketSize0
|
||||
bNumConfigurations, // bNumConfigurations
|
||||
0 // Reserved
|
||||
};
|
||||
|
||||
#define wTotalLength (USB_DT_CONFIG_SIZE + bTotNumEndpoints * 66)
|
||||
|
||||
/*
|
||||
* _1stI - number of first interface
|
||||
* IDidx - 0 or index of string descriptor for given interface
|
||||
* EPx - number of virtual interrupt EP
|
||||
* EP - number of real EP in/out
|
||||
*/
|
||||
#define USB_IAD(_1stI, IDidx, EPx, EP) \
|
||||
USB_DT_IAD_SIZE, /* bLength: IAD size */ \
|
||||
USB_DT_IAD, /* bDescriptorType: IAD */ \
|
||||
_1stI, /* bFirstInterface */ \
|
||||
2, /* bInterfaceCount */ \
|
||||
2, /* bFunctionClass: CDC */ \
|
||||
2, /* bFunctionSubClass */ \
|
||||
0, /* bFunctionProtocol */ \
|
||||
0, /* iFunction */ \
|
||||
/* Interface Descriptor */ \
|
||||
USB_DT_INTERFACE_SIZE, /* bLength: Interface Descriptor size */ \
|
||||
USB_DT_INTERFACE, /* bDescriptorType: Interface */ \
|
||||
_1stI, /* bInterfaceNumber: Number of Interface */ \
|
||||
0, /* bAlternateSetting: Alternate setting */ \
|
||||
1, /* bNumEndpoints: one for this */ \
|
||||
USB_CLASS_COMM, /* bInterfaceClass */ \
|
||||
2, /* bInterfaceSubClass: ACM */ \
|
||||
0, /* bInterfaceProtocol */ \
|
||||
IDidx, /* iInterface */ \
|
||||
/* CDC descriptor */ \
|
||||
USB_DT_CS_INTERFACE_SIZE, /* bLength */ \
|
||||
USB_DT_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ \
|
||||
0, /* bDescriptorSubtype: Header Func Desc */ \
|
||||
0x10, /* bcdCDC: spec release number */ \
|
||||
1, /* bDataInterface */ \
|
||||
USB_DT_CS_INTERFACE_SIZE, /* bLength */ \
|
||||
USB_DT_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ \
|
||||
1, /* bDescriptorSubtype: Call Management Func Desc */ \
|
||||
0, /* bmCapabilities: D0+D1 */ \
|
||||
(_1stI+1), /* bDataInterface */ \
|
||||
USB_DT_CS_INTERFACE_SIZE-1, /* bLength */ \
|
||||
USB_DT_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ \
|
||||
2, /* bDescriptorSubtype: Abstract Control Management desc */ \
|
||||
2, /* bmCapabilities */ \
|
||||
USB_DT_CS_INTERFACE_SIZE, /* bLength */ \
|
||||
USB_DT_CS_INTERFACE, /* bDescriptorType: CS_INTERFACE */ \
|
||||
6, /* bDescriptorSubtype: Union func desc */ \
|
||||
_1stI, /* bMasterInterface: Communication class interface */ \
|
||||
(_1stI+1), /* bSlaveInterface0: Data Class Interface */ \
|
||||
/* Virtual endpoint 1 Descriptor */ \
|
||||
USB_DT_ENDPOINT_SIZE, /* bLength: Endpoint Descriptor size */ \
|
||||
USB_DT_ENDPOINT, /* bDescriptorType: Endpoint */ \
|
||||
(0x80+EPx), /* bEndpointAddress IN8 - non-existant */ \
|
||||
USB_BM_ATTR_INTERRUPT, /* bmAttributes: Interrupt */ \
|
||||
L16(USB_EP1BUFSZ), /* wMaxPacketSize LO */ \
|
||||
H16(USB_EP1BUFSZ), /* wMaxPacketSize HI */ \
|
||||
0x10, /* bInterval: 16ms */ \
|
||||
/* DATA endpoint */ \
|
||||
USB_DT_INTERFACE_SIZE, /* bLength: Interface Descriptor size */ \
|
||||
USB_DT_INTERFACE, /* bDescriptorType: Interface */ \
|
||||
(_1stI+1), /* bInterfaceNumber: Number of Interface */ \
|
||||
0, /* bAlternateSetting: Alternate setting */ \
|
||||
2, /* bNumEndpoints: in and out */ \
|
||||
USB_CLASS_DATA, /* bInterfaceClass */ \
|
||||
2, /* bInterfaceSubClass: ACM */ \
|
||||
0, /* bInterfaceProtocol */ \
|
||||
0, /* iInterface */ \
|
||||
/*Endpoint IN1 Descriptor */ \
|
||||
USB_DT_ENDPOINT_SIZE, /* bLength: Endpoint Descriptor size */ \
|
||||
USB_DT_ENDPOINT, /* bDescriptorType: Endpoint */ \
|
||||
(0x80+EP), /* bEndpointAddress: IN1 */ \
|
||||
USB_BM_ATTR_BULK, /* bmAttributes: Bulk */ \
|
||||
L16(USB_TXBUFSZ), /* wMaxPacketSize LO */ \
|
||||
H16(USB_TXBUFSZ), /* wMaxPacketSize HI */ \
|
||||
0, /* bInterval: ignore for Bulk transfer */ \
|
||||
/* Endpoint OUT1 Descriptor */ \
|
||||
USB_DT_ENDPOINT_SIZE, /* bLength: Endpoint Descriptor size */ \
|
||||
USB_DT_ENDPOINT, /* bDescriptorType: Endpoint */ \
|
||||
EP, /* bEndpointAddress: OUT1 */ \
|
||||
USB_BM_ATTR_BULK, /* bmAttributes: Bulk */ \
|
||||
L16(USB_RXBUFSZ), /* wMaxPacketSize LO */ \
|
||||
H16(USB_RXBUFSZ), /* wMaxPacketSize HI */ \
|
||||
0 /* bInterval: ignore for Bulk transfer */
|
||||
|
||||
|
||||
static const uint8_t USB_ConfigDescriptor[] = {
|
||||
// Configuration Descriptor
|
||||
USB_DT_CONFIG_SIZE, // bLength: Configuration Descriptor size
|
||||
USB_DT_CONFIG, // bDescriptorType: Configuration
|
||||
L16(wTotalLength), // wTotalLength.L :no of returned bytes
|
||||
H16(wTotalLength), // wTotalLength.H
|
||||
bNumInterfaces, // bNumInterfaces
|
||||
1, // bConfigurationValue: Current configuration value
|
||||
0, // iConfiguration: Index of string descriptor describing the configuration or 0
|
||||
BusPowered, // bmAttributes - Bus powered
|
||||
50, // MaxPower in 2mA units
|
||||
//--IADs-------------------------------------------------------------------------
|
||||
USB_IAD(0, iINTERFACE_DESCR1, 8, 1),
|
||||
USB_IAD(2, iINTERFACE_DESCR2, 9, 2),
|
||||
USB_IAD(4, iINTERFACE_DESCR3, 10, 3),
|
||||
};
|
||||
|
||||
//const uint8_t HID_ReportDescriptor[];
|
||||
|
||||
_USB_LANG_ID_(LD, LANG_US);
|
||||
_USB_STRING_(SD, u"0.0.1");
|
||||
_USB_STRING_(MD, u"eddy@sao.ru");
|
||||
_USB_STRING_(PD, u"USB BISS-C encoders controller");
|
||||
_USB_STRING_(ID1, u"encoder_cmd");
|
||||
_USB_STRING_(ID2, u"encoder_X");
|
||||
_USB_STRING_(ID3, u"encoder_Y");
|
||||
|
||||
static const void* const StringDescriptor[iDESCR_AMOUNT] = {
|
||||
[iLANGUAGE_DESCR] = &LD,
|
||||
[iMANUFACTURER_DESCR] = &MD,
|
||||
[iPRODUCT_DESCR] = &PD,
|
||||
[iSERIAL_DESCR] = &SD,
|
||||
[iINTERFACE_DESCR1] = &ID1,
|
||||
[iINTERFACE_DESCR2] = &ID2,
|
||||
[iINTERFACE_DESCR3] = &ID3,
|
||||
};
|
||||
|
||||
static void wr0(const uint8_t *buf, uint16_t size, uint16_t askedsize){
|
||||
if(askedsize < size) size = askedsize; // shortened request
|
||||
if(size < USB_EP0BUFSZ){
|
||||
EP_WriteIRQ(0, buf, size);
|
||||
DBG("short wr0");
|
||||
DBGs(uhex2str(size));
|
||||
return;
|
||||
}
|
||||
DBG("long wr0");
|
||||
DBGs(uhex2str(size));
|
||||
while(size){
|
||||
uint16_t l = size;
|
||||
if(l > USB_EP0BUFSZ) l = USB_EP0BUFSZ;
|
||||
EP_WriteIRQ(0, buf, l);
|
||||
buf += l;
|
||||
size -= l;
|
||||
uint8_t needzlp = (l == USB_EP0BUFSZ) ? 1 : 0;
|
||||
if(size || needzlp){ // send last data buffer
|
||||
uint16_t epstatus = KEEP_DTOG(USB->EPnR[0]);
|
||||
// keep DTOGs, clear CTR_RX,TX, set TX VALID, leave stat_Rx
|
||||
USB->EPnR[0] = (epstatus & ~(USB_EPnR_CTR_RX|USB_EPnR_CTR_TX|USB_EPnR_STAT_RX))
|
||||
^ USB_EPnR_STAT_TX;
|
||||
uint32_t ctr = 1000000;
|
||||
while(--ctr && (USB->ISTR & USB_ISTR_CTR) == 0){IWDG->KR = IWDG_REFRESH;};
|
||||
if((USB->ISTR & USB_ISTR_CTR) == 0){
|
||||
return;
|
||||
}
|
||||
if(needzlp) EP_WriteIRQ(0, NULL, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void get_descriptor(config_pack_t *pack){
|
||||
uint8_t descrtype = pack->wValue >> 8,
|
||||
descridx = pack->wValue & 0xff;
|
||||
switch(descrtype){
|
||||
case DEVICE_DESCRIPTOR:
|
||||
DBG("DEVICE_DESCRIPTOR");
|
||||
wr0(USB_DeviceDescriptor, sizeof(USB_DeviceDescriptor), pack->wLength);
|
||||
break;
|
||||
case CONFIGURATION_DESCRIPTOR:
|
||||
DBG("CONFIGURATION_DESCRIPTOR");
|
||||
wr0(USB_ConfigDescriptor, sizeof(USB_ConfigDescriptor), pack->wLength);
|
||||
break;
|
||||
case STRING_DESCRIPTOR:
|
||||
DBG("STRING_DESCRIPTOR");
|
||||
if(descridx < iDESCR_AMOUNT){
|
||||
wr0((const uint8_t *)StringDescriptor[descridx], *((uint8_t*)StringDescriptor[descridx]), pack->wLength);
|
||||
DBGs(uhex2str(descridx));
|
||||
}else{
|
||||
EP_WriteIRQ(0, NULL, 0);
|
||||
DBG("Wrong index");
|
||||
DBGs(uhex2str(descridx));
|
||||
}
|
||||
break;
|
||||
case DEVICE_QUALIFIER_DESCRIPTOR:
|
||||
DBG("DEVICE_QUALIFIER_DESCRIPTOR");
|
||||
wr0(USB_DeviceQualifierDescriptor, sizeof(USB_DeviceQualifierDescriptor), pack->wLength);
|
||||
break;
|
||||
/* case HID_REPORT_DESCRIPTOR:
|
||||
wr0(HID_ReportDescriptor, sizeof(HID_ReportDescriptor), pack->wLength);
|
||||
break;*/
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
64
F1:F103/BISS_C_encoders/usb_descr.h
Normal file
64
F1:F103/BISS_C_encoders/usb_descr.h
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Copyright 2024 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "usb_lib.h"
|
||||
|
||||
// definition of parts common for USB_DeviceDescriptor & USB_DeviceQualifierDescriptor
|
||||
// bcdUSB: 1.10
|
||||
#define bcdUSB 0x0110
|
||||
// Class - Misc (EF), subclass - common (2), protocol - interface association descr (1)
|
||||
#define bDeviceSubClass 0x02
|
||||
#define bDeviceProtocol 0x01
|
||||
#define idVendor 0x0483
|
||||
#define idProduct 0x5740
|
||||
#define bcdDevice_Ver 0x0200
|
||||
#define bNumConfigurations 1
|
||||
|
||||
// amount of interfaces and endpoints (except 0) used
|
||||
#define bNumInterfaces 6
|
||||
#define bTotNumEndpoints 3
|
||||
|
||||
// powered
|
||||
#define BusPowered (1<<7)
|
||||
#define SelfPowered (1<<6)
|
||||
#define RemoteWakeup (1<<5)
|
||||
|
||||
// buffer sizes
|
||||
// for USB FS EP0 buffers are from 8 to 64 bytes long
|
||||
#define USB_EP0BUFSZ 64
|
||||
// virtual
|
||||
#define USB_EP1BUFSZ 10
|
||||
// Rx/Tx EPs: (512-64-128)/14 rouded to 8
|
||||
#define USB_RXBUFSZ 16
|
||||
#define USB_TXBUFSZ 16
|
||||
|
||||
// string descriptors
|
||||
enum{
|
||||
iLANGUAGE_DESCR,
|
||||
iMANUFACTURER_DESCR,
|
||||
iPRODUCT_DESCR,
|
||||
iSERIAL_DESCR,
|
||||
iINTERFACE_DESCR1,
|
||||
iINTERFACE_DESCR2,
|
||||
iINTERFACE_DESCR3,
|
||||
iDESCR_AMOUNT
|
||||
};
|
||||
|
||||
void get_descriptor(config_pack_t *pack);
|
||||
300
F1:F103/BISS_C_encoders/usb_dev.c
Normal file
300
F1:F103/BISS_C_encoders/usb_dev.c
Normal file
@ -0,0 +1,300 @@
|
||||
/*
|
||||
* Copyright 2024 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <stm32f1.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "ringbuffer.h"
|
||||
#include "usb_descr.h"
|
||||
#include "usb_dev.h"
|
||||
|
||||
// Class-Specific Control Requests
|
||||
#define SEND_ENCAPSULATED_COMMAND 0x00 // unused
|
||||
#define GET_ENCAPSULATED_RESPONSE 0x01 // unused
|
||||
#define SET_COMM_FEATURE 0x02 // unused
|
||||
#define GET_COMM_FEATURE 0x03 // unused
|
||||
#define CLEAR_COMM_FEATURE 0x04 // unused
|
||||
#define SET_LINE_CODING 0x20
|
||||
#define GET_LINE_CODING 0x21
|
||||
#define SET_CONTROL_LINE_STATE 0x22
|
||||
#define SEND_BREAK 0x23
|
||||
|
||||
// control line states
|
||||
#define CONTROL_DTR 0x01
|
||||
#define CONTROL_RTS 0x02
|
||||
|
||||
#undef DBG
|
||||
#define DBG(x)
|
||||
#undef DBGs
|
||||
#define DBGs(x)
|
||||
|
||||
// inbuf overflow when receiving
|
||||
static volatile uint8_t bufovrfl[bTotNumEndpoints] = {0};
|
||||
|
||||
// receive buffer: hold data until chkin() call
|
||||
static uint8_t volatile rcvbuf[bTotNumEndpoints][USB_RXBUFSZ];
|
||||
static uint8_t volatile rcvbuflen[bTotNumEndpoints] = {0};
|
||||
// line coding
|
||||
#define DEFLC {115200, 0, 0, 8}
|
||||
static usb_LineCoding lineCoding[bTotNumEndpoints] = {DEFLC, DEFLC, DEFLC};
|
||||
// CDC configured and ready to use
|
||||
volatile uint8_t CDCready[bTotNumEndpoints] = {0};
|
||||
|
||||
// ring buffers for incoming and outgoing data
|
||||
static uint8_t obuf[bTotNumEndpoints][RBOUTSZ], ibuf[bTotNumEndpoints][RBINSZ];
|
||||
#define OBUF(N) {.data = obuf[N], .length = RBOUTSZ, .head = 0, .tail = 0}
|
||||
static volatile ringbuffer rbout[bTotNumEndpoints] = {OBUF(0), OBUF(1), OBUF(2)};
|
||||
#define IBUF(N) {.data = ibuf[N], .length = RBINSZ, .head = 0, .tail = 0}
|
||||
static volatile ringbuffer rbin[bTotNumEndpoints] = {IBUF(0), IBUF(1), IBUF(2)};
|
||||
// last send data size
|
||||
static volatile int lastdsz[bTotNumEndpoints] = {0};
|
||||
|
||||
static void chkin(uint8_t ifno){
|
||||
if(bufovrfl[ifno]) return; // allow user to know that previous buffer was overflowed and cleared
|
||||
if(!rcvbuflen[ifno]) return;
|
||||
int w = RB_write((ringbuffer*)&rbin[ifno], (uint8_t*)rcvbuf[ifno], rcvbuflen[ifno]);
|
||||
if(w < 0){
|
||||
DBG("Can't write into buffer");
|
||||
return;
|
||||
}
|
||||
if(w != rcvbuflen[ifno]) bufovrfl[ifno] = 1;
|
||||
DBG("Put data into buffer");
|
||||
rcvbuflen[ifno] = 0;
|
||||
uint16_t status = KEEP_DTOG(USB->EPnR[1+ifno]); // don't change DTOG
|
||||
USB->EPnR[1+ifno] = (status & ~(USB_EPnR_STAT_TX|USB_EPnR_CTR_RX)) ^ USB_EPnR_STAT_RX; // prepare to get next data portion
|
||||
}
|
||||
|
||||
// called from transmit EP to send next data portion or by user - when new transmission starts
|
||||
static void send_next(uint8_t ifno){
|
||||
uint8_t usbbuff[USB_TXBUFSZ];
|
||||
int buflen = RB_read((ringbuffer*)&rbout[ifno], (uint8_t*)usbbuff, USB_TXBUFSZ);
|
||||
if(buflen == 0){
|
||||
if(lastdsz[ifno] == 64) EP_Write(1+ifno, NULL, 0); // send ZLP after 64 bits packet when nothing more to send
|
||||
lastdsz[ifno] = 0;
|
||||
return;
|
||||
}else if(buflen < 0){
|
||||
DBG("Buff busy");
|
||||
lastdsz[ifno] = 0;
|
||||
return;
|
||||
}
|
||||
DBG("Got data in buf");
|
||||
DBGs(uhex2str(buflen));
|
||||
DBGs(uhex2str(ifno));
|
||||
EP_Write(1+ifno, (uint8_t*)usbbuff, buflen);
|
||||
lastdsz[ifno] = buflen;
|
||||
}
|
||||
|
||||
// data IN/OUT handler
|
||||
static void rxtx_handler(){
|
||||
uint8_t ifno = (USB->ISTR & USB_ISTR_EPID) - 1;
|
||||
DBG("rxtx_handler");
|
||||
DBGs(uhex2str(ifno));
|
||||
if(ifno > bTotNumEndpoints-1){
|
||||
DBG("wront ifno");
|
||||
return;
|
||||
}
|
||||
uint16_t epstatus = KEEP_DTOG(USB->EPnR[1+ifno]);
|
||||
if(RX_FLAG(epstatus)){ // receive data
|
||||
DBG("Got data");
|
||||
if(rcvbuflen[ifno]){
|
||||
bufovrfl[ifno] = 1; // lost last data
|
||||
rcvbuflen[ifno] = 0;
|
||||
DBG("OVERFULL");
|
||||
}
|
||||
rcvbuflen[ifno] = EP_Read(1+ifno, (uint8_t*)rcvbuf[ifno]);
|
||||
DBGs(uhex2str(rcvbuflen[ifno]));
|
||||
USB->EPnR[1+ifno] = epstatus & ~(USB_EPnR_CTR_RX | USB_EPnR_STAT_RX | USB_EPnR_STAT_TX); // keep RX in STALL state until read data
|
||||
chkin(ifno); // try to write current data into RXbuf if it's not busy
|
||||
}else{ // tx successfull
|
||||
DBG("Tx OK");
|
||||
USB->EPnR[1+ifno] = (epstatus & ~(USB_EPnR_CTR_TX | USB_EPnR_STAT_TX)) ^ USB_EPnR_STAT_RX;
|
||||
send_next(ifno);
|
||||
}
|
||||
}
|
||||
|
||||
// weak handlers: change them somewhere else if you want to setup USART
|
||||
// SET_LINE_CODING
|
||||
void WEAK linecoding_handler(uint8_t ifno, usb_LineCoding *lc){
|
||||
lineCoding[ifno] = *lc;
|
||||
DBG("linecoding_handler");
|
||||
DBGs(uhex2str(ifno));
|
||||
}
|
||||
|
||||
// SET_CONTROL_LINE_STATE
|
||||
void WEAK clstate_handler(uint8_t ifno, uint16_t val){
|
||||
DBG("clstate_handler");
|
||||
DBGs(uhex2str(ifno));
|
||||
DBGs(uhex2str(val));
|
||||
CDCready[ifno] = val; // CONTROL_DTR | CONTROL_RTS -> interface connected; 0 -> disconnected
|
||||
}
|
||||
|
||||
// SEND_BREAK
|
||||
void WEAK break_handler(uint8_t ifno){
|
||||
CDCready[ifno] = 0;
|
||||
DBG("break_handler()");
|
||||
DBGs(uhex2str(ifno));
|
||||
}
|
||||
|
||||
|
||||
// USB is configured: setup endpoints
|
||||
void set_configuration(){
|
||||
DBG("set_configuration()");
|
||||
for(int i = 0; i < bTotNumEndpoints; ++i){
|
||||
int r = EP_Init(1+i, EP_TYPE_BULK, USB_TXBUFSZ, USB_RXBUFSZ, rxtx_handler);
|
||||
if(r){
|
||||
DBG("Can't init EP");
|
||||
DBGs(uhex2str(i));
|
||||
DBGs(uhex2str(r));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PL2303 CLASS request
|
||||
void usb_class_request(config_pack_t *req, uint8_t *data, uint16_t datalen){
|
||||
uint8_t recipient = REQUEST_RECIPIENT(req->bmRequestType);
|
||||
uint8_t dev2host = (req->bmRequestType & 0x80) ? 1 : 0;
|
||||
uint8_t ifno = req->wIndex >> 1;
|
||||
if(ifno > bTotNumEndpoints-1 && ifno != 0xff){
|
||||
DBG("wront ifno");
|
||||
return;
|
||||
}
|
||||
DBG("usb_class_request");
|
||||
DBGs(uhex2str(req->bRequest));
|
||||
switch(recipient){
|
||||
case REQ_RECIPIENT_INTERFACE:
|
||||
switch(req->bRequest){
|
||||
case SET_LINE_CODING:
|
||||
DBG("SET_LINE_CODING");
|
||||
if(!data || !datalen) break; // wait for data
|
||||
if(datalen == sizeof(usb_LineCoding))
|
||||
linecoding_handler(ifno, (usb_LineCoding*)data);
|
||||
break;
|
||||
case GET_LINE_CODING:
|
||||
DBG("GET_LINE_CODING");
|
||||
EP_WriteIRQ(0, (uint8_t*)&lineCoding[ifno], sizeof(lineCoding));
|
||||
break;
|
||||
case SET_CONTROL_LINE_STATE:
|
||||
DBG("SET_CONTROL_LINE_STATE");
|
||||
clstate_handler(ifno, req->wValue);
|
||||
break;
|
||||
case SEND_BREAK:
|
||||
DBG("SEND_BREAK");
|
||||
break_handler(ifno);
|
||||
break;
|
||||
default:
|
||||
DBG("Wrong");
|
||||
DBGs(uhex2str(req->bRequest));
|
||||
DBGs(uhex2str(datalen));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
DBG("Wrong");
|
||||
DBGs(uhex2str(recipient));
|
||||
DBGs(uhex2str(datalen));
|
||||
DBGs(uhex2str(req->bRequest));
|
||||
if(dev2host) EP_WriteIRQ(0, NULL, 0);
|
||||
}
|
||||
if(!dev2host) EP_WriteIRQ(0, NULL, 0);
|
||||
}
|
||||
|
||||
// blocking send full content of ring buffer
|
||||
int USB_sendall(uint8_t ifno){
|
||||
while(lastdsz[ifno] > 0){
|
||||
if(!CDCready[ifno]) return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// put `buf` into queue to send
|
||||
int USB_send(uint8_t ifno, const uint8_t *buf, int len){
|
||||
if(!buf || !CDCready[ifno] || !len) return FALSE;
|
||||
DBG("USB_send");
|
||||
while(len){
|
||||
int a = RB_write((ringbuffer*)&rbout[ifno], buf, len);
|
||||
if(a > 0){
|
||||
len -= a;
|
||||
buf += a;
|
||||
} else if (a < 0) continue; // do nothing if buffer is in reading state
|
||||
if(lastdsz[ifno] == 0) send_next(ifno); // need to run manually - all data sent, so no IRQ on IN
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int USB_putbyte(uint8_t ifno, uint8_t byte){
|
||||
if(!CDCready[ifno]) return FALSE;
|
||||
int l = 0;
|
||||
while((l = RB_write((ringbuffer*)&rbout[ifno], &byte, 1)) != 1){
|
||||
if(l < 0) continue;
|
||||
}
|
||||
if(lastdsz[ifno] == 0) send_next(ifno); // need to run manually - all data sent, so no IRQ on IN
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int USB_sendstr(uint8_t ifno, const char *string){
|
||||
if(!string || !CDCready[ifno]) return FALSE;
|
||||
int len = strlen(string);
|
||||
if(!len) return FALSE;
|
||||
return USB_send(ifno, (const uint8_t*)string, len);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USB_receive - get binary data from receiving ring-buffer
|
||||
* @param buf (i) - buffer for received data
|
||||
* @param len - length of `buf`
|
||||
* @return amount of received bytes (negative, if overfull happened)
|
||||
*/
|
||||
int USB_receive(uint8_t ifno, uint8_t *buf, int len){
|
||||
chkin(ifno);
|
||||
if(bufovrfl[ifno]){
|
||||
DBG("Buffer overflow");
|
||||
DBGs(uhex2str(ifno));
|
||||
while(1 != RB_clearbuf((ringbuffer*)&rbin[ifno]));
|
||||
bufovrfl[ifno] = 0;
|
||||
return -1;
|
||||
}
|
||||
int sz = RB_read((ringbuffer*)&rbin[ifno], buf, len);
|
||||
if(sz < 0) return 0; // buffer in writting state
|
||||
DBG("usb read");
|
||||
return sz;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief USB_receivestr - get string up to '\n' and replace '\n' with 0
|
||||
* @param buf - receiving buffer
|
||||
* @param len - its length
|
||||
* @return strlen or negative value indicating overflow (if so, string won't be ends with 0 and buffer should be cleared)
|
||||
*/
|
||||
int USB_receivestr(uint8_t ifno, char *buf, int len){
|
||||
chkin(ifno);
|
||||
if(bufovrfl[ifno]){
|
||||
while(1 != RB_clearbuf((ringbuffer*)&rbin[ifno]));
|
||||
bufovrfl[ifno] = 0;
|
||||
return -1;
|
||||
}
|
||||
int l = RB_readto((ringbuffer*)&rbin[ifno], '\n', (uint8_t*)buf, len);
|
||||
if(l < 1){
|
||||
if(rbin[ifno].length == RB_datalen((ringbuffer*)&rbin[ifno])){ // buffer is full but no '\n' found
|
||||
while(1 != RB_clearbuf((ringbuffer*)&rbin[ifno]));
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if(l == 0) return 0;
|
||||
buf[l-1] = 0; // replace '\n' with strend
|
||||
return l;
|
||||
}
|
||||
|
||||
75
F1:F103/BISS_C_encoders/usb_dev.h
Normal file
75
F1:F103/BISS_C_encoders/usb_dev.h
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright 2024 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <stm32f1.h>
|
||||
#include "usb_descr.h"
|
||||
#include "usb_lib.h"
|
||||
|
||||
// interfaces:
|
||||
#define I_CMD (0)
|
||||
#define I_X (1)
|
||||
#define I_Y (2)
|
||||
|
||||
typedef struct {
|
||||
uint32_t dwDTERate;
|
||||
uint8_t bCharFormat;
|
||||
#define USB_CDC_1_STOP_BITS 0
|
||||
#define USB_CDC_1_5_STOP_BITS 1
|
||||
#define USB_CDC_2_STOP_BITS 2
|
||||
uint8_t bParityType;
|
||||
#define USB_CDC_NO_PARITY 0
|
||||
#define USB_CDC_ODD_PARITY 1
|
||||
#define USB_CDC_EVEN_PARITY 2
|
||||
#define USB_CDC_MARK_PARITY 3
|
||||
#define USB_CDC_SPACE_PARITY 4
|
||||
uint8_t bDataBits;
|
||||
} __attribute__ ((packed)) usb_LineCoding;
|
||||
|
||||
extern volatile uint8_t CDCready[bTotNumEndpoints];
|
||||
|
||||
void break_handler(uint8_t ifno);
|
||||
void clstate_handler(uint8_t ifno, uint16_t val);
|
||||
void linecoding_handler(uint8_t ifno, usb_LineCoding *lc);
|
||||
|
||||
|
||||
// sizes of ringbuffers for outgoing and incoming data
|
||||
#define RBOUTSZ (256)
|
||||
#define RBINSZ (256)
|
||||
|
||||
#define newline(ifno) USB_putbyte(ifno, '\n')
|
||||
#define USND(ifno, s) do{USB_sendstr(ifno, s); USB_putbyte(ifno, '\n');}while(0)
|
||||
#define CMDWR(s) USB_sendstr(I_CMD, s)
|
||||
#define CMDWRn(s) do{USB_sendstr(I_CMD, s); USB_putbyte(I_CMD, '\n');}while(0)
|
||||
#define CMDn() USB_putbyte(I_CMD, '\n')
|
||||
|
||||
#ifdef EBUG
|
||||
#define STR_HELPER(s) #s
|
||||
#define STR(s) STR_HELPER(s)
|
||||
#define DBG(str) do{USB_sendstr(I_CMD, __FILE__ " (L" STR(__LINE__) "): " str); USB_putbyte(I_CMD, '\n');}while(0)
|
||||
#define DBGs(str) do{USB_sendstr(I_CMD, str); USB_sendstr(I_CMD, "<--\n");}while(0)
|
||||
#else
|
||||
#define DBG(s)
|
||||
#define DBGs(s)
|
||||
#endif
|
||||
|
||||
int USB_sendall(uint8_t ifno);
|
||||
int USB_send(uint8_t ifno, const uint8_t *buf, int len);
|
||||
int USB_putbyte(uint8_t ifno, uint8_t byte);
|
||||
int USB_sendstr(uint8_t ifno, const char *string);
|
||||
int USB_receive(uint8_t ifno, uint8_t *buf, int len);
|
||||
int USB_receivestr(uint8_t ifno, char *buf, int len);
|
||||
413
F1:F103/BISS_C_encoders/usb_lib.c
Normal file
413
F1:F103/BISS_C_encoders/usb_lib.c
Normal file
@ -0,0 +1,413 @@
|
||||
/*
|
||||
* Copyright 2024 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include <stdint.h>
|
||||
|
||||
#include "usb_lib.h"
|
||||
#include "usb_descr.h"
|
||||
#include "usb_dev.h"
|
||||
|
||||
#undef DBG
|
||||
#define DBG(x)
|
||||
#undef DBGs
|
||||
#define DBGs(x)
|
||||
|
||||
static ep_t endpoints[STM32ENDPOINTS];
|
||||
|
||||
static uint16_t USB_Addr = 0;
|
||||
static uint8_t setupdatabuf[EP0DATABUF_SIZE];
|
||||
static config_pack_t *setup_packet = (config_pack_t*) setupdatabuf;
|
||||
volatile uint8_t usbON = 0; // device is configured and active
|
||||
|
||||
static uint16_t configuration = 0; // reply for GET_CONFIGURATION (==1 if configured)
|
||||
static inline void std_d2h_req(){
|
||||
uint16_t st = 0;
|
||||
switch(setup_packet->bRequest){
|
||||
case GET_DESCRIPTOR:
|
||||
DBG("GET_DESCRIPTOR");
|
||||
get_descriptor(setup_packet);
|
||||
break;
|
||||
case GET_STATUS:
|
||||
DBG("GET_STATUS");
|
||||
EP_WriteIRQ(0, (uint8_t *)&st, 2); // send status: Bus Powered
|
||||
break;
|
||||
case GET_CONFIGURATION:
|
||||
DBG("GET_CONFIGURATION");
|
||||
EP_WriteIRQ(0, (uint8_t*)&configuration, 1);
|
||||
break;
|
||||
default:
|
||||
DBG("Wrong");
|
||||
DBGs(uhex2str(setup_packet->bRequest));
|
||||
EP_WriteIRQ(0, NULL, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static inline void std_h2d_req(){
|
||||
switch(setup_packet->bRequest){
|
||||
case SET_ADDRESS:
|
||||
DBG("SET_ADDRESS");
|
||||
// new address will be assigned later - after acknowlegement or request to host
|
||||
USB_Addr = setup_packet->wValue;
|
||||
DBGs(uhex2str(USB_Addr));
|
||||
break;
|
||||
case SET_CONFIGURATION:
|
||||
DBG("SET_CONFIGURATION");
|
||||
// Now device configured
|
||||
configuration = setup_packet->wValue;
|
||||
set_configuration();
|
||||
usbON = 1;
|
||||
break;
|
||||
default:
|
||||
DBG("Wrong");
|
||||
DBGs(uhex2str(setup_packet->bRequest));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void WEAK usb_standard_request(){
|
||||
uint8_t recipient = REQUEST_RECIPIENT(setup_packet->bmRequestType);
|
||||
uint8_t dev2host = (setup_packet->bmRequestType & 0x80) ? 1 : 0;
|
||||
switch(recipient){
|
||||
case REQ_RECIPIENT_DEVICE:
|
||||
DBG("REQ_RECIPIENT_DEVICE");
|
||||
if(dev2host){
|
||||
std_d2h_req();
|
||||
}else{
|
||||
std_h2d_req();
|
||||
}
|
||||
break;
|
||||
case REQ_RECIPIENT_INTERFACE:
|
||||
DBG("REQ_RECIPIENT_INTERFACE");
|
||||
if(dev2host && setup_packet->bRequest == GET_DESCRIPTOR){
|
||||
get_descriptor(setup_packet);
|
||||
}
|
||||
break;
|
||||
case REQ_RECIPIENT_ENDPOINT:
|
||||
DBG("REQ_RECIPIENT_ENDPOINT");
|
||||
if(setup_packet->bRequest == CLEAR_FEATURE){
|
||||
}else{
|
||||
DBG("Wrong");
|
||||
}
|
||||
break;
|
||||
default:
|
||||
DBG("Wrong");
|
||||
DBGs(uhex2str(recipient));
|
||||
break;
|
||||
}
|
||||
if(!dev2host) EP_WriteIRQ(0, NULL, 0);
|
||||
}
|
||||
|
||||
void WEAK usb_class_request(config_pack_t *req, uint8_t _U_ *data, uint16_t _U_ datalen){
|
||||
DBG("REQ_TYPE_CLASS");
|
||||
switch(req->bRequest){
|
||||
case GET_INTERFACE:
|
||||
DBG("GI");
|
||||
break;
|
||||
case SET_CONFIGURATION: // set featuring by req->wValue
|
||||
DBG("SC");
|
||||
break;
|
||||
default:
|
||||
DBG("Wrong");
|
||||
DBGs(uhex2str(req->bmRequestType));
|
||||
DBGs(uhex2str(req->bRequest));
|
||||
DBGs(uhex2str(req->wIndex));
|
||||
DBGs(uhex2str(req->wLength));
|
||||
DBGs(uhex2str(req->wValue));
|
||||
}
|
||||
if(0 == (setup_packet->bmRequestType & 0x80)) // host2dev
|
||||
EP_WriteIRQ(0, NULL, 0);
|
||||
}
|
||||
|
||||
void WEAK usb_vendor_request(config_pack_t _U_ *packet, uint8_t _U_ *data, uint16_t _U_ datalen){
|
||||
DBG("vendor");
|
||||
if(0 == (setup_packet->bmRequestType & 0x80)) // host2dev
|
||||
EP_WriteIRQ(0, NULL, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
bmRequestType: 76543210
|
||||
7 direction: 0 - host->device, 1 - device->host
|
||||
65 type: 0 - standard, 1 - class, 2 - vendor
|
||||
4..0 getter: 0 - device, 1 - interface, 2 - endpoint, 3 - other
|
||||
*/
|
||||
/**
|
||||
* Endpoint0 (control) handler
|
||||
*/
|
||||
static void EP0_Handler(){
|
||||
uint8_t ep0dbuflen = 0;
|
||||
uint8_t ep0databuf[EP0DATABUF_SIZE];
|
||||
uint16_t epstatus = KEEP_DTOG(USB->EPnR[0]); // EP0R on input -> return this value after modifications
|
||||
int rxflag = RX_FLAG(epstatus);
|
||||
if(rxflag){ DBG("EP0_Handler"); }
|
||||
// check direction
|
||||
if(USB->ISTR & USB_ISTR_DIR){ // OUT interrupt - receive data, CTR_RX==1 (if CTR_TX == 1 - two pending transactions: receive following by transmit)
|
||||
if(epstatus & USB_EPnR_SETUP){ // setup packet -> copy data to conf_pack
|
||||
DBG("USB_EPnR_SETUP");
|
||||
EP_Read(0, setupdatabuf);
|
||||
// interrupt handler will be called later
|
||||
}else if(epstatus & USB_EPnR_CTR_RX){ // data packet -> push received data to ep0databuf
|
||||
if(endpoints[0].rx_cnt){ DBG("data"); DBGs(uhex2str(endpoints[0].rx_cnt));}
|
||||
ep0dbuflen = EP_Read(0, ep0databuf);
|
||||
}
|
||||
}
|
||||
if(rxflag){
|
||||
uint8_t reqtype = REQUEST_TYPE(setup_packet->bmRequestType);
|
||||
switch(reqtype){
|
||||
case REQ_TYPE_STANDARD:
|
||||
if(SETUP_FLAG(epstatus)){
|
||||
DBG("REQ_TYPE_STANDARD");
|
||||
usb_standard_request();
|
||||
}else{
|
||||
DBG("REQ_TYPE_STANDARD without SETUP_FLAG");
|
||||
}
|
||||
break;
|
||||
case REQ_TYPE_CLASS:
|
||||
DBG("REQ_TYPE_CLASS");
|
||||
usb_class_request(setup_packet, ep0databuf, ep0dbuflen);
|
||||
break;
|
||||
case REQ_TYPE_VENDOR:
|
||||
DBG("REQ_TYPE_VENDOR");
|
||||
usb_vendor_request(setup_packet, ep0databuf, ep0dbuflen);
|
||||
break;
|
||||
default:
|
||||
DBG("Wrong");
|
||||
DBGs(uhex2str(reqtype));
|
||||
EP_WriteIRQ(0, NULL, 0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(TX_FLAG(epstatus)){
|
||||
// now we can change address after enumeration
|
||||
if ((USB->DADDR & USB_DADDR_ADD) != USB_Addr){
|
||||
USB->DADDR = USB_DADDR_EF | USB_Addr;
|
||||
usbON = 0;
|
||||
DBG("Enum");
|
||||
DBGs(uhex2str(USB_Addr));
|
||||
}
|
||||
}
|
||||
//epstatus = KEEP_DTOG(USB->EPnR[0]);
|
||||
if(rxflag) epstatus ^= USB_EPnR_STAT_TX; // start ZLP or data transmission
|
||||
else epstatus &= ~USB_EPnR_STAT_TX; // or leave unchanged
|
||||
// keep DTOGs, clear CTR_RX,TX, set RX VALID
|
||||
USB->EPnR[0] = (epstatus & ~(USB_EPnR_CTR_RX|USB_EPnR_CTR_TX)) ^ USB_EPnR_STAT_RX;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write data to EP buffer (called from IRQ handler)
|
||||
* @param number - EP number
|
||||
* @param *buf - array with data
|
||||
* @param size - its size
|
||||
*/
|
||||
void EP_WriteIRQ(uint8_t number, const uint8_t *buf, uint16_t size){
|
||||
if(size > endpoints[number].txbufsz) size = endpoints[number].txbufsz;
|
||||
uint16_t N2 = (size + 1) >> 1;
|
||||
// the buffer is 16-bit, so we should copy data as it would be uint16_t
|
||||
uint16_t *buf16 = (uint16_t *)buf;
|
||||
#if defined USB1_16
|
||||
// very bad: what if `size` is odd?
|
||||
uint32_t *out = (uint32_t *)endpoints[number].tx_buf;
|
||||
for(int i = 0; i < N2; ++i, ++out){
|
||||
*out = buf16[i];
|
||||
}
|
||||
#elif defined USB2_16
|
||||
// use memcpy instead?
|
||||
for(int i = 0; i < N2; i++){
|
||||
endpoints[number].tx_buf[i] = buf16[i];
|
||||
}
|
||||
#else
|
||||
#error "Define USB1_16 or USB2_16"
|
||||
#endif
|
||||
USB_BTABLE->EP[number].USB_COUNT_TX = size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write data to EP buffer (called outside IRQ handler)
|
||||
* @param number - EP number
|
||||
* @param *buf - array with data
|
||||
* @param size - its size
|
||||
*/
|
||||
void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size){
|
||||
EP_WriteIRQ(number, buf, size);
|
||||
uint16_t epstatus = KEEP_DTOG(USB->EPnR[number]);
|
||||
// keep DTOGs and RX stat, clear CTR_TX & set TX VALID to start transmission
|
||||
USB->EPnR[number] = (epstatus & ~(USB_EPnR_CTR_TX | USB_EPnR_STAT_RX)) ^ USB_EPnR_STAT_TX;
|
||||
}
|
||||
|
||||
/*
|
||||
* Copy data from EP buffer into user buffer area
|
||||
* @param *buf - user array for data
|
||||
* @return amount of data read
|
||||
*/
|
||||
int EP_Read(uint8_t number, uint8_t *buf){
|
||||
int sz = endpoints[number].rx_cnt;
|
||||
if(!sz) return 0;
|
||||
endpoints[number].rx_cnt = 0;
|
||||
#if defined USB1_16
|
||||
int n = (sz + 1) >> 1;
|
||||
uint32_t *in = (uint32_t*)endpoints[number].rx_buf;
|
||||
uint16_t *out = (uint16_t*)buf;
|
||||
for(int i = 0; i < n; ++i, ++in)
|
||||
out[i] = *(uint16_t*)in;
|
||||
#elif defined USB2_16
|
||||
// use memcpy instead?
|
||||
for(int i = 0; i < sz; ++i)
|
||||
buf[i] = endpoints[number].rx_buf[i];
|
||||
#else
|
||||
#error "Define USB1_16 or USB2_16"
|
||||
#endif
|
||||
return sz;
|
||||
}
|
||||
|
||||
|
||||
static uint16_t lastaddr = LASTADDR_DEFAULT;
|
||||
/**
|
||||
* Endpoint initialisation
|
||||
* @param number - EP num (0...7)
|
||||
* @param type - EP type (EP_TYPE_BULK, EP_TYPE_CONTROL, EP_TYPE_ISO, EP_TYPE_INTERRUPT)
|
||||
* @param txsz - transmission buffer size @ USB/CAN buffer
|
||||
* @param rxsz - reception buffer size @ USB/CAN buffer
|
||||
* @param uint16_t (*func)(ep_t *ep) - EP handler function
|
||||
* @return 0 if all OK
|
||||
*/
|
||||
int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, void (*func)(ep_t ep)){
|
||||
if(number >= STM32ENDPOINTS) return 4; // out of configured amount
|
||||
if(txsz > USB_BTABLE_SIZE/ACCESSZ || rxsz > USB_BTABLE_SIZE/ACCESSZ) return 1; // buffer too large
|
||||
if(lastaddr + txsz + rxsz >= USB_BTABLE_SIZE/ACCESSZ) return 2; // out of btable
|
||||
USB->EPnR[number] = (type << 9) | (number & USB_EPnR_EA);
|
||||
USB->EPnR[number] ^= USB_EPnR_STAT_RX | USB_EPnR_STAT_TX_1;
|
||||
if(rxsz & 1) return 3; // wrong rx buffer size
|
||||
uint16_t countrx = 0;
|
||||
if(rxsz < 64) countrx = rxsz / 2;
|
||||
else{
|
||||
if(rxsz & 0x1f) return 3; // should be multiple of 32
|
||||
countrx = 31 + rxsz / 32;
|
||||
}
|
||||
USB_BTABLE->EP[number].USB_ADDR_TX = lastaddr;
|
||||
endpoints[number].tx_buf = (uint16_t *)(USB_BTABLE_BASE + lastaddr * ACCESSZ);
|
||||
endpoints[number].txbufsz = txsz;
|
||||
lastaddr += txsz;
|
||||
USB_BTABLE->EP[number].USB_COUNT_TX = 0;
|
||||
USB_BTABLE->EP[number].USB_ADDR_RX = lastaddr;
|
||||
endpoints[number].rx_buf = (uint8_t *)(USB_BTABLE_BASE + lastaddr * ACCESSZ);
|
||||
lastaddr += rxsz;
|
||||
USB_BTABLE->EP[number].USB_COUNT_RX = countrx << 10;
|
||||
endpoints[number].func = func;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// standard IRQ handler
|
||||
void USB_IRQ(){
|
||||
uint32_t CNTR = USB->CNTR;
|
||||
USB->CNTR = 0;
|
||||
if(USB->ISTR & USB_ISTR_RESET){
|
||||
DBG("USB_ISTR_RESET");
|
||||
usbON = 0;
|
||||
// Reinit registers
|
||||
CNTR = USB_CNTR_RESETM | USB_CNTR_CTRM | USB_CNTR_SUSPM;
|
||||
// Endpoint 0 - CONTROL
|
||||
// ON USB LS size of EP0 may be 8 bytes, but on FS it should be 64 bytes!
|
||||
lastaddr = LASTADDR_DEFAULT;
|
||||
// clear address, leave only enable bit
|
||||
USB->DADDR = USB_DADDR_EF;
|
||||
USB->ISTR = ~USB_ISTR_RESET;
|
||||
if(EP_Init(0, EP_TYPE_CONTROL, USB_EP0BUFSZ, USB_EP0BUFSZ, EP0_Handler)){
|
||||
DBG("Can't init EP0");
|
||||
return;
|
||||
};
|
||||
}
|
||||
if(USB->ISTR & USB_ISTR_CTR){
|
||||
// EP number
|
||||
uint8_t n = USB->ISTR & USB_ISTR_EPID;
|
||||
// copy received bytes amount
|
||||
endpoints[n].rx_cnt = USB_BTABLE->EP[n].USB_COUNT_RX & 0x3FF; // low 10 bits is counter
|
||||
// call EP handler
|
||||
if(endpoints[n].func) endpoints[n].func();
|
||||
}
|
||||
if(USB->ISTR & USB_ISTR_WKUP){ // wakeup
|
||||
DBG("USB_ISTR_WKUP");
|
||||
#ifndef STM32F0
|
||||
CNTR &= ~(USB_CNTR_FSUSP | USB_CNTR_LP_MODE | USB_CNTR_WKUPM); // clear suspend flags
|
||||
#else
|
||||
CNTR &= ~(USB_CNTR_FSUSP | USB_CNTR_LPMODE | USB_CNTR_WKUPM);
|
||||
#endif
|
||||
USB->ISTR = ~USB_ISTR_WKUP;
|
||||
}
|
||||
if(USB->ISTR & USB_ISTR_SUSP){ // suspend -> still no connection, may sleep
|
||||
DBG("USB_ISTR_SUSP");
|
||||
usbON = 0;
|
||||
#ifndef STM32F0
|
||||
CNTR |= USB_CNTR_FSUSP | USB_CNTR_LP_MODE | USB_CNTR_WKUPM;
|
||||
#else
|
||||
CNTR |= USB_CNTR_FSUSP | USB_CNTR_LPMODE | USB_CNTR_WKUPM;
|
||||
#endif
|
||||
CNTR &= ~(USB_CNTR_SUSPM);
|
||||
USB->ISTR = ~USB_ISTR_SUSP;
|
||||
}
|
||||
USB->CNTR = CNTR; // rewoke interrupts
|
||||
}
|
||||
|
||||
// here we suppose that all PIN settings done in hw_setup earlier
|
||||
void USB_setup(){
|
||||
#if defined STM32F3
|
||||
NVIC_DisableIRQ(USB_LP_IRQn);
|
||||
// remap USB LP & Wakeup interrupts to 75 and 76 - works only on pure F303
|
||||
RCC->APB2ENR |= RCC_APB2ENR_SYSCFGEN; // enable tacting of SYSCFG
|
||||
SYSCFG->CFGR1 |= SYSCFG_CFGR1_USB_IT_RMP;
|
||||
#elif defined STM32F1
|
||||
NVIC_DisableIRQ(USB_LP_CAN1_RX0_IRQn);
|
||||
NVIC_DisableIRQ(USB_HP_CAN1_TX_IRQn);
|
||||
#elif defined STM32F0
|
||||
NVIC_DisableIRQ(USB_IRQn);
|
||||
RCC->APB1ENR |= RCC_APB1ENR_CRSEN;
|
||||
RCC->CFGR3 &= ~RCC_CFGR3_USBSW; // reset USB
|
||||
RCC->CR2 |= RCC_CR2_HSI48ON; // turn ON HSI48
|
||||
uint32_t tmout = 16000000;
|
||||
while(!(RCC->CR2 & RCC_CR2_HSI48RDY)){if(--tmout == 0) break;}
|
||||
FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY;
|
||||
CRS->CFGR &= ~CRS_CFGR_SYNCSRC;
|
||||
CRS->CFGR |= CRS_CFGR_SYNCSRC_1; // USB SOF selected as sync source
|
||||
CRS->CR |= CRS_CR_AUTOTRIMEN; // enable auto trim
|
||||
CRS->CR |= CRS_CR_CEN; // enable freq counter & block CRS->CFGR as read-only
|
||||
RCC->CFGR |= RCC_CFGR_SW;
|
||||
#endif
|
||||
RCC->APB1ENR |= RCC_APB1ENR_USBEN;
|
||||
//??
|
||||
USB->CNTR = USB_CNTR_FRES; // Force USB Reset
|
||||
for(uint32_t ctr = 0; ctr < 72000; ++ctr) nop(); // wait >1ms
|
||||
USB->CNTR = 0;
|
||||
USB->BTABLE = 0;
|
||||
USB->DADDR = 0;
|
||||
USB->ISTR = 0;
|
||||
USB->CNTR = USB_CNTR_RESETM; // allow only reset interrupts
|
||||
#if defined STM32F3
|
||||
NVIC_EnableIRQ(USB_LP_IRQn);
|
||||
#elif defined STM32F1
|
||||
NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
|
||||
#elif defined STM32F0
|
||||
USB->BCDR |= USB_BCDR_DPPU;
|
||||
NVIC_EnableIRQ(USB_IRQn);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
#if defined STM32F3
|
||||
void usb_lp_isr() __attribute__ ((alias ("USB_IRQ")));
|
||||
#elif defined STM32F1
|
||||
void usb_lp_can_rx0_isr() __attribute__ ((alias ("USB_IRQ")));
|
||||
#elif defined STM32F0
|
||||
void usb_isr() __attribute__ ((alias ("USB_IRQ")));
|
||||
#endif
|
||||
324
F1:F103/BISS_C_encoders/usb_lib.h
Normal file
324
F1:F103/BISS_C_encoders/usb_lib.h
Normal file
@ -0,0 +1,324 @@
|
||||
/*
|
||||
* Copyright 2024 Edward V. Emelianov <edward.emelianoff@gmail.com>.
|
||||
*
|
||||
* 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 3 of the License, 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. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <wchar.h>
|
||||
|
||||
/******************************************************************
|
||||
* Hardware registers etc *
|
||||
*****************************************************************/
|
||||
#if defined STM32F0
|
||||
#include <stm32f0.h>
|
||||
#elif defined STM32F1
|
||||
#include <stm32f1.h>
|
||||
// there's no this define in standard header
|
||||
#define USB_BASE ((uint32_t)0x40005C00)
|
||||
#elif defined STM32F3
|
||||
#include <stm32f3.h>
|
||||
#endif
|
||||
|
||||
// max endpoints number
|
||||
#define STM32ENDPOINTS 8
|
||||
/**
|
||||
* Buffers size definition
|
||||
**/
|
||||
|
||||
// F0 - USB2_16; F1 - USB1_16; F3 - 1/2 depending on series
|
||||
#if !defined USB1_16 && !defined USB2_16
|
||||
#if defined STM32F0
|
||||
#define USB2_16
|
||||
#elif defined STM32F1
|
||||
#define USB1_16
|
||||
#else
|
||||
#error "Can't determine USB1_16 or USB2_16, define by hands"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// BTABLE_SIZE FOR STM32F3:
|
||||
// In STM32F303/302xB/C, 512 bytes SRAM is not shared with CAN.
|
||||
// In STM32F302x6/x8 and STM32F30xxD/E, 726 bytes dedicated SRAM and 256 bytes shared SRAM with CAN i.e.
|
||||
// 1Kbytes dedicated SRAM in case CAN is disabled.
|
||||
// remember, that USB_BTABLE_SIZE will be divided by ACCESSZ, so don't divide it twice for 32-bit addressing
|
||||
|
||||
#ifdef NOCAN
|
||||
#if defined STM32F0
|
||||
#define USB_BTABLE_SIZE 1024
|
||||
#elif defined STM32F3
|
||||
#define USB_BTABLE_SIZE 512
|
||||
#warning "Please, check real buffer size due to docs"
|
||||
#else
|
||||
#error "define STM32F0 or STM32F3"
|
||||
#endif
|
||||
#else // !NOCAN: F0/F3 with CAN or F1 (can't simultaneously run CAN and USB)
|
||||
#if defined STM32F0
|
||||
#define USB_BTABLE_SIZE 768
|
||||
#elif defined STM32F3
|
||||
#define USB_BTABLE_SIZE 512
|
||||
#warning "Please, check real buffer size due to docs"
|
||||
#else // STM32F103: 1024 bytes but with 32-bit addressing
|
||||
#define USB_BTABLE_SIZE 1024
|
||||
#endif
|
||||
#endif // NOCAN
|
||||
|
||||
// first 64 bytes of USB_BTABLE are registers!
|
||||
|
||||
#define USB_BTABLE_BASE 0x40006000
|
||||
#define USB ((USB_TypeDef *) USB_BASE)
|
||||
|
||||
#ifdef USB_BTABLE
|
||||
#undef USB_BTABLE
|
||||
#endif
|
||||
#define USB_BTABLE ((USB_BtableDef *)(USB_BTABLE_BASE))
|
||||
#define USB_ISTR_EPID 0x0000000F
|
||||
#define USB_FNR_LSOF_0 0x00000800
|
||||
#define USB_FNR_lSOF_1 0x00001000
|
||||
#define USB_LPMCSR_BESL_0 0x00000010
|
||||
#define USB_LPMCSR_BESL_1 0x00000020
|
||||
#define USB_LPMCSR_BESL_2 0x00000040
|
||||
#define USB_LPMCSR_BESL_3 0x00000080
|
||||
#define USB_EPnR_CTR_RX 0x00008000
|
||||
#define USB_EPnR_DTOG_RX 0x00004000
|
||||
#define USB_EPnR_STAT_RX 0x00003000
|
||||
#define USB_EPnR_STAT_RX_0 0x00001000
|
||||
#define USB_EPnR_STAT_RX_1 0x00002000
|
||||
#define USB_EPnR_SETUP 0x00000800
|
||||
#define USB_EPnR_EP_TYPE 0x00000600
|
||||
#define USB_EPnR_EP_TYPE_0 0x00000200
|
||||
#define USB_EPnR_EP_TYPE_1 0x00000400
|
||||
#define USB_EPnR_EP_KIND 0x00000100
|
||||
#define USB_EPnR_CTR_TX 0x00000080
|
||||
#define USB_EPnR_DTOG_TX 0x00000040
|
||||
#define USB_EPnR_STAT_TX 0x00000030
|
||||
#define USB_EPnR_STAT_TX_0 0x00000010
|
||||
#define USB_EPnR_STAT_TX_1 0x00000020
|
||||
#define USB_EPnR_EA 0x0000000F
|
||||
#define USB_COUNTn_RX_BLSIZE 0x00008000
|
||||
#define USB_COUNTn_NUM_BLOCK 0x00007C00
|
||||
#define USB_COUNTn_RX 0x0000003F
|
||||
|
||||
#define USB_TypeDef USB_TypeDef_custom
|
||||
|
||||
typedef struct {
|
||||
__IO uint32_t EPnR[STM32ENDPOINTS];
|
||||
__IO uint32_t RESERVED[STM32ENDPOINTS];
|
||||
__IO uint32_t CNTR;
|
||||
__IO uint32_t ISTR;
|
||||
__IO uint32_t FNR;
|
||||
__IO uint32_t DADDR;
|
||||
__IO uint32_t BTABLE;
|
||||
#ifdef STM32F0
|
||||
__IO uint32_t LPMCSR;
|
||||
__IO uint32_t BCDR;
|
||||
#endif
|
||||
} USB_TypeDef;
|
||||
|
||||
// F303 D/E have 2x16 access scheme
|
||||
typedef struct{
|
||||
#if defined USB2_16
|
||||
__IO uint16_t USB_ADDR_TX;
|
||||
__IO uint16_t USB_COUNT_TX;
|
||||
__IO uint16_t USB_ADDR_RX;
|
||||
__IO uint16_t USB_COUNT_RX;
|
||||
#define ACCESSZ (1)
|
||||
#define BUFTYPE uint8_t
|
||||
#elif defined USB1_16
|
||||
__IO uint32_t USB_ADDR_TX;
|
||||
__IO uint32_t USB_COUNT_TX;
|
||||
__IO uint32_t USB_ADDR_RX;
|
||||
__IO uint32_t USB_COUNT_RX;
|
||||
#define ACCESSZ (2)
|
||||
#define BUFTYPE uint16_t
|
||||
#else
|
||||
#error "Define USB1_16 or USB2_16"
|
||||
#endif
|
||||
} USB_EPDATA_TypeDef;
|
||||
|
||||
|
||||
typedef struct{
|
||||
__IO USB_EPDATA_TypeDef EP[STM32ENDPOINTS];
|
||||
} USB_BtableDef;
|
||||
|
||||
#define EP0DATABUF_SIZE (64)
|
||||
#define LASTADDR_DEFAULT (STM32ENDPOINTS * 8)
|
||||
|
||||
/******************************************************************
|
||||
* Defines from usb.h *
|
||||
*****************************************************************/
|
||||
|
||||
/*
|
||||
* Device and/or Interface Class codes
|
||||
*/
|
||||
#define USB_CLASS_PER_INTERFACE 0
|
||||
#define USB_CLASS_AUDIO 1
|
||||
#define USB_CLASS_COMM 2
|
||||
#define USB_CLASS_HID 3
|
||||
#define USB_CLASS_PRINTER 7
|
||||
#define USB_CLASS_PTP 6
|
||||
#define USB_CLASS_MASS_STORAGE 8
|
||||
#define USB_CLASS_HUB 9
|
||||
#define USB_CLASS_DATA 10
|
||||
#define USB_CLASS_MISC 0xef
|
||||
#define USB_CLASS_VENDOR_SPEC 0xff
|
||||
|
||||
/*
|
||||
* Descriptor types
|
||||
*/
|
||||
#define USB_DT_DEVICE 0x01
|
||||
#define USB_DT_CONFIG 0x02
|
||||
#define USB_DT_STRING 0x03
|
||||
#define USB_DT_INTERFACE 0x04
|
||||
#define USB_DT_ENDPOINT 0x05
|
||||
#define USB_DT_QUALIFIER 0x06
|
||||
#define USB_DT_IAD 0x0B
|
||||
|
||||
#define USB_DT_HID 0x21
|
||||
#define USB_DT_REPORT 0x22
|
||||
#define USB_DT_PHYSICAL 0x23
|
||||
#define USB_DT_CS_INTERFACE 0x24
|
||||
#define USB_DT_HUB 0x29
|
||||
|
||||
/*
|
||||
* Descriptor sizes per descriptor type
|
||||
*/
|
||||
#define USB_DT_DEVICE_SIZE 18
|
||||
#define USB_DT_CONFIG_SIZE 9
|
||||
#define USB_DT_INTERFACE_SIZE 9
|
||||
#define USB_DT_HID_SIZE 9
|
||||
#define USB_DT_ENDPOINT_SIZE 7
|
||||
#define USB_DT_QUALIFIER_SIZE 10
|
||||
#define USB_DT_CS_INTERFACE_SIZE 5
|
||||
#define USB_DT_IAD_SIZE 8
|
||||
|
||||
|
||||
// bmRequestType & 0x80 == dev2host (1) or host2dev (0)
|
||||
// recipient: bmRequestType & 0x1f
|
||||
#define REQUEST_RECIPIENT(b) (b & 0x1f)
|
||||
#define REQ_RECIPIENT_DEVICE 0
|
||||
#define REQ_RECIPIENT_INTERFACE 1
|
||||
#define REQ_RECIPIENT_ENDPOINT 2
|
||||
#define REQ_RECIPIENT_OTHER 3
|
||||
// type: [bmRequestType & 0x60 >> 5]
|
||||
#define REQUEST_TYPE(b) ((b&0x60)>>5)
|
||||
#define REQ_TYPE_STANDARD 0
|
||||
#define REQ_TYPE_CLASS 1
|
||||
#define REQ_TYPE_VENDOR 2
|
||||
#define REQ_TYPE_RESERVED 3
|
||||
|
||||
|
||||
//#define VENDOR_REQUEST 0x01
|
||||
|
||||
// standard device requests
|
||||
#define GET_STATUS 0x00
|
||||
#define CLEAR_FEATURE 0x01
|
||||
#define SET_FEATURE 0x03
|
||||
#define SET_ADDRESS 0x05
|
||||
#define GET_DESCRIPTOR 0x06
|
||||
#define SET_DESCRIPTOR 0x07
|
||||
#define GET_CONFIGURATION 0x08
|
||||
#define SET_CONFIGURATION 0x09
|
||||
// and some standard interface requests
|
||||
#define GET_INTERFACE 0x0A
|
||||
#define SET_INTERFACE 0x0B
|
||||
// and some standard endpoint requests
|
||||
#define SYNC_FRAME 0x0C
|
||||
|
||||
// Types of descriptors
|
||||
#define DEVICE_DESCRIPTOR 0x01
|
||||
#define CONFIGURATION_DESCRIPTOR 0x02
|
||||
#define STRING_DESCRIPTOR 0x03
|
||||
#define DEVICE_QUALIFIER_DESCRIPTOR 0x06
|
||||
#define DEBUG_DESCRIPTOR 0x0a
|
||||
#define HID_REPORT_DESCRIPTOR 0x22
|
||||
|
||||
// EP types for EP_init
|
||||
#define EP_TYPE_BULK 0x00
|
||||
#define EP_TYPE_CONTROL 0x01
|
||||
#define EP_TYPE_ISO 0x02
|
||||
#define EP_TYPE_INTERRUPT 0x03
|
||||
|
||||
// EP types for descriptors
|
||||
#define USB_BM_ATTR_CONTROL 0x00
|
||||
#define USB_BM_ATTR_ISO 0x01
|
||||
#define USB_BM_ATTR_BULK 0x02
|
||||
#define USB_BM_ATTR_INTERRUPT 0x03
|
||||
|
||||
|
||||
/******************************************************************
|
||||
* Other stuff *
|
||||
*****************************************************************/
|
||||
|
||||
#define RX_FLAG(epstat) (epstat & USB_EPnR_CTR_RX)
|
||||
#define TX_FLAG(epstat) (epstat & USB_EPnR_CTR_TX)
|
||||
#define SETUP_FLAG(epstat) (epstat & USB_EPnR_SETUP)
|
||||
|
||||
// EPnR bits manipulation
|
||||
#define KEEP_DTOG_STAT(EPnR) (EPnR & ~(USB_EPnR_STAT_RX|USB_EPnR_STAT_TX|USB_EPnR_DTOG_RX|USB_EPnR_DTOG_TX))
|
||||
#define KEEP_DTOG(EPnR) (EPnR & ~(USB_EPnR_DTOG_RX|USB_EPnR_DTOG_TX))
|
||||
|
||||
#define LANG_US (uint16_t)0x0409
|
||||
|
||||
#define _USB_STRING_(name, str) \
|
||||
static const struct name \
|
||||
{ \
|
||||
uint8_t bLength; \
|
||||
uint8_t bDescriptorType; \
|
||||
uint16_t bString[(sizeof(str) - 2) / 2]; \
|
||||
\
|
||||
} \
|
||||
name = {sizeof(name), 0x03, str}
|
||||
|
||||
#define _USB_LANG_ID_(name, lng_id) \
|
||||
static const struct name \
|
||||
{ \
|
||||
uint8_t bLength; \
|
||||
uint8_t bDescriptorType; \
|
||||
uint16_t bString; \
|
||||
\
|
||||
} \
|
||||
name = {0x04, 0x03, lng_id}
|
||||
|
||||
// EP0 configuration packet
|
||||
typedef struct {
|
||||
uint8_t bmRequestType;
|
||||
uint8_t bRequest;
|
||||
uint16_t wValue;
|
||||
uint16_t wIndex;
|
||||
uint16_t wLength;
|
||||
} config_pack_t;
|
||||
|
||||
// endpoints state
|
||||
typedef struct{
|
||||
uint16_t *tx_buf; // transmission buffer address
|
||||
uint16_t txbufsz; // transmission buffer size
|
||||
uint8_t *rx_buf; // reception buffer address
|
||||
void (*func)(); // endpoint action function
|
||||
unsigned rx_cnt : 10; // received data counter
|
||||
} ep_t;
|
||||
|
||||
extern volatile uint8_t usbON;
|
||||
|
||||
void USB_setup();
|
||||
int EP_Init(uint8_t number, uint8_t type, uint16_t txsz, uint16_t rxsz, void (*func)());
|
||||
void EP_WriteIRQ(uint8_t number, const uint8_t *buf, uint16_t size);
|
||||
void EP_Write(uint8_t number, const uint8_t *buf, uint16_t size);
|
||||
int EP_Read(uint8_t number, uint8_t *buf);
|
||||
|
||||
// could be [re]defined in usb_dev.c
|
||||
extern void usb_class_request(config_pack_t *packet, uint8_t *data, uint16_t datalen);
|
||||
extern void usb_vendor_request(config_pack_t *packet, uint8_t *data, uint16_t datalen);
|
||||
extern void set_configuration();
|
||||
2
F1:F103/BISS_C_encoders/version.inc
Normal file
2
F1:F103/BISS_C_encoders/version.inc
Normal file
@ -0,0 +1,2 @@
|
||||
#define BUILD_NUMBER "19"
|
||||
#define BUILD_DATE "2025-03-25"
|
||||
@ -6,3 +6,10 @@
|
||||
- 2 or 1 RS-232
|
||||
- 1 SSI or 1 RS-422 (in this case 1 RS-232)
|
||||
|
||||
Inner USB interfaces (IFx):
|
||||
1..3 - RS-485 (1..3)
|
||||
4 - RS-232 (1)
|
||||
5 - RS-232 (2) or RS-485
|
||||
6 - CAN
|
||||
7 - SSI (over SPI) or configuration interface (if "Config mode" jumper shortened)
|
||||
|
||||
|
||||
@ -1,38 +1,39 @@
|
||||
"Reference","Value","Datasheet","Footprint","Qty","DNP"
|
||||
"C1,C2,C4,C6,C7,C9,C10,C11,C12,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,C30,C31","0.1","~","Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder","23",""
|
||||
"C3","22u","~","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","1",""
|
||||
"C5,C8","12","~","Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder","2",""
|
||||
"C13,C14,C32,C33","1u","~","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","4",""
|
||||
"C27,C28,C29","0.47","~","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","3",""
|
||||
"D1,D2","1N5817","~","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","2",""
|
||||
"D3","PESD1CAN","","Package_TO_SOT_SMD:SOT-23","1",""
|
||||
"D4,D5,D6,D11,D12","SM712_SOT23","https://www.littelfuse.com/~/media/electronics/datasheets/tvs_diode_arrays/littelfuse_tvs_diode_array_sm712_datasheet.pdf.pdf","Package_TO_SOT_SMD:SOT-23","5",""
|
||||
"D7,D8,D9,D10","SMAJ15CA","https://www.littelfuse.com/media?resourcetype=datasheets&itemid=75e32973-b177-4ee3-a0ff-cedaf1abdb93&filename=smaj-datasheet","Diode_SMD:D_SMA","4",""
|
||||
"C1,C6,C8","0.47","~","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","3",""
|
||||
"C2,C9,C14,C15","1u","~","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","4",""
|
||||
"C3,C4,C5,C7,C10,C11,C13,C16,C17,C18,C21,C22,C23,C24,C25,C26,C27,C28,C29,C30,C31,C32","0.1","~","Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder","22",""
|
||||
"C12","22u","~","Capacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolder","1",""
|
||||
"C19,C20","12","~","Capacitor_SMD:C_0603_1608Metric_Pad1.08x0.95mm_HandSolder","2",""
|
||||
"D1","PESD1CAN","","Package_TO_SOT_SMD:SOT-23","1",""
|
||||
"D2,D3,D4,D5","SMAJ15CA","https://www.littelfuse.com/media?resourcetype=datasheets&itemid=75e32973-b177-4ee3-a0ff-cedaf1abdb93&filename=smaj-datasheet","Diode_SMD:D_SMA","4",""
|
||||
"D6,D8,D10,D11,D12","SM712_SOT23","https://www.littelfuse.com/~/media/electronics/datasheets/tvs_diode_arrays/littelfuse_tvs_diode_array_sm712_datasheet.pdf.pdf","Package_TO_SOT_SMD:SOT-23","5",""
|
||||
"D7,D9","1N5817","~","Diode_SMD:D_SMA-SMB_Universal_Handsoldering","2",""
|
||||
"F1,F2,F3,F4,F5,F6","0.5A","~","Fuse:Fuse_1206_3216Metric","6",""
|
||||
"J1","Screw_Terminal_01x02","~","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal","1",""
|
||||
"J2","USB_B","~","Connector_USB:USB_B_OST_USB-B1HSxx_Horizontal","1",""
|
||||
"J4,J5,J6,J7,J8,J9","Term_3","~","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","6",""
|
||||
"J10","SSI{slash}422","~","my_footprints:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm","1",""
|
||||
"JP1","Jumper_2_Open","~","Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical","1",""
|
||||
"JP2,JP3,JP4,JP5,JP6","Jumper_3_Open","~","Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical","5",""
|
||||
"J1,J2,J4,J5","HOLE","~","MountingHole:MountingHole_3.2mm_M3","4",""
|
||||
"J6,J7,J8,J12,J13,J14","Term_3","~","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-3_1x03_P5.00mm_Horizontal","6",""
|
||||
"J9","Screw_Terminal_01x02","~","TerminalBlock_Phoenix:TerminalBlock_Phoenix_MKDS-1,5-2_1x02_P5.00mm_Horizontal","1",""
|
||||
"J10","SSI/422","~","my_footprints:DSUB-9_Female_Horizontal_P2.77x2.84mm_EdgePinOffset4.94mm_Housed_MountingHolesOffset7.48mm","1",""
|
||||
"J11","USB_B","~","Connector_USB:USB_B_OST_USB-B1HSxx_Horizontal","1",""
|
||||
"JP1,JP2,JP4,JP5,JP6","Jumper_3_Open","~","Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_Vertical","5",""
|
||||
"JP3","Jumper_2_Open","~","Connector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_Vertical","1",""
|
||||
"Q1","AO3401","~","Package_TO_SOT_SMD:SOT-23_Handsoldering","1",""
|
||||
"Q2,Q3,Q4,Q5,Q6","B0505S-1W","","my_footprints:B0x0xS","5",""
|
||||
"Q7","B0505S-2W","","my_footprints:B0505S-2W","1",""
|
||||
"R1,R2,R8","22","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","3",""
|
||||
"R3","1k5","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
|
||||
"R4","330","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
|
||||
"R5,R7,R18","10k","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","3",""
|
||||
"R6","1k","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
|
||||
"R9","120","","Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolder","1",""
|
||||
"R10,R11,R12,R13,R14,R15,R16,R17","510","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","8",""
|
||||
"SW1,SW2,SW4","SW_Push","~","Button_Switch_SMD:SW_SPST_FSMSM","3",""
|
||||
"SW3","SW_DIP_x01","~","Button_Switch_THT:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W7.62mm_P2.54mm_LowProfile","1",""
|
||||
"U1","LM1117MP-3.3","http://www.ti.com/lit/ds/symlink/lm1117.pdf","Package_TO_SOT_SMD:SOT-223-3_TabPin2","1",""
|
||||
"U2","USBLC6-2SC6","https://www.st.com/resource/en/datasheet/usblc6-2.pdf","Package_TO_SOT_SMD:SOT-23-6","1",""
|
||||
"U3","STM32F303RBT6","https://www.st.com/resource/en/datasheet/stm32f303rb.pdf","Package_QFP:LQFP-64_10x10mm_P0.5mm","1",""
|
||||
"U4","ISO1050DUB","http://www.ti.com/lit/ds/symlink/iso1050.pdf","Package_SO:SOP-8_6.62x9.15mm_P2.54mm","1",""
|
||||
"U5,U6,U7","ISO3088DW","http://www.ti.com/lit/ds/symlink/iso3082.pdf","Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm","3",""
|
||||
"U8,U9,U10,U11","H11L1","https://www.onsemi.com/pub/Collateral/H11L3M-D.PDF","Package_DIP:DIP-6_W7.62mm","4",""
|
||||
"U12","MAX3232","https://datasheets.maximintegrated.com/en/ds/MAX3222-MAX3241.pdf","Package_SO:SOIC-16_3.9x9.9mm_P1.27mm","1",""
|
||||
"U13","ISO3086","","Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm","1",""
|
||||
"Q2,Q3,Q5,Q6,Q7","B0505S-1W","","my_footprints:B0x0xS","5",""
|
||||
"Q4","B0505S-2W","","my_footprints:B0505S-2W","1",""
|
||||
"R1","120","","Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolder","1",""
|
||||
"R2,R3,R4,R5,R6,R7,R8,R9","510","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","8",""
|
||||
"R10,R14,R16","10k","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","3",""
|
||||
"R11,R13,R15","22","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","3",""
|
||||
"R12","1k5","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
|
||||
"R17","330","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
|
||||
"R18","1k","~","Resistor_SMD:R_0603_1608Metric_Pad0.98x0.95mm_HandSolder","1",""
|
||||
"SW1","SW_DIP_x01","~","Button_Switch_THT:SW_DIP_SPSTx01_Slide_6.7x4.1mm_W7.62mm_P2.54mm_LowProfile","1",""
|
||||
"SW2,SW3,SW4","SW_Push","~","Button_Switch_SMD:SW_SPST_FSMSM","3",""
|
||||
"U1","ISO1050DUB","http://www.ti.com/lit/ds/symlink/iso1050.pdf","Package_SO:SOP-8_6.62x9.15mm_P2.54mm","1",""
|
||||
"U2","MAX3232","https://datasheets.maximintegrated.com/en/ds/MAX3222-MAX3241.pdf","Package_SO:SOIC-16_3.9x9.9mm_P1.27mm","1",""
|
||||
"U3","ISO3086","","Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm","1",""
|
||||
"U4","LM1117MP-3.3","http://www.ti.com/lit/ds/symlink/lm1117.pdf","Package_TO_SOT_SMD:SOT-223-3_TabPin2","1",""
|
||||
"U5","USBLC6-2SC6","https://www.st.com/resource/en/datasheet/usblc6-2.pdf","Package_TO_SOT_SMD:SOT-23-6","1",""
|
||||
"U6","STM32F303RBT6","https://www.st.com/resource/en/datasheet/stm32f303rb.pdf","Package_QFP:LQFP-64_10x10mm_P0.5mm","1",""
|
||||
"U7,U8,U9","ISO3088DW","http://www.ti.com/lit/ds/symlink/iso3082.pdf","Package_SO:SOIC-16W_7.5x10.3mm_P1.27mm","3",""
|
||||
"U10,U11,U12,U13","H11L1","https://www.onsemi.com/pub/Collateral/H11L3M-D.PDF","Package_DIP:DIP-6_W7.62mm","4",""
|
||||
"Y1","8MHz","~","Crystal:Crystal_HC49-U_Vertical","1",""
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
15604931484873780
|
||||
15605002417811257
|
||||
Battery
|
||||
BatteryClip_Keystone_54_D16-19mm
|
||||
Battery clip for batteries with a diameter between 16-19 mm: https://www.keyelco.com/product.cfm/product_id/826
|
||||
|
||||
6983
F3:F303/InterfaceBoard/kicad/gerbers/many485-B_Cu.gbr
Normal file
6983
F3:F303/InterfaceBoard/kicad/gerbers/many485-B_Cu.gbr
Normal file
File diff suppressed because it is too large
Load Diff
308
F3:F303/InterfaceBoard/kicad/gerbers/many485-B_Mask.gbr
Normal file
308
F3:F303/InterfaceBoard/kicad/gerbers/many485-B_Mask.gbr
Normal file
@ -0,0 +1,308 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.0*%
|
||||
%TF.CreationDate,2025-03-21T17:04:22+03:00*%
|
||||
%TF.ProjectId,many485,6d616e79-3438-4352-9e6b-696361645f70,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Bot*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 9.0.0) date 2025-03-21 17:04:22*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
|
||||
0 Add a 4 corners polygon primitive as box body*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10C,3.000000*%
|
||||
%ADD11RoundRect,0.250000X-1.050000X1.050000X-1.050000X-1.050000X1.050000X-1.050000X1.050000X1.050000X0*%
|
||||
%ADD12C,2.600000*%
|
||||
%ADD13R,1.700000X1.700000*%
|
||||
%ADD14C,1.700000*%
|
||||
%ADD15RoundRect,0.250000X-1.050000X-1.050000X1.050000X-1.050000X1.050000X1.050000X-1.050000X1.050000X0*%
|
||||
%ADD16RoundRect,0.250000X1.050000X1.050000X-1.050000X1.050000X-1.050000X-1.050000X1.050000X-1.050000X0*%
|
||||
%ADD17R,1.000000X1.000000*%
|
||||
%ADD18C,1.000000*%
|
||||
%ADD19C,3.200000*%
|
||||
%ADD20C,1.500000*%
|
||||
%ADD21RoundRect,0.250000X0.550000X0.550000X-0.550000X0.550000X-0.550000X-0.550000X0.550000X-0.550000X0*%
|
||||
%ADD22C,1.600000*%
|
||||
%ADD23RoundRect,0.250000X-0.550000X-0.550000X0.550000X-0.550000X0.550000X0.550000X-0.550000X0.550000X0*%
|
||||
%ADD24RoundRect,0.381000X-0.381000X0.619000X-0.381000X-0.619000X0.381000X-0.619000X0.381000X0.619000X0*%
|
||||
%ADD25RoundRect,0.381000X-0.381000X0.762000X-0.381000X-0.762000X0.381000X-0.762000X0.381000X0.762000X0*%
|
||||
%ADD26R,1.600000X2.180000*%
|
||||
%ADD27C,4.000000*%
|
||||
%ADD28R,1.600000X1.600000*%
|
||||
%ADD29C,3.500000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,TP1*%
|
||||
X122631200Y-67767200D03*
|
||||
%TD*%
|
||||
%TO.C,TP3*%
|
||||
X129032000Y-73406000D03*
|
||||
%TD*%
|
||||
%TO.C,TP2*%
|
||||
X128981200Y-67716400D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,J9*%
|
||||
X144241300Y-65521200D03*
|
||||
D12*
|
||||
X144241300Y-70521200D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,JP3*%
|
||||
X127711200Y-77825600D03*
|
||||
D14*
|
||||
X130251200Y-77825600D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,JP2*%
|
||||
X104038400Y-68732400D03*
|
||||
D14*
|
||||
X104038400Y-66192400D03*
|
||||
X104038400Y-63652400D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,JP5*%
|
||||
X86800000Y-85700000D03*
|
||||
D14*
|
||||
X86800000Y-83160000D03*
|
||||
X86800000Y-80620000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,JP6*%
|
||||
X73304400Y-108000800D03*
|
||||
D14*
|
||||
X73304400Y-105460800D03*
|
||||
X73304400Y-102920800D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,JP1*%
|
||||
X107746800Y-68732400D03*
|
||||
D14*
|
||||
X107746800Y-66192400D03*
|
||||
X107746800Y-63652400D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,JP4*%
|
||||
X90600000Y-85700000D03*
|
||||
D14*
|
||||
X90600000Y-83160000D03*
|
||||
X90600000Y-80620000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J7*%
|
||||
X113486600Y-38083600D03*
|
||||
D12*
|
||||
X118486600Y-38083600D03*
|
||||
X123486600Y-38083600D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,J13*%
|
||||
X120179200Y-114374500D03*
|
||||
D12*
|
||||
X115179200Y-114374500D03*
|
||||
X110179200Y-114374500D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,J14*%
|
||||
X103679200Y-114374500D03*
|
||||
D12*
|
||||
X98679200Y-114374500D03*
|
||||
X93679200Y-114374500D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,J12*%
|
||||
X136679200Y-114374500D03*
|
||||
D12*
|
||||
X131679200Y-114374500D03*
|
||||
X126679200Y-114374500D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J6*%
|
||||
X130486600Y-38083600D03*
|
||||
D12*
|
||||
X135486600Y-38083600D03*
|
||||
X140486600Y-38083600D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,J8*%
|
||||
X86669500Y-38603500D03*
|
||||
D12*
|
||||
X91669500Y-38603500D03*
|
||||
X96669500Y-38603500D03*
|
||||
%TD*%
|
||||
D17*
|
||||
%TO.C,J3*%
|
||||
X147750000Y-97900000D03*
|
||||
D18*
|
||||
X147750000Y-99170000D03*
|
||||
X147750000Y-100440000D03*
|
||||
X147750000Y-101710000D03*
|
||||
X147750000Y-102980000D03*
|
||||
X147750000Y-104250000D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,J1*%
|
||||
X74000000Y-37500000D03*
|
||||
%TD*%
|
||||
%TO.C,J5*%
|
||||
X147000000Y-114500000D03*
|
||||
%TD*%
|
||||
%TO.C,J4*%
|
||||
X74000000Y-114500000D03*
|
||||
%TD*%
|
||||
%TO.C,J2*%
|
||||
X147000000Y-37500000D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,Q2*%
|
||||
X80899100Y-54342100D03*
|
||||
X80899100Y-51802100D03*
|
||||
X80899100Y-49262100D03*
|
||||
X80899100Y-46722100D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,U13*%
|
||||
X114249200Y-54356000D03*
|
||||
D22*
|
||||
X114249200Y-56896000D03*
|
||||
X114249200Y-59436000D03*
|
||||
X106629200Y-59436000D03*
|
||||
X106629200Y-56896000D03*
|
||||
X106629200Y-54356000D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,U11*%
|
||||
X106639200Y-50647600D03*
|
||||
D22*
|
||||
X106639200Y-48107600D03*
|
||||
X106639200Y-45567600D03*
|
||||
X114259200Y-45567600D03*
|
||||
X114259200Y-48107600D03*
|
||||
X114259200Y-50647600D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,SW1*%
|
||||
X108805000Y-38585000D03*
|
||||
D22*
|
||||
X101185000Y-38585000D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,Q3*%
|
||||
X131973400Y-64363600D03*
|
||||
X131973400Y-61823600D03*
|
||||
X131973400Y-59283600D03*
|
||||
X131973400Y-56743600D03*
|
||||
%TD*%
|
||||
%TO.C,Y1*%
|
||||
X95758000Y-79033200D03*
|
||||
X95758000Y-83913200D03*
|
||||
%TD*%
|
||||
%TO.C,Q7*%
|
||||
X105582000Y-98370900D03*
|
||||
X105582000Y-100910900D03*
|
||||
X105582000Y-103450900D03*
|
||||
X105582000Y-105990900D03*
|
||||
%TD*%
|
||||
D24*
|
||||
%TO.C,Q4*%
|
||||
X82288800Y-97078600D03*
|
||||
X82288800Y-99618600D03*
|
||||
D25*
|
||||
X82288800Y-104698600D03*
|
||||
X82288800Y-109778600D03*
|
||||
%TD*%
|
||||
D26*
|
||||
%TO.C,SW2*%
|
||||
X84277200Y-73881200D03*
|
||||
X84277200Y-64701200D03*
|
||||
%TD*%
|
||||
%TO.C,SW3*%
|
||||
X134800000Y-90100000D03*
|
||||
X134800000Y-80920000D03*
|
||||
%TD*%
|
||||
D21*
|
||||
%TO.C,U12*%
|
||||
X147269200Y-54356000D03*
|
||||
D22*
|
||||
X147269200Y-56896000D03*
|
||||
X147269200Y-59436000D03*
|
||||
X139649200Y-59436000D03*
|
||||
X139649200Y-56896000D03*
|
||||
X139649200Y-54356000D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,Q5*%
|
||||
X138582000Y-98370900D03*
|
||||
X138582000Y-100910900D03*
|
||||
X138582000Y-103450900D03*
|
||||
X138582000Y-105990900D03*
|
||||
%TD*%
|
||||
D27*
|
||||
%TO.C,J10*%
|
||||
X77000000Y-85500000D03*
|
||||
X77000000Y-60500000D03*
|
||||
D28*
|
||||
X77300000Y-67460000D03*
|
||||
D22*
|
||||
X77300000Y-70230000D03*
|
||||
X77300000Y-73000000D03*
|
||||
X77300000Y-75770000D03*
|
||||
X77300000Y-78540000D03*
|
||||
X74460000Y-68845000D03*
|
||||
X74460000Y-71615000D03*
|
||||
X74460000Y-74385000D03*
|
||||
X74460000Y-77155000D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,J11*%
|
||||
X142317300Y-83241200D03*
|
||||
D14*
|
||||
X142317300Y-80741200D03*
|
||||
X144317300Y-80741200D03*
|
||||
X144317300Y-83241200D03*
|
||||
D29*
|
||||
X147027300Y-75971200D03*
|
||||
X147027300Y-88011200D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,U10*%
|
||||
X139760800Y-50698400D03*
|
||||
D22*
|
||||
X139760800Y-48158400D03*
|
||||
X139760800Y-45618400D03*
|
||||
X147380800Y-45618400D03*
|
||||
X147380800Y-48158400D03*
|
||||
X147380800Y-50698400D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,Q6*%
|
||||
X122082000Y-98370900D03*
|
||||
X122082000Y-100910900D03*
|
||||
X122082000Y-103450900D03*
|
||||
X122082000Y-105990900D03*
|
||||
%TD*%
|
||||
D26*
|
||||
%TO.C,SW4*%
|
||||
X119800000Y-90090000D03*
|
||||
X119800000Y-80910000D03*
|
||||
%TD*%
|
||||
M02*
|
||||
9365
F3:F303/InterfaceBoard/kicad/gerbers/many485-B_Silkscreen.gbr
Normal file
9365
F3:F303/InterfaceBoard/kicad/gerbers/many485-B_Silkscreen.gbr
Normal file
File diff suppressed because it is too large
Load Diff
23
F3:F303/InterfaceBoard/kicad/gerbers/many485-Edge_Cuts.gbr
Normal file
23
F3:F303/InterfaceBoard/kicad/gerbers/many485-Edge_Cuts.gbr
Normal file
@ -0,0 +1,23 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.0*%
|
||||
%TF.CreationDate,2025-03-21T17:04:22+03:00*%
|
||||
%TF.ProjectId,many485,6d616e79-3438-4352-9e6b-696361645f70,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Profile,NP*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 9.0.0) date 2025-03-21 17:04:22*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
%TA.AperFunction,Profile*%
|
||||
%ADD10C,0.050000*%
|
||||
%TD*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
X70500000Y-34000000D02*
|
||||
X150500000Y-34000000D01*
|
||||
X150500000Y-118000000D01*
|
||||
X70500000Y-118000000D01*
|
||||
X70500000Y-34000000D01*
|
||||
M02*
|
||||
16597
F3:F303/InterfaceBoard/kicad/gerbers/many485-F_Cu.gbr
Normal file
16597
F3:F303/InterfaceBoard/kicad/gerbers/many485-F_Cu.gbr
Normal file
File diff suppressed because it is too large
Load Diff
875
F3:F303/InterfaceBoard/kicad/gerbers/many485-F_Mask.gbr
Normal file
875
F3:F303/InterfaceBoard/kicad/gerbers/many485-F_Mask.gbr
Normal file
@ -0,0 +1,875 @@
|
||||
%TF.GenerationSoftware,KiCad,Pcbnew,9.0.0*%
|
||||
%TF.CreationDate,2025-03-21T17:04:22+03:00*%
|
||||
%TF.ProjectId,many485,6d616e79-3438-4352-9e6b-696361645f70,rev?*%
|
||||
%TF.SameCoordinates,Original*%
|
||||
%TF.FileFunction,Soldermask,Top*%
|
||||
%TF.FilePolarity,Negative*%
|
||||
%FSLAX46Y46*%
|
||||
G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
|
||||
G04 Created by KiCad (PCBNEW 9.0.0) date 2025-03-21 17:04:22*
|
||||
%MOMM*%
|
||||
%LPD*%
|
||||
G01*
|
||||
G04 APERTURE LIST*
|
||||
G04 Aperture macros list*
|
||||
%AMRoundRect*
|
||||
0 Rectangle with rounded corners*
|
||||
0 $1 Rounding radius*
|
||||
0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
|
||||
0 Add a 4 corners polygon primitive as box body*
|
||||
4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
|
||||
0 Add four circle primitives for the rounded corners*
|
||||
1,1,$1+$1,$2,$3*
|
||||
1,1,$1+$1,$4,$5*
|
||||
1,1,$1+$1,$6,$7*
|
||||
1,1,$1+$1,$8,$9*
|
||||
0 Add four rect primitives between the rounded corners*
|
||||
20,1,$1+$1,$2,$3,$4,$5,0*
|
||||
20,1,$1+$1,$4,$5,$6,$7,0*
|
||||
20,1,$1+$1,$6,$7,$8,$9,0*
|
||||
20,1,$1+$1,$8,$9,$2,$3,0*%
|
||||
%AMOutline4P*
|
||||
0 Free polygon, 4 corners , with rotation*
|
||||
0 The origin of the aperture is its center*
|
||||
0 number of corners: always 4*
|
||||
0 $1 to $8 corner X, Y*
|
||||
0 $9 Rotation angle, in degrees counterclockwise*
|
||||
0 create outline with 4 corners*
|
||||
4,1,4,$1,$2,$3,$4,$5,$6,$7,$8,$1,$2,$9*%
|
||||
G04 Aperture macros list end*
|
||||
%ADD10C,3.000000*%
|
||||
%ADD11RoundRect,0.250000X-1.050000X1.050000X-1.050000X-1.050000X1.050000X-1.050000X1.050000X1.050000X0*%
|
||||
%ADD12C,2.600000*%
|
||||
%ADD13RoundRect,0.075000X-0.700000X-0.075000X0.700000X-0.075000X0.700000X0.075000X-0.700000X0.075000X0*%
|
||||
%ADD14RoundRect,0.075000X-0.075000X-0.700000X0.075000X-0.700000X0.075000X0.700000X-0.075000X0.700000X0*%
|
||||
%ADD15RoundRect,0.150000X-0.825000X-0.150000X0.825000X-0.150000X0.825000X0.150000X-0.825000X0.150000X0*%
|
||||
%ADD16R,1.700000X1.700000*%
|
||||
%ADD17C,1.700000*%
|
||||
%ADD18RoundRect,0.250000X-1.050000X-1.050000X1.050000X-1.050000X1.050000X1.050000X-1.050000X1.050000X0*%
|
||||
%ADD19RoundRect,0.250000X1.050000X1.050000X-1.050000X1.050000X-1.050000X-1.050000X1.050000X-1.050000X0*%
|
||||
%ADD20R,1.000000X1.000000*%
|
||||
%ADD21C,1.000000*%
|
||||
%ADD22RoundRect,0.162500X0.162500X-1.012500X0.162500X1.012500X-0.162500X1.012500X-0.162500X-1.012500X0*%
|
||||
%ADD23RoundRect,0.150000X-0.512500X-0.150000X0.512500X-0.150000X0.512500X0.150000X-0.512500X0.150000X0*%
|
||||
%ADD24RoundRect,0.150000X-0.150000X0.875000X-0.150000X-0.875000X0.150000X-0.875000X0.150000X0.875000X0*%
|
||||
%ADD25RoundRect,0.150000X0.875000X0.150000X-0.875000X0.150000X-0.875000X-0.150000X0.875000X-0.150000X0*%
|
||||
%ADD26RoundRect,0.150000X0.587500X0.150000X-0.587500X0.150000X-0.587500X-0.150000X0.587500X-0.150000X0*%
|
||||
%ADD27RoundRect,0.150000X-0.150000X0.587500X-0.150000X-0.587500X0.150000X-0.587500X0.150000X0.587500X0*%
|
||||
%ADD28RoundRect,0.237500X0.237500X-0.300000X0.237500X0.300000X-0.237500X0.300000X-0.237500X-0.300000X0*%
|
||||
%ADD29RoundRect,0.250000X-1.000000X-0.650000X1.000000X-0.650000X1.000000X0.650000X-1.000000X0.650000X0*%
|
||||
%ADD30RoundRect,0.250000X-0.625000X0.375000X-0.625000X-0.375000X0.625000X-0.375000X0.625000X0.375000X0*%
|
||||
%ADD31RoundRect,0.250000X0.337500X0.475000X-0.337500X0.475000X-0.337500X-0.475000X0.337500X-0.475000X0*%
|
||||
%ADD32RoundRect,0.250000X-0.475000X0.337500X-0.475000X-0.337500X0.475000X-0.337500X0.475000X0.337500X0*%
|
||||
%ADD33RoundRect,0.237500X-0.300000X-0.237500X0.300000X-0.237500X0.300000X0.237500X-0.300000X0.237500X0*%
|
||||
%ADD34RoundRect,0.250000X0.375000X0.625000X-0.375000X0.625000X-0.375000X-0.625000X0.375000X-0.625000X0*%
|
||||
%ADD35RoundRect,0.375000X0.375000X-0.625000X0.375000X0.625000X-0.375000X0.625000X-0.375000X-0.625000X0*%
|
||||
%ADD36RoundRect,0.500000X1.400000X-0.500000X1.400000X0.500000X-1.400000X0.500000X-1.400000X-0.500000X0*%
|
||||
%ADD37C,3.200000*%
|
||||
%ADD38RoundRect,0.237500X-0.250000X-0.237500X0.250000X-0.237500X0.250000X0.237500X-0.250000X0.237500X0*%
|
||||
%ADD39RoundRect,0.237500X0.300000X0.237500X-0.300000X0.237500X-0.300000X-0.237500X0.300000X-0.237500X0*%
|
||||
%ADD40RoundRect,0.237500X-0.237500X0.300000X-0.237500X-0.300000X0.237500X-0.300000X0.237500X0.300000X0*%
|
||||
%ADD41RoundRect,0.237500X-0.237500X0.250000X-0.237500X-0.250000X0.237500X-0.250000X0.237500X0.250000X0*%
|
||||
%ADD42RoundRect,0.200000X-0.200000X0.750000X-0.200000X-0.750000X0.200000X-0.750000X0.200000X0.750000X0*%
|
||||
%ADD43RoundRect,0.250000X0.625000X-0.375000X0.625000X0.375000X-0.625000X0.375000X-0.625000X-0.375000X0*%
|
||||
%ADD44RoundRect,0.250000X0.400000X1.075000X-0.400000X1.075000X-0.400000X-1.075000X0.400000X-1.075000X0*%
|
||||
%ADD45RoundRect,0.237500X0.237500X-0.250000X0.237500X0.250000X-0.237500X0.250000X-0.237500X-0.250000X0*%
|
||||
%ADD46RoundRect,0.237500X0.250000X0.237500X-0.250000X0.237500X-0.250000X-0.237500X0.250000X-0.237500X0*%
|
||||
%ADD47Outline4P,-1.800000X-1.150000X1.800000X-0.550000X1.800000X0.550000X-1.800000X1.150000X0.000000*%
|
||||
%ADD48Outline4P,-1.800000X-1.150000X1.800000X-0.550000X1.800000X0.550000X-1.800000X1.150000X180.000000*%
|
||||
%ADD49RoundRect,0.250000X0.475000X-0.337500X0.475000X0.337500X-0.475000X0.337500X-0.475000X-0.337500X0*%
|
||||
%ADD50RoundRect,0.250000X-0.337500X-0.475000X0.337500X-0.475000X0.337500X0.475000X-0.337500X0.475000X0*%
|
||||
%ADD51C,1.500000*%
|
||||
%ADD52RoundRect,0.250000X0.550000X0.550000X-0.550000X0.550000X-0.550000X-0.550000X0.550000X-0.550000X0*%
|
||||
%ADD53C,1.600000*%
|
||||
%ADD54RoundRect,0.250000X-0.550000X-0.550000X0.550000X-0.550000X0.550000X0.550000X-0.550000X0.550000X0*%
|
||||
%ADD55RoundRect,0.381000X-0.381000X0.619000X-0.381000X-0.619000X0.381000X-0.619000X0.381000X0.619000X0*%
|
||||
%ADD56RoundRect,0.381000X-0.381000X0.762000X-0.381000X-0.762000X0.381000X-0.762000X0.381000X0.762000X0*%
|
||||
%ADD57C,4.000000*%
|
||||
%ADD58R,1.600000X1.600000*%
|
||||
%ADD59C,3.500000*%
|
||||
G04 APERTURE END LIST*
|
||||
D10*
|
||||
%TO.C,TP1*%
|
||||
X122631200Y-67767200D03*
|
||||
%TD*%
|
||||
%TO.C,TP3*%
|
||||
X129032000Y-73406000D03*
|
||||
%TD*%
|
||||
%TO.C,TP2*%
|
||||
X128981200Y-67716400D03*
|
||||
%TD*%
|
||||
D11*
|
||||
%TO.C,J9*%
|
||||
X144241300Y-65521200D03*
|
||||
D12*
|
||||
X144241300Y-70521200D03*
|
||||
%TD*%
|
||||
D13*
|
||||
%TO.C,U6*%
|
||||
X101325000Y-79250000D03*
|
||||
X101325000Y-79750000D03*
|
||||
X101325000Y-80250000D03*
|
||||
X101325000Y-80750000D03*
|
||||
X101325000Y-81250000D03*
|
||||
X101325000Y-81750000D03*
|
||||
X101325000Y-82250000D03*
|
||||
X101325000Y-82750000D03*
|
||||
X101325000Y-83250000D03*
|
||||
X101325000Y-83750000D03*
|
||||
X101325000Y-84250000D03*
|
||||
X101325000Y-84750000D03*
|
||||
X101325000Y-85250000D03*
|
||||
X101325000Y-85750000D03*
|
||||
X101325000Y-86250000D03*
|
||||
X101325000Y-86750000D03*
|
||||
D14*
|
||||
X103250000Y-88675000D03*
|
||||
X103750000Y-88675000D03*
|
||||
X104250000Y-88675000D03*
|
||||
X104750000Y-88675000D03*
|
||||
X105250000Y-88675000D03*
|
||||
X105750000Y-88675000D03*
|
||||
X106250000Y-88675000D03*
|
||||
X106750000Y-88675000D03*
|
||||
X107250000Y-88675000D03*
|
||||
X107750000Y-88675000D03*
|
||||
X108250000Y-88675000D03*
|
||||
X108750000Y-88675000D03*
|
||||
X109250000Y-88675000D03*
|
||||
X109750000Y-88675000D03*
|
||||
X110250000Y-88675000D03*
|
||||
X110750000Y-88675000D03*
|
||||
D13*
|
||||
X112675000Y-86750000D03*
|
||||
X112675000Y-86250000D03*
|
||||
X112675000Y-85750000D03*
|
||||
X112675000Y-85250000D03*
|
||||
X112675000Y-84750000D03*
|
||||
X112675000Y-84250000D03*
|
||||
X112675000Y-83750000D03*
|
||||
X112675000Y-83250000D03*
|
||||
X112675000Y-82750000D03*
|
||||
X112675000Y-82250000D03*
|
||||
X112675000Y-81750000D03*
|
||||
X112675000Y-81250000D03*
|
||||
X112675000Y-80750000D03*
|
||||
X112675000Y-80250000D03*
|
||||
X112675000Y-79750000D03*
|
||||
X112675000Y-79250000D03*
|
||||
D14*
|
||||
X110750000Y-77325000D03*
|
||||
X110250000Y-77325000D03*
|
||||
X109750000Y-77325000D03*
|
||||
X109250000Y-77325000D03*
|
||||
X108750000Y-77325000D03*
|
||||
X108250000Y-77325000D03*
|
||||
X107750000Y-77325000D03*
|
||||
X107250000Y-77325000D03*
|
||||
X106750000Y-77325000D03*
|
||||
X106250000Y-77325000D03*
|
||||
X105750000Y-77325000D03*
|
||||
X105250000Y-77325000D03*
|
||||
X104750000Y-77325000D03*
|
||||
X104250000Y-77325000D03*
|
||||
X103750000Y-77325000D03*
|
||||
X103250000Y-77325000D03*
|
||||
%TD*%
|
||||
D15*
|
||||
%TO.C,U2*%
|
||||
X124493400Y-46075600D03*
|
||||
X124493400Y-47345600D03*
|
||||
X124493400Y-48615600D03*
|
||||
X124493400Y-49885600D03*
|
||||
X124493400Y-51155600D03*
|
||||
X124493400Y-52425600D03*
|
||||
X124493400Y-53695600D03*
|
||||
X124493400Y-54965600D03*
|
||||
X129443400Y-54965600D03*
|
||||
X129443400Y-53695600D03*
|
||||
X129443400Y-52425600D03*
|
||||
X129443400Y-51155600D03*
|
||||
X129443400Y-49885600D03*
|
||||
X129443400Y-48615600D03*
|
||||
X129443400Y-47345600D03*
|
||||
X129443400Y-46075600D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,JP3*%
|
||||
X127711200Y-77825600D03*
|
||||
D17*
|
||||
X130251200Y-77825600D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,JP2*%
|
||||
X104038400Y-68732400D03*
|
||||
D17*
|
||||
X104038400Y-66192400D03*
|
||||
X104038400Y-63652400D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,JP5*%
|
||||
X86800000Y-85700000D03*
|
||||
D17*
|
||||
X86800000Y-83160000D03*
|
||||
X86800000Y-80620000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,JP6*%
|
||||
X73304400Y-108000800D03*
|
||||
D17*
|
||||
X73304400Y-105460800D03*
|
||||
X73304400Y-102920800D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,JP1*%
|
||||
X107746800Y-68732400D03*
|
||||
D17*
|
||||
X107746800Y-66192400D03*
|
||||
X107746800Y-63652400D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,JP4*%
|
||||
X90600000Y-85700000D03*
|
||||
D17*
|
||||
X90600000Y-83160000D03*
|
||||
X90600000Y-80620000D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,J7*%
|
||||
X113486600Y-38083600D03*
|
||||
D12*
|
||||
X118486600Y-38083600D03*
|
||||
X123486600Y-38083600D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,J13*%
|
||||
X120179200Y-114374500D03*
|
||||
D12*
|
||||
X115179200Y-114374500D03*
|
||||
X110179200Y-114374500D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,J14*%
|
||||
X103679200Y-114374500D03*
|
||||
D12*
|
||||
X98679200Y-114374500D03*
|
||||
X93679200Y-114374500D03*
|
||||
%TD*%
|
||||
D19*
|
||||
%TO.C,J12*%
|
||||
X136679200Y-114374500D03*
|
||||
D12*
|
||||
X131679200Y-114374500D03*
|
||||
X126679200Y-114374500D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,J6*%
|
||||
X130486600Y-38083600D03*
|
||||
D12*
|
||||
X135486600Y-38083600D03*
|
||||
X140486600Y-38083600D03*
|
||||
%TD*%
|
||||
D18*
|
||||
%TO.C,J8*%
|
||||
X86669500Y-38603500D03*
|
||||
D12*
|
||||
X91669500Y-38603500D03*
|
||||
X96669500Y-38603500D03*
|
||||
%TD*%
|
||||
D20*
|
||||
%TO.C,J3*%
|
||||
X147750000Y-97900000D03*
|
||||
D21*
|
||||
X147750000Y-99170000D03*
|
||||
X147750000Y-100440000D03*
|
||||
X147750000Y-101710000D03*
|
||||
X147750000Y-102980000D03*
|
||||
X147750000Y-104250000D03*
|
||||
%TD*%
|
||||
D22*
|
||||
%TO.C,U1*%
|
||||
X87858700Y-55010100D03*
|
||||
X90398700Y-55010100D03*
|
||||
X92938700Y-55010100D03*
|
||||
X95478700Y-55010100D03*
|
||||
X95478700Y-45960100D03*
|
||||
X92938700Y-45960100D03*
|
||||
X90398700Y-45960100D03*
|
||||
X87858700Y-45960100D03*
|
||||
%TD*%
|
||||
D23*
|
||||
%TO.C,U5*%
|
||||
X117023300Y-79974400D03*
|
||||
X117023300Y-80924400D03*
|
||||
X117023300Y-81874400D03*
|
||||
X119298300Y-81874400D03*
|
||||
X119298300Y-80924400D03*
|
||||
X119298300Y-79974400D03*
|
||||
%TD*%
|
||||
D24*
|
||||
%TO.C,U7*%
|
||||
X103220000Y-97500000D03*
|
||||
X101950000Y-97500000D03*
|
||||
X100680000Y-97500000D03*
|
||||
X99410000Y-97500000D03*
|
||||
X98140000Y-97500000D03*
|
||||
X96870000Y-97500000D03*
|
||||
X95600000Y-97500000D03*
|
||||
X94330000Y-97500000D03*
|
||||
X94330000Y-106800000D03*
|
||||
X95600000Y-106800000D03*
|
||||
X96870000Y-106800000D03*
|
||||
X98140000Y-106800000D03*
|
||||
X99410000Y-106800000D03*
|
||||
X100680000Y-106800000D03*
|
||||
X101950000Y-106800000D03*
|
||||
X103220000Y-106800000D03*
|
||||
%TD*%
|
||||
%TO.C,U8*%
|
||||
X119720000Y-97500000D03*
|
||||
X118450000Y-97500000D03*
|
||||
X117180000Y-97500000D03*
|
||||
X115910000Y-97500000D03*
|
||||
X114640000Y-97500000D03*
|
||||
X113370000Y-97500000D03*
|
||||
X112100000Y-97500000D03*
|
||||
X110830000Y-97500000D03*
|
||||
X110830000Y-106800000D03*
|
||||
X112100000Y-106800000D03*
|
||||
X113370000Y-106800000D03*
|
||||
X114640000Y-106800000D03*
|
||||
X115910000Y-106800000D03*
|
||||
X117180000Y-106800000D03*
|
||||
X118450000Y-106800000D03*
|
||||
X119720000Y-106800000D03*
|
||||
%TD*%
|
||||
D25*
|
||||
%TO.C,U3*%
|
||||
X98731600Y-69832400D03*
|
||||
X98731600Y-68562400D03*
|
||||
X98731600Y-67292400D03*
|
||||
X98731600Y-66022400D03*
|
||||
X98731600Y-64752400D03*
|
||||
X98731600Y-63482400D03*
|
||||
X98731600Y-62212400D03*
|
||||
X98731600Y-60942400D03*
|
||||
X89431600Y-60942400D03*
|
||||
X89431600Y-62212400D03*
|
||||
X89431600Y-63482400D03*
|
||||
X89431600Y-64752400D03*
|
||||
X89431600Y-66022400D03*
|
||||
X89431600Y-67292400D03*
|
||||
X89431600Y-68562400D03*
|
||||
X89431600Y-69832400D03*
|
||||
%TD*%
|
||||
D24*
|
||||
%TO.C,U9*%
|
||||
X136220000Y-97500000D03*
|
||||
X134950000Y-97500000D03*
|
||||
X133680000Y-97500000D03*
|
||||
X132410000Y-97500000D03*
|
||||
X131140000Y-97500000D03*
|
||||
X129870000Y-97500000D03*
|
||||
X128600000Y-97500000D03*
|
||||
X127330000Y-97500000D03*
|
||||
X127330000Y-106800000D03*
|
||||
X128600000Y-106800000D03*
|
||||
X129870000Y-106800000D03*
|
||||
X131140000Y-106800000D03*
|
||||
X132410000Y-106800000D03*
|
||||
X133680000Y-106800000D03*
|
||||
X134950000Y-106800000D03*
|
||||
X136220000Y-106800000D03*
|
||||
%TD*%
|
||||
D26*
|
||||
%TO.C,D6*%
|
||||
X81542600Y-69313200D03*
|
||||
X81542600Y-67413200D03*
|
||||
X79667600Y-68363200D03*
|
||||
%TD*%
|
||||
D27*
|
||||
%TO.C,D11*%
|
||||
X116177000Y-109655500D03*
|
||||
X114277000Y-109655500D03*
|
||||
X115227000Y-111530500D03*
|
||||
%TD*%
|
||||
%TO.C,D10*%
|
||||
X99677000Y-109655500D03*
|
||||
X97777000Y-109655500D03*
|
||||
X98727000Y-111530500D03*
|
||||
%TD*%
|
||||
%TO.C,D12*%
|
||||
X132677000Y-109655500D03*
|
||||
X130777000Y-109655500D03*
|
||||
X131727000Y-111530500D03*
|
||||
%TD*%
|
||||
D26*
|
||||
%TO.C,D8*%
|
||||
X81491800Y-72970800D03*
|
||||
X81491800Y-71070800D03*
|
||||
X79616800Y-72020800D03*
|
||||
%TD*%
|
||||
D27*
|
||||
%TO.C,D1*%
|
||||
X92603500Y-41396500D03*
|
||||
X90703500Y-41396500D03*
|
||||
X91653500Y-43271500D03*
|
||||
%TD*%
|
||||
D28*
|
||||
%TO.C,C18*%
|
||||
X114808000Y-78790800D03*
|
||||
X114808000Y-77065800D03*
|
||||
%TD*%
|
||||
D29*
|
||||
%TO.C,D2*%
|
||||
X112591000Y-41706800D03*
|
||||
X116591000Y-41706800D03*
|
||||
%TD*%
|
||||
D30*
|
||||
%TO.C,F6*%
|
||||
X108559600Y-97231200D03*
|
||||
X108559600Y-100031200D03*
|
||||
%TD*%
|
||||
D31*
|
||||
%TO.C,C14*%
|
||||
X87172800Y-72186800D03*
|
||||
X85097800Y-72186800D03*
|
||||
%TD*%
|
||||
D32*
|
||||
%TO.C,C9*%
|
||||
X85369500Y-52919700D03*
|
||||
X85369500Y-54994700D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,C25*%
|
||||
X102095000Y-94923500D03*
|
||||
X103820000Y-94923500D03*
|
||||
%TD*%
|
||||
%TO.C,C20*%
|
||||
X96875600Y-82753200D03*
|
||||
X98600600Y-82753200D03*
|
||||
%TD*%
|
||||
D34*
|
||||
%TO.C,F5*%
|
||||
X125199000Y-94923500D03*
|
||||
X122399000Y-94923500D03*
|
||||
%TD*%
|
||||
D35*
|
||||
%TO.C,U4*%
|
||||
X114438400Y-70663600D03*
|
||||
X116738400Y-70663600D03*
|
||||
D36*
|
||||
X116738400Y-64363600D03*
|
||||
D35*
|
||||
X119038400Y-70663600D03*
|
||||
%TD*%
|
||||
D37*
|
||||
%TO.C,J1*%
|
||||
X74000000Y-37500000D03*
|
||||
%TD*%
|
||||
D28*
|
||||
%TO.C,C7*%
|
||||
X145745200Y-50850800D03*
|
||||
X145745200Y-49125800D03*
|
||||
%TD*%
|
||||
D38*
|
||||
%TO.C,R11*%
|
||||
X116586000Y-77063600D03*
|
||||
X118411000Y-77063600D03*
|
||||
%TD*%
|
||||
D39*
|
||||
%TO.C,C16*%
|
||||
X116177400Y-73050400D03*
|
||||
X114452400Y-73050400D03*
|
||||
%TD*%
|
||||
%TO.C,C30*%
|
||||
X103365000Y-109401500D03*
|
||||
X101640000Y-109401500D03*
|
||||
%TD*%
|
||||
D40*
|
||||
%TO.C,C10*%
|
||||
X108610400Y-54254400D03*
|
||||
X108610400Y-55979400D03*
|
||||
%TD*%
|
||||
D41*
|
||||
%TO.C,R2*%
|
||||
X112328800Y-45466000D03*
|
||||
X112328800Y-47291000D03*
|
||||
%TD*%
|
||||
D42*
|
||||
%TO.C,Q1*%
|
||||
X123835200Y-73200000D03*
|
||||
X121935200Y-73200000D03*
|
||||
X122885200Y-76200000D03*
|
||||
%TD*%
|
||||
D31*
|
||||
%TO.C,C6*%
|
||||
X122026600Y-50038000D03*
|
||||
X119951600Y-50038000D03*
|
||||
%TD*%
|
||||
D43*
|
||||
%TO.C,F1*%
|
||||
X99466400Y-57156000D03*
|
||||
X99466400Y-54356000D03*
|
||||
%TD*%
|
||||
D44*
|
||||
%TO.C,R1*%
|
||||
X86691500Y-42357100D03*
|
||||
X83591500Y-42357100D03*
|
||||
%TD*%
|
||||
D29*
|
||||
%TO.C,D3*%
|
||||
X120071800Y-41706800D03*
|
||||
X124071800Y-41706800D03*
|
||||
%TD*%
|
||||
D34*
|
||||
%TO.C,F3*%
|
||||
X90932000Y-93268800D03*
|
||||
X88132000Y-93268800D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,C19*%
|
||||
X96877800Y-80111600D03*
|
||||
X98602800Y-80111600D03*
|
||||
%TD*%
|
||||
D30*
|
||||
%TO.C,F4*%
|
||||
X138887200Y-91992800D03*
|
||||
X138887200Y-94792800D03*
|
||||
%TD*%
|
||||
D41*
|
||||
%TO.C,R3*%
|
||||
X145745200Y-45516800D03*
|
||||
X145745200Y-47341800D03*
|
||||
%TD*%
|
||||
D45*
|
||||
%TO.C,R9*%
|
||||
X141579600Y-59537600D03*
|
||||
X141579600Y-57712600D03*
|
||||
%TD*%
|
||||
D40*
|
||||
%TO.C,C3*%
|
||||
X119842200Y-46329600D03*
|
||||
X119842200Y-48054600D03*
|
||||
%TD*%
|
||||
D45*
|
||||
%TO.C,R10*%
|
||||
X105714800Y-75133200D03*
|
||||
X105714800Y-73308200D03*
|
||||
%TD*%
|
||||
D39*
|
||||
%TO.C,C32*%
|
||||
X136365000Y-109401500D03*
|
||||
X134640000Y-109401500D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,C24*%
|
||||
X111305000Y-90881200D03*
|
||||
X113030000Y-90881200D03*
|
||||
%TD*%
|
||||
D29*
|
||||
%TO.C,D5*%
|
||||
X137178200Y-41757600D03*
|
||||
X141178200Y-41757600D03*
|
||||
%TD*%
|
||||
D38*
|
||||
%TO.C,R17*%
|
||||
X120651900Y-83870800D03*
|
||||
X122476900Y-83870800D03*
|
||||
%TD*%
|
||||
D37*
|
||||
%TO.C,J5*%
|
||||
X147000000Y-114500000D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,C27*%
|
||||
X135095000Y-94923500D03*
|
||||
X136820000Y-94923500D03*
|
||||
%TD*%
|
||||
D39*
|
||||
%TO.C,C17*%
|
||||
X101904800Y-75082400D03*
|
||||
X100179800Y-75082400D03*
|
||||
%TD*%
|
||||
D46*
|
||||
%TO.C,R16*%
|
||||
X118821200Y-83870800D03*
|
||||
X116996200Y-83870800D03*
|
||||
%TD*%
|
||||
%TO.C,R14*%
|
||||
X78598900Y-80860000D03*
|
||||
X76773900Y-80860000D03*
|
||||
%TD*%
|
||||
D41*
|
||||
%TO.C,R4*%
|
||||
X108620400Y-46837600D03*
|
||||
X108620400Y-48662600D03*
|
||||
%TD*%
|
||||
D28*
|
||||
%TO.C,C13*%
|
||||
X134315200Y-67206200D03*
|
||||
X134315200Y-65481200D03*
|
||||
%TD*%
|
||||
D39*
|
||||
%TO.C,C31*%
|
||||
X119865000Y-109401500D03*
|
||||
X118140000Y-109401500D03*
|
||||
%TD*%
|
||||
%TO.C,C22*%
|
||||
X116484400Y-88595200D03*
|
||||
X114759400Y-88595200D03*
|
||||
%TD*%
|
||||
D45*
|
||||
%TO.C,R8*%
|
||||
X108610400Y-59537600D03*
|
||||
X108610400Y-57712600D03*
|
||||
%TD*%
|
||||
D37*
|
||||
%TO.C,J4*%
|
||||
X74000000Y-114500000D03*
|
||||
%TD*%
|
||||
D47*
|
||||
%TO.C,D9*%
|
||||
X134306400Y-75234800D03*
|
||||
D48*
|
||||
X140106400Y-75234800D03*
|
||||
%TD*%
|
||||
D49*
|
||||
%TO.C,C1*%
|
||||
X121925000Y-47345600D03*
|
||||
X121925000Y-45270600D03*
|
||||
%TD*%
|
||||
D46*
|
||||
%TO.C,R13*%
|
||||
X126234200Y-79959200D03*
|
||||
X124409200Y-79959200D03*
|
||||
%TD*%
|
||||
D41*
|
||||
%TO.C,R6*%
|
||||
X112623600Y-56341000D03*
|
||||
X112623600Y-58166000D03*
|
||||
%TD*%
|
||||
D32*
|
||||
%TO.C,C2*%
|
||||
X85369500Y-45960100D03*
|
||||
X85369500Y-48035100D03*
|
||||
%TD*%
|
||||
D45*
|
||||
%TO.C,R5*%
|
||||
X141792800Y-48715300D03*
|
||||
X141792800Y-46890300D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,C26*%
|
||||
X118595000Y-94923500D03*
|
||||
X120320000Y-94923500D03*
|
||||
%TD*%
|
||||
D40*
|
||||
%TO.C,C21*%
|
||||
X98552000Y-84734400D03*
|
||||
X98552000Y-86459400D03*
|
||||
%TD*%
|
||||
D50*
|
||||
%TO.C,C12*%
|
||||
X121673800Y-64363600D03*
|
||||
X123748800Y-64363600D03*
|
||||
%TD*%
|
||||
D47*
|
||||
%TO.C,D7*%
|
||||
X134306400Y-70510400D03*
|
||||
D48*
|
||||
X140106400Y-70510400D03*
|
||||
%TD*%
|
||||
D50*
|
||||
%TO.C,C8*%
|
||||
X119951600Y-52425600D03*
|
||||
X122026600Y-52425600D03*
|
||||
%TD*%
|
||||
D40*
|
||||
%TO.C,C29*%
|
||||
X84500000Y-104700000D03*
|
||||
X84500000Y-106425000D03*
|
||||
%TD*%
|
||||
D33*
|
||||
%TO.C,C23*%
|
||||
X101602200Y-90881200D03*
|
||||
X103327200Y-90881200D03*
|
||||
%TD*%
|
||||
D43*
|
||||
%TO.C,F2*%
|
||||
X103022400Y-57156000D03*
|
||||
X103022400Y-54356000D03*
|
||||
%TD*%
|
||||
D28*
|
||||
%TO.C,C5*%
|
||||
X112328800Y-50749200D03*
|
||||
X112328800Y-49024200D03*
|
||||
%TD*%
|
||||
D45*
|
||||
%TO.C,R7*%
|
||||
X145491200Y-58724800D03*
|
||||
X145491200Y-56899800D03*
|
||||
%TD*%
|
||||
D46*
|
||||
%TO.C,R15*%
|
||||
X126234200Y-81838800D03*
|
||||
X124409200Y-81838800D03*
|
||||
%TD*%
|
||||
D50*
|
||||
%TO.C,C15*%
|
||||
X96629400Y-72186800D03*
|
||||
X98704400Y-72186800D03*
|
||||
%TD*%
|
||||
D29*
|
||||
%TO.C,D4*%
|
||||
X129774600Y-41757600D03*
|
||||
X133774600Y-41757600D03*
|
||||
%TD*%
|
||||
D28*
|
||||
%TO.C,C28*%
|
||||
X84500000Y-98802800D03*
|
||||
X84500000Y-97077800D03*
|
||||
%TD*%
|
||||
D40*
|
||||
%TO.C,C4*%
|
||||
X131780200Y-45821600D03*
|
||||
X131780200Y-47546600D03*
|
||||
%TD*%
|
||||
D37*
|
||||
%TO.C,J2*%
|
||||
X147000000Y-37500000D03*
|
||||
%TD*%
|
||||
D46*
|
||||
%TO.C,R12*%
|
||||
X122881400Y-78333600D03*
|
||||
X121056400Y-78333600D03*
|
||||
%TD*%
|
||||
%TO.C,R18*%
|
||||
X116582200Y-90881200D03*
|
||||
X114757200Y-90881200D03*
|
||||
%TD*%
|
||||
D40*
|
||||
%TO.C,C11*%
|
||||
X141579600Y-54254400D03*
|
||||
X141579600Y-55979400D03*
|
||||
%TD*%
|
||||
D51*
|
||||
%TO.C,Q2*%
|
||||
X80899100Y-54342100D03*
|
||||
X80899100Y-51802100D03*
|
||||
X80899100Y-49262100D03*
|
||||
X80899100Y-46722100D03*
|
||||
%TD*%
|
||||
D52*
|
||||
%TO.C,U13*%
|
||||
X114249200Y-54356000D03*
|
||||
D53*
|
||||
X114249200Y-56896000D03*
|
||||
X114249200Y-59436000D03*
|
||||
X106629200Y-59436000D03*
|
||||
X106629200Y-56896000D03*
|
||||
X106629200Y-54356000D03*
|
||||
%TD*%
|
||||
D54*
|
||||
%TO.C,U11*%
|
||||
X106639200Y-50647600D03*
|
||||
D53*
|
||||
X106639200Y-48107600D03*
|
||||
X106639200Y-45567600D03*
|
||||
X114259200Y-45567600D03*
|
||||
X114259200Y-48107600D03*
|
||||
X114259200Y-50647600D03*
|
||||
%TD*%
|
||||
D52*
|
||||
%TO.C,SW1*%
|
||||
X108805000Y-38585000D03*
|
||||
D53*
|
||||
X101185000Y-38585000D03*
|
||||
%TD*%
|
||||
D51*
|
||||
%TO.C,Q3*%
|
||||
X131973400Y-64363600D03*
|
||||
X131973400Y-61823600D03*
|
||||
X131973400Y-59283600D03*
|
||||
X131973400Y-56743600D03*
|
||||
%TD*%
|
||||
%TO.C,Y1*%
|
||||
X95758000Y-79033200D03*
|
||||
X95758000Y-83913200D03*
|
||||
%TD*%
|
||||
%TO.C,Q7*%
|
||||
X105582000Y-98370900D03*
|
||||
X105582000Y-100910900D03*
|
||||
X105582000Y-103450900D03*
|
||||
X105582000Y-105990900D03*
|
||||
%TD*%
|
||||
D55*
|
||||
%TO.C,Q4*%
|
||||
X82288800Y-97078600D03*
|
||||
X82288800Y-99618600D03*
|
||||
D56*
|
||||
X82288800Y-104698600D03*
|
||||
X82288800Y-109778600D03*
|
||||
%TD*%
|
||||
D52*
|
||||
%TO.C,U12*%
|
||||
X147269200Y-54356000D03*
|
||||
D53*
|
||||
X147269200Y-56896000D03*
|
||||
X147269200Y-59436000D03*
|
||||
X139649200Y-59436000D03*
|
||||
X139649200Y-56896000D03*
|
||||
X139649200Y-54356000D03*
|
||||
%TD*%
|
||||
D51*
|
||||
%TO.C,Q5*%
|
||||
X138582000Y-98370900D03*
|
||||
X138582000Y-100910900D03*
|
||||
X138582000Y-103450900D03*
|
||||
X138582000Y-105990900D03*
|
||||
%TD*%
|
||||
D57*
|
||||
%TO.C,J10*%
|
||||
X77000000Y-85500000D03*
|
||||
X77000000Y-60500000D03*
|
||||
D58*
|
||||
X77300000Y-67460000D03*
|
||||
D53*
|
||||
X77300000Y-70230000D03*
|
||||
X77300000Y-73000000D03*
|
||||
X77300000Y-75770000D03*
|
||||
X77300000Y-78540000D03*
|
||||
X74460000Y-68845000D03*
|
||||
X74460000Y-71615000D03*
|
||||
X74460000Y-74385000D03*
|
||||
X74460000Y-77155000D03*
|
||||
%TD*%
|
||||
D16*
|
||||
%TO.C,J11*%
|
||||
X142317300Y-83241200D03*
|
||||
D17*
|
||||
X142317300Y-80741200D03*
|
||||
X144317300Y-80741200D03*
|
||||
X144317300Y-83241200D03*
|
||||
D59*
|
||||
X147027300Y-75971200D03*
|
||||
X147027300Y-88011200D03*
|
||||
%TD*%
|
||||
D54*
|
||||
%TO.C,U10*%
|
||||
X139760800Y-50698400D03*
|
||||
D53*
|
||||
X139760800Y-48158400D03*
|
||||
X139760800Y-45618400D03*
|
||||
X147380800Y-45618400D03*
|
||||
X147380800Y-48158400D03*
|
||||
X147380800Y-50698400D03*
|
||||
%TD*%
|
||||
D51*
|
||||
%TO.C,Q6*%
|
||||
X122082000Y-98370900D03*
|
||||
X122082000Y-100910900D03*
|
||||
X122082000Y-103450900D03*
|
||||
X122082000Y-105990900D03*
|
||||
%TD*%
|
||||
M02*
|
||||
6880
F3:F303/InterfaceBoard/kicad/gerbers/many485-F_Silkscreen.gbr
Normal file
6880
F3:F303/InterfaceBoard/kicad/gerbers/many485-F_Silkscreen.gbr
Normal file
File diff suppressed because it is too large
Load Diff
34
F3:F303/InterfaceBoard/kicad/gerbers/many485-drl.rpt
Normal file
34
F3:F303/InterfaceBoard/kicad/gerbers/many485-drl.rpt
Normal file
@ -0,0 +1,34 @@
|
||||
Drill report for many485.kicad_pcb
|
||||
Created on 2025-03-21T17:04:16+0300
|
||||
|
||||
Copper Layer Stackup:
|
||||
=============================================================
|
||||
L1 : F.Cu front
|
||||
L2 : B.Cu back
|
||||
|
||||
|
||||
Drill file 'many485.drl' contains
|
||||
plated through holes:
|
||||
=============================================================
|
||||
T1 0.400mm 0.0157" (58 holes)
|
||||
T2 0.600mm 0.0236" (10 holes)
|
||||
T3 0.600mm 0.0236" (4 holes)
|
||||
T4 0.700mm 0.0276" (6 holes)
|
||||
T5 0.800mm 0.0315" (9 holes)
|
||||
T6 0.800mm 0.0315" (48 holes)
|
||||
T7 0.920mm 0.0362" (4 holes)
|
||||
T8 1.000mm 0.0394" (26 holes)
|
||||
T9 1.300mm 0.0512" (20 holes)
|
||||
T10 1.500mm 0.0591" (3 holes)
|
||||
T11 2.330mm 0.0917" (2 holes)
|
||||
T12 3.200mm 0.1260" (2 holes)
|
||||
|
||||
Total plated holes count 192
|
||||
|
||||
|
||||
Not plated through holes are merged with plated holes
|
||||
unplated through holes:
|
||||
=============================================================
|
||||
T13 3.200mm 0.1260" (4 holes)
|
||||
|
||||
Total unplated holes count 4
|
||||
109
F3:F303/InterfaceBoard/kicad/gerbers/many485-job.gbrjob
Normal file
109
F3:F303/InterfaceBoard/kicad/gerbers/many485-job.gbrjob
Normal file
@ -0,0 +1,109 @@
|
||||
{
|
||||
"Header": {
|
||||
"GenerationSoftware": {
|
||||
"Vendor": "KiCad",
|
||||
"Application": "Pcbnew",
|
||||
"Version": "9.0.0"
|
||||
},
|
||||
"CreationDate": "2025-03-21T17:04:22+03:00"
|
||||
},
|
||||
"GeneralSpecs": {
|
||||
"ProjectId": {
|
||||
"Name": "many485",
|
||||
"GUID": "6d616e79-3438-4352-9e6b-696361645f70",
|
||||
"Revision": "rev?"
|
||||
},
|
||||
"Size": {
|
||||
"X": 80.05,
|
||||
"Y": 84.05
|
||||
},
|
||||
"LayerNumber": 2,
|
||||
"BoardThickness": 1.6,
|
||||
"Finish": "HAL SnPb"
|
||||
},
|
||||
"DesignRules": [
|
||||
{
|
||||
"Layers": "Outer",
|
||||
"PadToPad": 0.2,
|
||||
"PadToTrack": 0.2,
|
||||
"TrackToTrack": 0.2,
|
||||
"MinLineWidth": 0.2,
|
||||
"TrackToRegion": 0.2,
|
||||
"RegionToRegion": 0.2
|
||||
}
|
||||
],
|
||||
"FilesAttributes": [
|
||||
{
|
||||
"Path": "many485-F_Cu.gbr",
|
||||
"FileFunction": "Copper,L1,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "many485-B_Cu.gbr",
|
||||
"FileFunction": "Copper,L2,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "many485-F_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Top",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "many485-B_Silkscreen.gbr",
|
||||
"FileFunction": "Legend,Bot",
|
||||
"FilePolarity": "Positive"
|
||||
},
|
||||
{
|
||||
"Path": "many485-F_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Top",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "many485-B_Mask.gbr",
|
||||
"FileFunction": "SolderMask,Bot",
|
||||
"FilePolarity": "Negative"
|
||||
},
|
||||
{
|
||||
"Path": "many485-Edge_Cuts.gbr",
|
||||
"FileFunction": "Profile",
|
||||
"FilePolarity": "Positive"
|
||||
}
|
||||
],
|
||||
"MaterialStackup": [
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Top Silk Screen"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Thickness": 0.01,
|
||||
"Name": "Top Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "F.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "Dielectric",
|
||||
"Thickness": 1.51,
|
||||
"Material": "FR4",
|
||||
"Name": "F.Cu/B.Cu",
|
||||
"Notes": "Type: dielectric layer 1 (from F.Cu to B.Cu)"
|
||||
},
|
||||
{
|
||||
"Type": "Copper",
|
||||
"Thickness": 0.035,
|
||||
"Name": "B.Cu"
|
||||
},
|
||||
{
|
||||
"Type": "SolderMask",
|
||||
"Thickness": 0.01,
|
||||
"Name": "Bottom Solder Mask"
|
||||
},
|
||||
{
|
||||
"Type": "Legend",
|
||||
"Name": "Bottom Silk Screen"
|
||||
}
|
||||
]
|
||||
}
|
||||
247
F3:F303/InterfaceBoard/kicad/gerbers/many485.drl
Normal file
247
F3:F303/InterfaceBoard/kicad/gerbers/many485.drl
Normal file
@ -0,0 +1,247 @@
|
||||
M48
|
||||
; DRILL file {KiCad 9.0.0} date 2025-03-21T17:04:17+0300
|
||||
; FORMAT={-:-/ absolute / metric / decimal}
|
||||
; #@! TF.CreationDate,2025-03-21T17:04:17+03:00
|
||||
; #@! TF.GenerationSoftware,Kicad,Pcbnew,9.0.0
|
||||
; #@! TF.FileFunction,MixedPlating,1,2
|
||||
FMAT,2
|
||||
METRIC
|
||||
; #@! TA.AperFunction,Plated,PTH,ViaDrill
|
||||
T1C0.400
|
||||
; #@! TA.AperFunction,Plated,PTH,ViaDrill
|
||||
T2C0.600
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T3C0.600
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T4C0.700
|
||||
; #@! TA.AperFunction,Plated,PTH,ViaDrill
|
||||
T5C0.800
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T6C0.800
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T7C0.920
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T8C1.000
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T9C1.300
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T10C1.500
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T11C2.330
|
||||
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
|
||||
T12C3.200
|
||||
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
|
||||
T13C3.200
|
||||
%
|
||||
G90
|
||||
G05
|
||||
T1
|
||||
X74.27Y-79.502
|
||||
X81.543Y-69.313
|
||||
X84.277Y-64.701
|
||||
X84.379Y-73.863
|
||||
X91.948Y-74.422
|
||||
X95.148Y-71.882
|
||||
X96.418Y-70.46
|
||||
X98.146Y-88.849
|
||||
X98.146Y-93.116
|
||||
X101.905Y-75.082
|
||||
X102.819Y-82.245
|
||||
X103.2Y-86.639
|
||||
X104.018Y-74.595
|
||||
X104.612Y-91.364
|
||||
X104.648Y-90.17
|
||||
X104.8Y-92.354
|
||||
X105.258Y-79.299
|
||||
X106.926Y-91.364
|
||||
X107.682Y-73.106
|
||||
X109.372Y-91.364
|
||||
X110.425Y-74.473
|
||||
X111.055Y-80.105
|
||||
X111.658Y-76.86
|
||||
X114.148Y-85.141
|
||||
X114.808Y-78.791
|
||||
X115.113Y-95.763
|
||||
X116.388Y-56.236
|
||||
X116.388Y-59.08
|
||||
X116.586Y-77.064
|
||||
X116.637Y-90.881
|
||||
X117.023Y-80.924
|
||||
X117.196Y-95.758
|
||||
X117.483Y-89.811
|
||||
X118.217Y-54.356
|
||||
X118.487Y-43.942
|
||||
X119.786Y-73.2
|
||||
X122.479Y-83.82
|
||||
X123.835Y-73.2
|
||||
X126.294Y-55.372
|
||||
X127.711Y-83.312
|
||||
X127.716Y-56.54
|
||||
X130.307Y-56.744
|
||||
X130.917Y-49.225
|
||||
X131.09Y-51.881
|
||||
X131.775Y-92.1
|
||||
X131.78Y-45.822
|
||||
X133.355Y-50.241
|
||||
X133.355Y-52.07
|
||||
X133.355Y-54.712
|
||||
X133.761Y-47.498
|
||||
X133.775Y-43.942
|
||||
X136.906Y-83.769
|
||||
X136.906Y-88.697
|
||||
X137.622Y-59.08
|
||||
X137.978Y-45.822
|
||||
X137.978Y-48.463
|
||||
X140.056Y-80.874
|
||||
X147.574Y-96.063
|
||||
T2
|
||||
X85.37Y-54.995
|
||||
X95.479Y-55.01
|
||||
X96.629Y-72.187
|
||||
X99.771Y-77.927
|
||||
X111.305Y-90.881
|
||||
X111.506Y-73.05
|
||||
X121.564Y-82.699
|
||||
X131.775Y-97.5
|
||||
X144.17Y-97.333
|
||||
X145.339Y-52.375
|
||||
T3
|
||||
X82.289Y-97.079
|
||||
X82.289Y-99.619
|
||||
X82.289Y-104.699
|
||||
X82.289Y-109.779
|
||||
T4
|
||||
X147.75Y-97.9
|
||||
X147.75Y-99.17
|
||||
X147.75Y-100.44
|
||||
X147.75Y-101.71
|
||||
X147.75Y-102.98
|
||||
X147.75Y-104.25
|
||||
T5
|
||||
X90.932Y-94.894
|
||||
X102.972Y-58.42
|
||||
X106.985Y-94.92
|
||||
X125.324Y-64.364
|
||||
X127.254Y-89.865
|
||||
X127.254Y-94.894
|
||||
X138.684Y-78.283
|
||||
X138.684Y-83.414
|
||||
X140.056Y-77.318
|
||||
T6
|
||||
X80.899Y-46.722
|
||||
X80.899Y-49.262
|
||||
X80.899Y-51.802
|
||||
X80.899Y-54.342
|
||||
X95.758Y-79.033
|
||||
X95.758Y-83.913
|
||||
X101.185Y-38.585
|
||||
X105.582Y-98.371
|
||||
X105.582Y-100.911
|
||||
X105.582Y-103.451
|
||||
X105.582Y-105.991
|
||||
X106.629Y-54.356
|
||||
X106.629Y-56.896
|
||||
X106.629Y-59.436
|
||||
X106.639Y-45.568
|
||||
X106.639Y-48.108
|
||||
X106.639Y-50.648
|
||||
X108.805Y-38.585
|
||||
X114.249Y-54.356
|
||||
X114.249Y-56.896
|
||||
X114.249Y-59.436
|
||||
X114.259Y-45.568
|
||||
X114.259Y-48.108
|
||||
X114.259Y-50.648
|
||||
X122.082Y-98.371
|
||||
X122.082Y-100.911
|
||||
X122.082Y-103.451
|
||||
X122.082Y-105.991
|
||||
X131.973Y-56.744
|
||||
X131.973Y-59.284
|
||||
X131.973Y-61.824
|
||||
X131.973Y-64.364
|
||||
X138.582Y-98.371
|
||||
X138.582Y-100.911
|
||||
X138.582Y-103.451
|
||||
X138.582Y-105.991
|
||||
X139.649Y-54.356
|
||||
X139.649Y-56.896
|
||||
X139.649Y-59.436
|
||||
X139.761Y-45.618
|
||||
X139.761Y-48.158
|
||||
X139.761Y-50.698
|
||||
X147.269Y-54.356
|
||||
X147.269Y-56.896
|
||||
X147.269Y-59.436
|
||||
X147.381Y-45.618
|
||||
X147.381Y-48.158
|
||||
X147.381Y-50.698
|
||||
T7
|
||||
X142.317Y-80.741
|
||||
X142.317Y-83.241
|
||||
X144.317Y-80.741
|
||||
X144.317Y-83.241
|
||||
T8
|
||||
X73.304Y-102.921
|
||||
X73.304Y-105.461
|
||||
X73.304Y-108.001
|
||||
X74.46Y-68.845
|
||||
X74.46Y-71.615
|
||||
X74.46Y-74.385
|
||||
X74.46Y-77.155
|
||||
X77.3Y-67.46
|
||||
X77.3Y-70.23
|
||||
X77.3Y-73.0
|
||||
X77.3Y-75.77
|
||||
X77.3Y-78.54
|
||||
X86.8Y-80.62
|
||||
X86.8Y-83.16
|
||||
X86.8Y-85.7
|
||||
X90.6Y-80.62
|
||||
X90.6Y-83.16
|
||||
X90.6Y-85.7
|
||||
X104.038Y-63.652
|
||||
X104.038Y-66.192
|
||||
X104.038Y-68.732
|
||||
X107.747Y-63.652
|
||||
X107.747Y-66.192
|
||||
X107.747Y-68.732
|
||||
X127.711Y-77.826
|
||||
X130.251Y-77.826
|
||||
T9
|
||||
X86.669Y-38.603
|
||||
X91.669Y-38.603
|
||||
X93.679Y-114.374
|
||||
X96.669Y-38.603
|
||||
X98.679Y-114.374
|
||||
X103.679Y-114.374
|
||||
X110.179Y-114.374
|
||||
X113.487Y-38.084
|
||||
X115.179Y-114.374
|
||||
X118.487Y-38.084
|
||||
X120.179Y-114.374
|
||||
X123.487Y-38.084
|
||||
X126.679Y-114.374
|
||||
X130.487Y-38.084
|
||||
X131.679Y-114.374
|
||||
X135.487Y-38.084
|
||||
X136.679Y-114.374
|
||||
X140.487Y-38.084
|
||||
X144.241Y-65.521
|
||||
X144.241Y-70.521
|
||||
T10
|
||||
X122.631Y-67.767
|
||||
X128.981Y-67.716
|
||||
X129.032Y-73.406
|
||||
T11
|
||||
X147.027Y-75.971
|
||||
X147.027Y-88.011
|
||||
T12
|
||||
X77.0Y-60.5
|
||||
X77.0Y-85.5
|
||||
T13
|
||||
X74.0Y-37.5
|
||||
X74.0Y-114.5
|
||||
X147.0Y-37.5
|
||||
X147.0Y-114.5
|
||||
M30
|
||||
@ -2514,7 +2514,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "Q3"
|
||||
(property "Reference" "Q6"
|
||||
(at 87.63 32.004 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2572,7 +2572,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/b5d3972e-2956-484f-8514-69dcc9a48328"
|
||||
(reference "Q3")
|
||||
(reference "Q6")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/bfb47038-e30b-4456-8a3f-910a2a85c045"
|
||||
@ -2580,7 +2580,7 @@
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/fffbe808-9aec-4c0c-a1ae-7f856729924e"
|
||||
(reference "Q4")
|
||||
(reference "Q7")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -2679,7 +2679,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "J9"
|
||||
(property "Reference" "J13"
|
||||
(at 112.522 54.737 0)
|
||||
(hide yes)
|
||||
(effects
|
||||
@ -2736,15 +2736,15 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/b5d3972e-2956-484f-8514-69dcc9a48328"
|
||||
(reference "J9")
|
||||
(reference "J13")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/bfb47038-e30b-4456-8a3f-910a2a85c045"
|
||||
(reference "J11")
|
||||
(reference "J12")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/fffbe808-9aec-4c0c-a1ae-7f856729924e"
|
||||
(reference "J10")
|
||||
(reference "J14")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -2769,7 +2769,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "D4"
|
||||
(property "Reference" "D11"
|
||||
(at 106.68 68.9059 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2824,15 +2824,15 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/b5d3972e-2956-484f-8514-69dcc9a48328"
|
||||
(reference "D4")
|
||||
(reference "D11")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/bfb47038-e30b-4456-8a3f-910a2a85c045"
|
||||
(reference "D6")
|
||||
(reference "D12")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/fffbe808-9aec-4c0c-a1ae-7f856729924e"
|
||||
(reference "D5")
|
||||
(reference "D10")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -2856,7 +2856,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C15"
|
||||
(property "Reference" "C26"
|
||||
(at 71.882 42.926 90)
|
||||
(effects
|
||||
(font
|
||||
@ -2908,15 +2908,15 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/b5d3972e-2956-484f-8514-69dcc9a48328"
|
||||
(reference "C15")
|
||||
(reference "C26")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/bfb47038-e30b-4456-8a3f-910a2a85c045"
|
||||
(reference "C19")
|
||||
(reference "C27")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/fffbe808-9aec-4c0c-a1ae-7f856729924e"
|
||||
(reference "C17")
|
||||
(reference "C25")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -2940,7 +2940,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C16"
|
||||
(property "Reference" "C31"
|
||||
(at 92.71 42.672 90)
|
||||
(effects
|
||||
(font
|
||||
@ -2992,15 +2992,15 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/b5d3972e-2956-484f-8514-69dcc9a48328"
|
||||
(reference "C16")
|
||||
(reference "C31")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/bfb47038-e30b-4456-8a3f-910a2a85c045"
|
||||
(reference "C20")
|
||||
(reference "C32")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/fffbe808-9aec-4c0c-a1ae-7f856729924e"
|
||||
(reference "C18")
|
||||
(reference "C30")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3316,7 +3316,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "F2"
|
||||
(property "Reference" "F5"
|
||||
(at 66.04 24.638 90)
|
||||
(effects
|
||||
(font
|
||||
@ -3368,7 +3368,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/b5d3972e-2956-484f-8514-69dcc9a48328"
|
||||
(reference "F2")
|
||||
(reference "F5")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/bfb47038-e30b-4456-8a3f-910a2a85c045"
|
||||
@ -3376,7 +3376,7 @@
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/fffbe808-9aec-4c0c-a1ae-7f856729924e"
|
||||
(reference "F3")
|
||||
(reference "F6")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3400,7 +3400,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "U5"
|
||||
(property "Reference" "U8"
|
||||
(at 82.55 81.026 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3494,15 +3494,15 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/b5d3972e-2956-484f-8514-69dcc9a48328"
|
||||
(reference "U5")
|
||||
(reference "U8")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/bfb47038-e30b-4456-8a3f-910a2a85c045"
|
||||
(reference "U7")
|
||||
(reference "U9")
|
||||
(unit 1)
|
||||
)
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/fffbe808-9aec-4c0c-a1ae-7f856729924e"
|
||||
(reference "U6")
|
||||
(reference "U7")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
|
||||
@ -2993,7 +2993,7 @@
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
(uuid 103a2417-6fff-4cc9-8ab9-5641d2040bb0)
|
||||
(uuid 2c77174d-460a-4632-bbc3-7422e7ac41dd)
|
||||
)
|
||||
)
|
||||
(rule_area
|
||||
@ -3008,7 +3008,7 @@
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
(uuid 231f811b-5580-44a1-9ba4-e1d0a99fc714)
|
||||
(uuid 3a54936f-ef7a-406f-b547-be0014c4e8b4)
|
||||
)
|
||||
)
|
||||
(rule_area
|
||||
@ -3023,7 +3023,7 @@
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
(uuid 3664e9b1-e927-4361-bee0-c1ef36171826)
|
||||
(uuid 44a181d1-bbdd-433d-b616-e76f800b36ce)
|
||||
)
|
||||
)
|
||||
(rule_area
|
||||
@ -3038,7 +3038,7 @@
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
(uuid fa614249-f536-42fa-9f52-dbaf89ecb1fd)
|
||||
(uuid fb1e507b-fb0c-42be-a78a-e864048b2e44)
|
||||
)
|
||||
)
|
||||
(netclass_flag ""
|
||||
@ -3241,7 +3241,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "05ccee90-29b2-4db3-963c-1b081ed09119")
|
||||
(property "Reference" "R14"
|
||||
(property "Reference" "R5"
|
||||
(at 67.31 74.93 90)
|
||||
(effects
|
||||
(font
|
||||
@ -3293,7 +3293,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "R14")
|
||||
(reference "R5")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3308,7 +3308,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "08d254f7-1d7f-4956-b234-7b1e1522ede8")
|
||||
(property "Reference" "R12"
|
||||
(property "Reference" "R3"
|
||||
(at 45.72 71.12 90)
|
||||
(effects
|
||||
(font
|
||||
@ -3360,7 +3360,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "R12")
|
||||
(reference "R3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3375,7 +3375,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "124b9b22-424b-4144-96ae-48b8f118a6e3")
|
||||
(property "Reference" "D7"
|
||||
(property "Reference" "D5"
|
||||
(at 154.94 74.93 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3427,7 +3427,7 @@
|
||||
(instances
|
||||
(project ""
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "D7")
|
||||
(reference "D5")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3509,7 +3509,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "17931c8c-112a-427a-bab0-fd270d06a226")
|
||||
(property "Reference" "C24"
|
||||
(property "Reference" "C5"
|
||||
(at 68.961 121.9778 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3563,7 +3563,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "C24")
|
||||
(reference "C5")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3578,7 +3578,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "28687f10-65c0-46bb-b3f4-a4bf3da4d39c")
|
||||
(property "Reference" "R11"
|
||||
(property "Reference" "R4"
|
||||
(at 44.45 115.57 90)
|
||||
(effects
|
||||
(font
|
||||
@ -3630,7 +3630,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "R11")
|
||||
(reference "R4")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3646,7 +3646,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "3541e9c5-05ce-41bb-98b4-0ce0715e62b6")
|
||||
(property "Reference" "C26"
|
||||
(property "Reference" "C4"
|
||||
(at 129.921 97.8478 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3700,7 +3700,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "C26")
|
||||
(reference "C4")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3716,7 +3716,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "395292d1-ea6c-41b5-99ba-1fe9404cbc52")
|
||||
(property "Reference" "U9"
|
||||
(property "Reference" "U10"
|
||||
(at 58.9981 84.1545 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3782,7 +3782,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "U9")
|
||||
(reference "U10")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3863,7 +3863,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "3d99149f-b9dd-441e-858f-6ca1e3fd7912")
|
||||
(property "Reference" "R15"
|
||||
(property "Reference" "R6"
|
||||
(at 67.31 142.24 90)
|
||||
(effects
|
||||
(font
|
||||
@ -3915,7 +3915,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "R15")
|
||||
(reference "R6")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3931,7 +3931,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "43a5a675-f3b1-4f64-9783-3f2ce6d182ae")
|
||||
(property "Reference" "C29"
|
||||
(property "Reference" "C8"
|
||||
(at 156.591 57.2078 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3985,7 +3985,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "C29")
|
||||
(reference "C8")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4067,7 +4067,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "4c6e67a8-028a-4977-9501-4b581cb6c2cc")
|
||||
(property "Reference" "C22"
|
||||
(property "Reference" "C10"
|
||||
(at 48.641 152.4578 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4121,7 +4121,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "C22")
|
||||
(reference "C10")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4136,7 +4136,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "512c0f2e-c699-4c43-9d7d-057647bb5647")
|
||||
(property "Reference" "D9"
|
||||
(property "Reference" "D4"
|
||||
(at 162.56 74.93 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4188,7 +4188,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "D9")
|
||||
(reference "D4")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4212,7 +4212,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "Q6"
|
||||
(property "Reference" "Q3"
|
||||
(at 64.77 29.464 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4270,7 +4270,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "Q6")
|
||||
(reference "Q3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4286,7 +4286,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "87356dc0-eafb-4fbb-9ad2-03a82db05108")
|
||||
(property "Reference" "U11"
|
||||
(property "Reference" "U13"
|
||||
(at 58.9981 151.4645 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4352,7 +4352,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "U11")
|
||||
(reference "U13")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4377,7 +4377,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "J12"
|
||||
(property "Reference" "J6"
|
||||
(at 182.753 64.643 0)
|
||||
(hide yes)
|
||||
(effects
|
||||
@ -4434,7 +4434,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "J12")
|
||||
(reference "J6")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4450,7 +4450,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "8ddef0f4-2582-4f32-88c0-69002e1ca640")
|
||||
(property "Reference" "U8"
|
||||
(property "Reference" "U12"
|
||||
(at 64.8267 42.0134 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4514,7 +4514,7 @@
|
||||
(instances
|
||||
(project ""
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "U8")
|
||||
(reference "U12")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4530,7 +4530,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "8f0a0d80-d45a-4273-92c9-73302790568d")
|
||||
(property "Reference" "C27"
|
||||
(property "Reference" "C6"
|
||||
(at 143.891 44.5078 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4584,7 +4584,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "C27")
|
||||
(reference "C6")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4609,7 +4609,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "J13"
|
||||
(property "Reference" "J7"
|
||||
(at 182.753 81.153 0)
|
||||
(hide yes)
|
||||
(effects
|
||||
@ -4666,7 +4666,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "J13")
|
||||
(reference "J7")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4681,7 +4681,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "9480e103-83af-4b03-a34a-10f90025c87f")
|
||||
(property "Reference" "R10"
|
||||
(property "Reference" "R7"
|
||||
(at 44.45 48.26 90)
|
||||
(effects
|
||||
(font
|
||||
@ -4733,7 +4733,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "R10")
|
||||
(reference "R7")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4757,7 +4757,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "F5"
|
||||
(property "Reference" "F2"
|
||||
(at 43.18 22.098 90)
|
||||
(effects
|
||||
(font
|
||||
@ -4809,7 +4809,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "F5")
|
||||
(reference "F2")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4824,7 +4824,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "a2705472-077c-4c1f-ab79-d5a02debbeb6")
|
||||
(property "Reference" "D8"
|
||||
(property "Reference" "D3"
|
||||
(at 154.94 91.44 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4876,7 +4876,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "D8")
|
||||
(reference "D3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4891,7 +4891,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "a683a121-e096-4ec0-ad2d-995dad386c8f")
|
||||
(property "Reference" "C28"
|
||||
(property "Reference" "C1"
|
||||
(at 144.78 50.8 90)
|
||||
(effects
|
||||
(font
|
||||
@ -4943,7 +4943,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "C28")
|
||||
(reference "C1")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4958,7 +4958,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "b0c6de04-4993-44dd-95eb-b4b2d9b73d34")
|
||||
(property "Reference" "R16"
|
||||
(property "Reference" "R9"
|
||||
(at 72.39 44.45 90)
|
||||
(effects
|
||||
(font
|
||||
@ -5010,7 +5010,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "R16")
|
||||
(reference "R9")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -5025,7 +5025,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "b5607b3e-ae02-4929-9517-b63ee79649df")
|
||||
(property "Reference" "R17"
|
||||
(property "Reference" "R2"
|
||||
(at 72.39 111.76 90)
|
||||
(effects
|
||||
(font
|
||||
@ -5077,7 +5077,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "R17")
|
||||
(reference "R2")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -5093,7 +5093,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "b7a23b58-b8b8-476f-91a3-d915c7f7d9bb")
|
||||
(property "Reference" "C21"
|
||||
(property "Reference" "C7"
|
||||
(at 48.641 85.1478 0)
|
||||
(effects
|
||||
(font
|
||||
@ -5147,7 +5147,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "C21")
|
||||
(reference "C7")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -5162,7 +5162,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "b8ce1f7c-49f7-4aa7-912b-37a3e53feb5f")
|
||||
(property "Reference" "D10"
|
||||
(property "Reference" "D2"
|
||||
(at 162.56 91.44 0)
|
||||
(effects
|
||||
(font
|
||||
@ -5214,7 +5214,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "D10")
|
||||
(reference "D2")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -5295,7 +5295,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "c613aea0-c1ed-4ef2-90e2-5631bffeb3fe")
|
||||
(property "Reference" "C25"
|
||||
(property "Reference" "C3"
|
||||
(at 95.25 43.18 0)
|
||||
(effects
|
||||
(font
|
||||
@ -5349,7 +5349,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "C25")
|
||||
(reference "C3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -5432,7 +5432,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "d68d26a5-1443-4897-bdf0-212a13e6781c")
|
||||
(property "Reference" "C23"
|
||||
(property "Reference" "C11"
|
||||
(at 68.961 54.6678 0)
|
||||
(effects
|
||||
(font
|
||||
@ -5486,7 +5486,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "C23")
|
||||
(reference "C11")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -5502,7 +5502,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "dcd72609-0b6b-4b9d-9ad1-656dd968d1f3")
|
||||
(property "Reference" "U10"
|
||||
(property "Reference" "U11"
|
||||
(at 64.8267 109.3234 0)
|
||||
(effects
|
||||
(font
|
||||
@ -5566,7 +5566,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "U10")
|
||||
(reference "U11")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -5581,7 +5581,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "e21333f0-4ec0-4a51-881f-e54a44772181")
|
||||
(property "Reference" "R13"
|
||||
(property "Reference" "R8"
|
||||
(at 45.72 138.43 90)
|
||||
(effects
|
||||
(font
|
||||
@ -5633,7 +5633,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "R13")
|
||||
(reference "R8")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -5714,7 +5714,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "f4439364-22c5-4ef1-8ce4-5030b825e632")
|
||||
(property "Reference" "U12"
|
||||
(property "Reference" "U2"
|
||||
(at 122.7933 35.2255 0)
|
||||
(effects
|
||||
(font
|
||||
@ -5811,7 +5811,7 @@
|
||||
(instances
|
||||
(project ""
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/8303fa26-68ce-4671-900d-4c072b8eabbd"
|
||||
(reference "U12")
|
||||
(reference "U2")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
||||
{
|
||||
"board": {
|
||||
"active_layer": 17,
|
||||
"active_layer_preset": "",
|
||||
"active_layer": 7,
|
||||
"active_layer_preset": "All Layers",
|
||||
"auto_track_width": false,
|
||||
"hidden_netclasses": [],
|
||||
"hidden_nets": [],
|
||||
@ -50,7 +50,7 @@
|
||||
"conflict_shadows",
|
||||
"shapes"
|
||||
],
|
||||
"visible_layers": "00000000_00000000_0fffffff_ffffffff",
|
||||
"visible_layers": "ffffffff_ffffffff_ffffffff_ffffffff",
|
||||
"zone_display_mode": 1
|
||||
},
|
||||
"git": {
|
||||
|
||||
@ -100,7 +100,7 @@
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
"shorting_items": "error",
|
||||
"silk_edge_clearance": "warning",
|
||||
"silk_edge_clearance": "ignore",
|
||||
"silk_over_copper": "warning",
|
||||
"silk_overlap": "warning",
|
||||
"skew_out_of_range": "error",
|
||||
@ -124,7 +124,7 @@
|
||||
"rules": {
|
||||
"max_error": 0.005,
|
||||
"min_clearance": 0.2,
|
||||
"min_connection": 0.3,
|
||||
"min_connection": 0.2,
|
||||
"min_copper_edge_clearance": 1.0,
|
||||
"min_groove_width": 0.0,
|
||||
"min_hole_clearance": 0.25,
|
||||
@ -527,7 +527,7 @@
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"plot": "gerbers/",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
|
||||
@ -6595,7 +6595,7 @@
|
||||
)
|
||||
(text "Isolated RS-485"
|
||||
(exclude_from_sim no)
|
||||
(at 210.82 62.23 0)
|
||||
(at 212.09 59.69 0)
|
||||
(effects
|
||||
(font
|
||||
(size 3 3)
|
||||
@ -6626,6 +6626,16 @@
|
||||
)
|
||||
(uuid "2be62749-a8d4-4077-8133-ee76a242a624")
|
||||
)
|
||||
(text "485-3"
|
||||
(exclude_from_sim no)
|
||||
(at 236.22 63.5 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
(uuid "32dd2124-a234-47b1-a7b4-d29cce9a3c39")
|
||||
)
|
||||
(text "Disable UART5 interface and\nenable config interface"
|
||||
(exclude_from_sim no)
|
||||
(at 81.28 76.2 0)
|
||||
@ -6636,6 +6646,16 @@
|
||||
)
|
||||
(uuid "34a72b11-d900-41d0-8a6c-620922c74423")
|
||||
)
|
||||
(text "485-2"
|
||||
(exclude_from_sim no)
|
||||
(at 207.01 63.5 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
(uuid "4333821f-7185-4926-8281-d8806ee6b3d2")
|
||||
)
|
||||
(text "Isolated RS-232 and RS-422/SSI"
|
||||
(exclude_from_sim no)
|
||||
(at 193.04 92.71 0)
|
||||
@ -6658,6 +6678,16 @@
|
||||
)
|
||||
(uuid "8aa7ac0c-b562-4205-b305-9e29330a9ea5")
|
||||
)
|
||||
(text "485-1"
|
||||
(exclude_from_sim no)
|
||||
(at 266.7 63.5 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
(uuid "daae7ead-cccb-4cc5-a99b-d19a0baf55b6")
|
||||
)
|
||||
(text "External 5V"
|
||||
(exclude_from_sim no)
|
||||
(at 21.59 85.09 0)
|
||||
@ -8432,7 +8462,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C6"
|
||||
(property "Reference" "C23"
|
||||
(at 137.795 21.59 0)
|
||||
(effects
|
||||
(font
|
||||
@ -8485,7 +8515,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C6")
|
||||
(reference "C23")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -8509,7 +8539,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "D3"
|
||||
(property "Reference" "D1"
|
||||
(at 252.73 36.83 0)
|
||||
(effects
|
||||
(font
|
||||
@ -8563,7 +8593,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "D3")
|
||||
(reference "D1")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -8587,7 +8617,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "R9"
|
||||
(property "Reference" "R1"
|
||||
(at 255.905 45.212 90)
|
||||
(effects
|
||||
(font
|
||||
@ -8638,7 +8668,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "R9")
|
||||
(reference "R1")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -8662,7 +8692,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C7"
|
||||
(property "Reference" "C17"
|
||||
(at 142.875 21.59 0)
|
||||
(effects
|
||||
(font
|
||||
@ -8715,7 +8745,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C7")
|
||||
(reference "C17")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -8739,7 +8769,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C10"
|
||||
(property "Reference" "C18"
|
||||
(at 147.955 21.59 0)
|
||||
(effects
|
||||
(font
|
||||
@ -8792,7 +8822,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C10")
|
||||
(reference "C18")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -8816,7 +8846,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C11"
|
||||
(property "Reference" "C24"
|
||||
(at 153.035 21.59 0)
|
||||
(effects
|
||||
(font
|
||||
@ -8869,7 +8899,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C11")
|
||||
(reference "C24")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -8975,7 +9005,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C2"
|
||||
(property "Reference" "C16"
|
||||
(at 48.514 65.278 0)
|
||||
(effects
|
||||
(font
|
||||
@ -9029,7 +9059,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C2")
|
||||
(reference "C16")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -9054,7 +9084,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "SW3"
|
||||
(property "Reference" "SW1"
|
||||
(at 244.475 39.624 0)
|
||||
(effects
|
||||
(font
|
||||
@ -9107,7 +9137,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "SW3")
|
||||
(reference "SW1")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -9196,7 +9226,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C1"
|
||||
(property "Reference" "C13"
|
||||
(at 30.48 72.39 0)
|
||||
(effects
|
||||
(font
|
||||
@ -9250,7 +9280,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C1")
|
||||
(reference "C13")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -9274,7 +9304,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C14"
|
||||
(property "Reference" "C2"
|
||||
(at 236.855 25.4 0)
|
||||
(effects
|
||||
(font
|
||||
@ -9327,7 +9357,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C14")
|
||||
(reference "C2")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -9351,7 +9381,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C13"
|
||||
(property "Reference" "C9"
|
||||
(at 191.643 25.654 0)
|
||||
(effects
|
||||
(font
|
||||
@ -9404,7 +9434,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C13")
|
||||
(reference "C9")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -9493,7 +9523,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "R7"
|
||||
(property "Reference" "R10"
|
||||
(at 112.268 39.751 90)
|
||||
(effects
|
||||
(font
|
||||
@ -9547,7 +9577,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "R7")
|
||||
(reference "R10")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -9571,7 +9601,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "TP3"
|
||||
(property "Reference" "TP1"
|
||||
(at 49.784 58.42 0)
|
||||
(effects
|
||||
(font
|
||||
@ -9590,7 +9620,7 @@
|
||||
(justify left)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_Vertical"
|
||||
(property "Footprint" "TestPoint:TestPoint_Loop_D2.54mm_Drill1.5mm_Beaded"
|
||||
(at 55.88 63.5 0)
|
||||
(hide yes)
|
||||
(effects
|
||||
@ -9623,7 +9653,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "TP3")
|
||||
(reference "TP1")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -9912,7 +9942,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "0ede5b00-8443-4886-94e3-845509671979")
|
||||
(property "Reference" "J1"
|
||||
(property "Reference" "J9"
|
||||
(at 21.59 73.2099 0)
|
||||
(effects
|
||||
(font
|
||||
@ -9965,7 +9995,7 @@
|
||||
(instances
|
||||
(project ""
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "J1")
|
||||
(reference "J9")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -9980,7 +10010,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "0fd87c97-8042-4653-abdd-7019b1430685")
|
||||
(property "Reference" "J2"
|
||||
(property "Reference" "J11"
|
||||
(at 28.956 19.05 0)
|
||||
(effects
|
||||
(font
|
||||
@ -10043,7 +10073,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "J2")
|
||||
(reference "J11")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -10067,7 +10097,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "R8"
|
||||
(property "Reference" "R11"
|
||||
(at 152.4 181.61 90)
|
||||
(effects
|
||||
(font
|
||||
@ -10121,7 +10151,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "R8")
|
||||
(reference "R11")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -10203,7 +10233,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "1f78beac-0b93-4bda-91e1-fbc2bd00b13b")
|
||||
(property "Reference" "JP3"
|
||||
(property "Reference" "JP1"
|
||||
(at 208.28 118.11 90)
|
||||
(effects
|
||||
(font
|
||||
@ -10261,7 +10291,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "JP3")
|
||||
(reference "JP1")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -10277,7 +10307,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "2483f366-1b07-4cf4-8072-10d8dd70842e")
|
||||
(property "Reference" "JP4"
|
||||
(property "Reference" "JP5"
|
||||
(at 250.19 96.52 0)
|
||||
(effects
|
||||
(font
|
||||
@ -10333,7 +10363,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "JP4")
|
||||
(reference "JP5")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -10572,7 +10602,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "2ae238d6-ef21-4cc8-b5d5-469a8d1f1f24")
|
||||
(property "Reference" "J7"
|
||||
(property "Reference" "J5"
|
||||
(at 249.555 224.3793 0)
|
||||
(effects
|
||||
(font
|
||||
@ -10621,7 +10651,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "J7")
|
||||
(reference "J5")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -11030,7 +11060,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "40c960cb-c328-44d2-994e-f02f460cb027")
|
||||
(property "Reference" "JP5"
|
||||
(property "Reference" "JP4"
|
||||
(at 250.19 114.8523 0)
|
||||
(effects
|
||||
(font
|
||||
@ -11086,7 +11116,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "JP5")
|
||||
(reference "JP4")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -11102,7 +11132,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "4bd6b342-57bc-4bc2-b68f-c1bdf6da5483")
|
||||
(property "Reference" "J5"
|
||||
(property "Reference" "J1"
|
||||
(at 241.935 224.3793 0)
|
||||
(effects
|
||||
(font
|
||||
@ -11151,7 +11181,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "J5")
|
||||
(reference "J1")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -11232,7 +11262,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "5a0fe310-84a9-4940-b321-708bd8fce0ae")
|
||||
(property "Reference" "R3"
|
||||
(property "Reference" "R12"
|
||||
(at 66.04 27.94 90)
|
||||
(effects
|
||||
(font
|
||||
@ -11284,7 +11314,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "R3")
|
||||
(reference "R12")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -11309,7 +11339,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "SW1"
|
||||
(property "Reference" "SW4"
|
||||
(at 125.095 174.3512 0)
|
||||
(effects
|
||||
(font
|
||||
@ -11362,7 +11392,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "SW1")
|
||||
(reference "SW4")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -11386,7 +11416,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C9"
|
||||
(property "Reference" "C22"
|
||||
(at 141.605 183.896 90)
|
||||
(effects
|
||||
(font
|
||||
@ -11439,7 +11469,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C9")
|
||||
(reference "C22")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -11454,7 +11484,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "66d1bb86-db65-44a6-9fc0-e211f9c84fad")
|
||||
(property "Reference" "U3"
|
||||
(property "Reference" "U6"
|
||||
(at 138.43 59.69 0)
|
||||
(effects
|
||||
(font
|
||||
@ -11715,7 +11745,7 @@
|
||||
(instances
|
||||
(project ""
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "U3")
|
||||
(reference "U6")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -11739,7 +11769,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C5"
|
||||
(property "Reference" "C19"
|
||||
(at 130.81 148.59 0)
|
||||
(effects
|
||||
(font
|
||||
@ -11793,7 +11823,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C5")
|
||||
(reference "C19")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -11950,7 +11980,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "7a69a491-81a3-448f-9f20-eef4429a67c7")
|
||||
(property "Reference" "R1"
|
||||
(property "Reference" "R13"
|
||||
(at 40.64 28.448 90)
|
||||
(effects
|
||||
(font
|
||||
@ -12002,7 +12032,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "R1")
|
||||
(reference "R13")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12026,7 +12056,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "TP2"
|
||||
(property "Reference" "TP3"
|
||||
(at 49.2306 76.2 0)
|
||||
(effects
|
||||
(font
|
||||
@ -12045,7 +12075,7 @@
|
||||
(justify left)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_Vertical"
|
||||
(property "Footprint" "TestPoint:TestPoint_Loop_D2.54mm_Drill1.5mm_Beaded"
|
||||
(at 43.1346 71.12 0)
|
||||
(hide yes)
|
||||
(effects
|
||||
@ -12078,7 +12108,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "TP2")
|
||||
(reference "TP3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12102,7 +12132,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "R6"
|
||||
(property "Reference" "R18"
|
||||
(at 112.268 34.671 90)
|
||||
(effects
|
||||
(font
|
||||
@ -12156,7 +12186,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "R6")
|
||||
(reference "R18")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12171,7 +12201,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "7cef338f-63e5-4ea6-affb-92de077df231")
|
||||
(property "Reference" "R2"
|
||||
(property "Reference" "R15"
|
||||
(at 41.021 35.052 90)
|
||||
(effects
|
||||
(font
|
||||
@ -12223,7 +12253,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "R2")
|
||||
(reference "R15")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12304,7 +12334,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "906d6d88-74f6-46a5-9e3d-c80a83d789f2")
|
||||
(property "Reference" "R5"
|
||||
(property "Reference" "R16"
|
||||
(at 85.852 41.91 0)
|
||||
(effects
|
||||
(font
|
||||
@ -12356,7 +12386,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "R5")
|
||||
(reference "R16")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12380,7 +12410,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "U1"
|
||||
(property "Reference" "U4"
|
||||
(at 40.64 59.69 0)
|
||||
(effects
|
||||
(font
|
||||
@ -12435,7 +12465,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "U1")
|
||||
(reference "U4")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12524,7 +12554,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C3"
|
||||
(property "Reference" "C12"
|
||||
(at 56.134 65.278 0)
|
||||
(effects
|
||||
(font
|
||||
@ -12578,7 +12608,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C3")
|
||||
(reference "C12")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12667,7 +12697,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "9be66433-ec9c-4b28-8df4-3bb35a6d51dd")
|
||||
(property "Reference" "R4"
|
||||
(property "Reference" "R17"
|
||||
(at 78.74 35.814 90)
|
||||
(effects
|
||||
(font
|
||||
@ -12719,7 +12749,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "R4")
|
||||
(reference "R17")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12735,7 +12765,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "a5d87aeb-fe76-4d5d-b3bf-ae96ec06b8f4")
|
||||
(property "Reference" "JP1"
|
||||
(property "Reference" "JP3"
|
||||
(at 99.06 74.0989 0)
|
||||
(effects
|
||||
(font
|
||||
@ -12788,7 +12818,7 @@
|
||||
(instances
|
||||
(project ""
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "JP1")
|
||||
(reference "JP3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12883,7 +12913,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "TP1"
|
||||
(property "Reference" "TP2"
|
||||
(at 21.59 64.516 0)
|
||||
(effects
|
||||
(font
|
||||
@ -12902,7 +12932,7 @@
|
||||
(justify left)
|
||||
)
|
||||
)
|
||||
(property "Footprint" "Connector_PinSocket_2.54mm:PinSocket_1x01_P2.54mm_Vertical"
|
||||
(property "Footprint" "TestPoint:TestPoint_Loop_D2.54mm_Drill1.5mm_Beaded"
|
||||
(at 26.67 58.42 0)
|
||||
(hide yes)
|
||||
(effects
|
||||
@ -12935,7 +12965,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "TP1")
|
||||
(reference "TP2")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -12959,7 +12989,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C12"
|
||||
(property "Reference" "C21"
|
||||
(at 158.115 21.59 0)
|
||||
(effects
|
||||
(font
|
||||
@ -13012,7 +13042,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C12")
|
||||
(reference "C21")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -13174,7 +13204,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "c2bd4f9a-6318-41f3-aa2a-31ce0cad8986")
|
||||
(property "Reference" "D1"
|
||||
(property "Reference" "D9"
|
||||
(at 28.702 56.2553 90)
|
||||
(effects
|
||||
(font
|
||||
@ -13228,7 +13258,7 @@
|
||||
(instances
|
||||
(project ""
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "D1")
|
||||
(reference "D9")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -13385,7 +13415,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "U4"
|
||||
(property "Reference" "U1"
|
||||
(at 217.17 17.8902 0)
|
||||
(effects
|
||||
(font
|
||||
@ -13456,7 +13486,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "U4")
|
||||
(reference "U1")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -13668,7 +13698,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "d63a81b2-2248-494f-bb1e-a367d05b0665")
|
||||
(property "Reference" "U2"
|
||||
(property "Reference" "U5"
|
||||
(at 52.07 26.67 0)
|
||||
(effects
|
||||
(font
|
||||
@ -13732,7 +13762,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "U2")
|
||||
(reference "U5")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -13756,7 +13786,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C8"
|
||||
(property "Reference" "C20"
|
||||
(at 144.145 148.59 0)
|
||||
(effects
|
||||
(font
|
||||
@ -13810,7 +13840,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "C8")
|
||||
(reference "C20")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -13956,7 +13986,7 @@
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "f4d92f56-b789-4ad9-96ac-95d41744d0b3")
|
||||
(property "Reference" "D2"
|
||||
(property "Reference" "D7"
|
||||
(at 21.59 69.85 90)
|
||||
(effects
|
||||
(font
|
||||
@ -14010,7 +14040,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "D2")
|
||||
(reference "D7")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -14026,7 +14056,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "f86ffd48-3091-4721-9345-76510f987d43")
|
||||
(property "Reference" "J6"
|
||||
(property "Reference" "J4"
|
||||
(at 249.555 218.0293 0)
|
||||
(effects
|
||||
(font
|
||||
@ -14075,7 +14105,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "J6")
|
||||
(reference "J4")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -14100,7 +14130,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "SW2"
|
||||
(property "Reference" "SW3"
|
||||
(at 143.51 174.9862 0)
|
||||
(effects
|
||||
(font
|
||||
@ -14153,7 +14183,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "SW2")
|
||||
(reference "SW3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -14169,7 +14199,7 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "fb0c4df2-11af-4b87-9621-5a94e896a9a2")
|
||||
(property "Reference" "J4"
|
||||
(property "Reference" "J2"
|
||||
(at 241.935 218.0293 0)
|
||||
(effects
|
||||
(font
|
||||
@ -14218,7 +14248,7 @@
|
||||
(instances
|
||||
(project ""
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91"
|
||||
(reference "J4")
|
||||
(reference "J2")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
|
||||
2161
F3:F303/InterfaceBoard/kicad/my_footprints.pretty/QR.kicad_mod
Normal file
2161
F3:F303/InterfaceBoard/kicad/my_footprints.pretty/QR.kicad_mod
Normal file
File diff suppressed because it is too large
Load Diff
BIN
F3:F303/InterfaceBoard/kicad/my_footprints.pretty/QR.png
Normal file
BIN
F3:F303/InterfaceBoard/kicad/my_footprints.pretty/QR.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 710 B |
@ -2924,7 +2924,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C30"
|
||||
(property "Reference" "C28"
|
||||
(at 101.6 63.754 90)
|
||||
(effects
|
||||
(font
|
||||
@ -2976,7 +2976,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "C30")
|
||||
(reference "C28")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3000,7 +3000,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "U13"
|
||||
(property "Reference" "U3"
|
||||
(at 117.094 56.896 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3096,7 +3096,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "U13")
|
||||
(reference "U3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3120,7 +3120,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "R18"
|
||||
(property "Reference" "R14"
|
||||
(at 142.748 52.324 90)
|
||||
(effects
|
||||
(font
|
||||
@ -3174,7 +3174,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "R18")
|
||||
(reference "R14")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3328,7 +3328,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C33"
|
||||
(property "Reference" "C14"
|
||||
(at 194.31 48.26 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3382,7 +3382,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "C33")
|
||||
(reference "C14")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3407,7 +3407,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "D12"
|
||||
(property "Reference" "D6"
|
||||
(at 148.59 75.8909 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3462,7 +3462,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "D12")
|
||||
(reference "D6")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3557,7 +3557,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C32"
|
||||
(property "Reference" "C15"
|
||||
(at 173.736 48.006 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3611,7 +3611,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "C32")
|
||||
(reference "C15")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3635,7 +3635,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "F6"
|
||||
(property "Reference" "F3"
|
||||
(at 168.91 53.848 90)
|
||||
(effects
|
||||
(font
|
||||
@ -3687,7 +3687,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "F6")
|
||||
(reference "F3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3777,7 +3777,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "C31"
|
||||
(property "Reference" "C29"
|
||||
(at 130.81 96.52 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3829,7 +3829,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "C31")
|
||||
(reference "C29")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3988,7 +3988,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "Q7"
|
||||
(property "Reference" "Q4"
|
||||
(at 182.88 40.4325 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4046,7 +4046,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "Q7")
|
||||
(reference "Q4")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4071,7 +4071,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "D11"
|
||||
(property "Reference" "D8"
|
||||
(at 148.59 61.9209 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4126,7 +4126,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "D11")
|
||||
(reference "D8")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4151,7 +4151,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "SW4"
|
||||
(property "Reference" "SW2"
|
||||
(at 139.7 54.3362 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4204,7 +4204,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "SW4")
|
||||
(reference "SW2")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -4229,7 +4229,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Reference" "J14"
|
||||
(property "Reference" "J10"
|
||||
(at 196.85 67.31 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4237,7 +4237,7 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Value" "SSI{slash}422"
|
||||
(property "Value" "SSI/422"
|
||||
(at 191.516 94.869 0)
|
||||
(effects
|
||||
(font
|
||||
@ -4305,7 +4305,7 @@
|
||||
(instances
|
||||
(project "many485"
|
||||
(path "/8d999898-5824-4200-a5bb-e5cd72e34b91/80264a45-619f-4fbb-976c-6c15dcb432b8"
|
||||
(reference "J14")
|
||||
(reference "J10")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user