Add ADG936BCPZ, OSD32MP157F-1G-BAA, TPS22965DSGR, AXP2101; add programmatic API and usage guide
- scripts/mikilab_lib.py / mikilab_cli.py: typed Python API + JSON CLI
for add/update/remove/query, for other apps to integrate without
shelling out to add_component.py
- lib_common.py/import_component.py/import_batch.py: regenerate
sym-lib-table.global/fp-lib-table.global on every mutating call, not
just the project-local tables
- scripts/find_missing_3d_models.py: lists components with no 3D model
and search links to fill the gap
- docs/GUIDA_USO.md: practical Italian usage guide (companion to README.md)
- checkup fixes: removed orphan duplicate footprint
footprints/other/CP_20_1_ADI.kicad_mod, and a dangling
${easyeda2kicad}/tmp 3D model reference in AXP2101's footprint that
pointed at a file that never existed on disk
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -613,3 +613,22 @@ symbol,symbols/other/TESTPART.kicad_sym,,REMOVED,9dd05201adaf0b2ff542da3882782d9
|
||||
symbol,symbols/other/FSC-BT1058.kicad_sym,symbols/rf/FSC-BT1058.kicad_sym,MOVED,ffd04c13db32c7bea4b500f235da29aa3f105eb512afb3d7d84fca442e3c8244,recategorized other -> rf; category=rf
|
||||
footprint,footprints/other/FSC-BT1058.pretty/FSC-BT1058.kicad_mod,footprints/rf/FSC-BT1058.pretty/FSC-BT1058.kicad_mod,REPLACED_AND_MOVED,cc0a2f7e5359e2ab87d5cf2226d668ffafb4c89246518fd31a61d4195d305086,geometry replaced with FSC-BT1035 pad layout (physically identical package); recategorized other -> rf; category=rf
|
||||
3d-model,3dmodels/other/FSC-BT1058.step,3dmodels/rf/FSC-BT1058.step,MOVED,cea88ca65e7f9b06ce5cb4949fce0614f2f21414267b4cc1655f1037cc54c1aa,recategorized other -> rf; category=rf
|
||||
symbol,/Users/michelebigi/Development/tmp/easyeda2kicad.kicad_sym,symbols/power/AXP2101.kicad_sym,NEW,63aea641b82a5970807a1e9c010008b8089474d779c85970224c9d7709eb3077,category=power
|
||||
footprint,/Users/michelebigi/Development/tmp/easyeda2kicad.pretty/QFN-40_L5.0-W5.0-P0.40-TL-EP3.4.kicad_mod,footprints/power/AXP2101.pretty/QFN-40_L5.0-W5.0-P0.40-TL-EP3.4.kicad_mod,NEW,5db83e8b1617b0a6eb12ff868e8556516ad7fe9cb60eff1fe9377443a8d397e2,category=power
|
||||
symbol,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_gnret1wf/TPS22965DSGR.kicad_sym,symbols/other/TPS22965DSGR.kicad_sym,NEW,b666f2da5baa7945bed44501d87ef941715cced9f63fcd8184046af2a877cbe2,category=other
|
||||
footprint,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_gnret1wf/SON50P200X200X80-9N.kicad_mod,footprints/other/TPS22965DSGR.pretty/SON50P200X200X80-9N.kicad_mod,NEW,b42d46ab378bf4612971b3f4367671d3c48ebf7eb550dfd8c64c11bd009abdaf,category=other
|
||||
3d-model,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_gnret1wf/TPS22965DSGR.step,3dmodels/other/TPS22965DSGR.step,NEW,d45622c50e62deaae35a28477e6235595834260597e017eaf79c752e27d1a81b,category=other
|
||||
symbol,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_365ba5cp/OSD32MP157F-1G-BAA.kicad_sym,symbols/other/OSD32MP157F-1G-BAA.kicad_sym,NEW,52fb1a4e5e9edd50674066d39cfa1bc837e307375c92f8f9eb9fa64d6de938e8,category=other
|
||||
footprint,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_365ba5cp/OSD32MP15X-BGA-324.kicad_mod,footprints/other/OSD32MP157F-1G-BAA.pretty/OSD32MP15X-BGA-324.kicad_mod,NEW,1f665839e5449823e40d623347a1cdf79f1d2ddbacba3532f0c0fd0afa6860bf,category=other
|
||||
3d-model,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_365ba5cp/OSD32MP157F-1G-BAA.step,3dmodels/other/OSD32MP157F-1G-BAA.step,NEW,fff9dc032792b58c283f9b8597cae3b89ee1c34b45d29efd0a54da226005403e,category=other
|
||||
symbol,/private/tmp/claude-501/-Users-michelebigi-Development-mikylab-kikad-library/ecb2958c-8aec-438e-bab1-47258811b002/scratchpad/CLITEST_PART.kicad_sym,symbols/other/CLITEST_PART.kicad_sym,NEW,c78a14700fd54f190e6f729b8aefe92efb792ed24fa6345b9581808493b35bfa,category=other
|
||||
symbol,/private/tmp/claude-501/-Users-michelebigi-Development-mikylab-kikad-library/ecb2958c-8aec-438e-bab1-47258811b002/scratchpad/CLITEST_PART.kicad_sym,,ERROR,,"A component named 'CLITEST_PART' already exists: symbols/other/CLITEST_PART.kicad_sym. Refusing to overwrite -- choose a different --name, pass --update to replace it in place, or remove the existing component first."
|
||||
symbol,/private/tmp/claude-501/-Users-michelebigi-Development-mikylab-kikad-library/ecb2958c-8aec-438e-bab1-47258811b002/scratchpad/CLITEST_PART.kicad_sym,symbols/other/CLITEST_PART.kicad_sym,UPDATED,c78a14700fd54f190e6f729b8aefe92efb792ed24fa6345b9581808493b35bfa,category=other
|
||||
symbol,symbols/other/CLITEST_PART.kicad_sym,,REMOVED,c78a14700fd54f190e6f729b8aefe92efb792ed24fa6345b9581808493b35bfa,category=other
|
||||
symbol,/Users/michelebigi/Downloads/ADG936BRUZ.zip,,ERROR,,"A component named 'ADG936BRUZ' already exists: symbols/other/ADG936BRUZ.kicad_sym. Refusing to overwrite -- choose a different --name, pass --update to replace it in place, or remove the existing component first."
|
||||
symbol,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/ultralibrarian_s0r4iric/KiCADv6/2026-08-29_21-57-03.kicad_sym,symbols/other/ADG936BCPZ.kicad_sym,NEW,961fa300ed9a835ae83e6fdbb1a27eeccc29302fe929eac7f735c84ba8e83c29,category=other
|
||||
footprint,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/ultralibrarian_s0r4iric/KiCADv6/footprints.pretty/CP_20_1_ADI.kicad_mod,footprints/other/ADG936BCPZ.pretty/CP_20_1_ADI.kicad_mod,NEW,e92f3dd1ebd13397f8767e6f0f16be893326fed5ea1d795c94ac004de6c32136,category=other
|
||||
symbol,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/ultralibrarian_i1vl86eh/KiCADv6/2026-08-29_21-57-03.kicad_sym,symbols/other/ADG936BCPZ.kicad_sym,UPDATED,961fa300ed9a835ae83e6fdbb1a27eeccc29302fe929eac7f735c84ba8e83c29,category=other
|
||||
footprint,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/ultralibrarian_i1vl86eh/KiCADv6/footprints.pretty/CP_20_1_ADI.kicad_mod,footprints/other/ADG936BCPZ.pretty/CP_20_1_ADI.kicad_mod,UPDATED,e92f3dd1ebd13397f8767e6f0f16be893326fed5ea1d795c94ac004de6c32136,category=other
|
||||
footprint,footprints/other/CP_20_1_ADI.kicad_mod,,REMOVED,,"orphan duplicate footprint left directly under footprints/other/ (not inside any .pretty, not registered in any lib-table); byte-identical to footprints/other/ADG936BCPZ.pretty/CP_20_1_ADI.kicad_mod; found and removed during library checkup; category=other"
|
||||
footprint,footprints/power/AXP2101.pretty/QFN-40_L5.0-W5.0-P0.40-TL-EP3.4.kicad_mod,footprints/power/AXP2101.pretty/QFN-40_L5.0-W5.0-P0.40-TL-EP3.4.kicad_mod,UPDATED,8abd9f69eaaa802fc5f6abcf1c8a69508b498db6de92880708b0d97cd6e2e4d0,"removed dangling (model ../tmp/easyeda2kicad.3dshapes/QFN-40_L5.0-W5.0-H0.9-P0.4-TL-EP.wrl) reference left over from raw easyeda2kicad export; no matching 3D file exists anywhere; found and fixed during library checkup; category=power"
|
||||
|
||||
|
@@ -307,6 +307,77 @@ bottom-to-top) identical to the datasheet's own Table 3-2 pin order, so
|
||||
straight lines in the silkscreen (cosmetic only, no pad geometry
|
||||
affected). No 3D model is included.
|
||||
|
||||
## 7. Programmatic API (for integrating into other apps)
|
||||
|
||||
For apps that want to add/update/remove/query components without
|
||||
shelling out to `add_component.py` and parsing its human-readable
|
||||
report, there are two entry points on top of the exact same
|
||||
`import_component.py` core logic (same validation, collision handling,
|
||||
and lib-table regeneration as every path in section 5):
|
||||
|
||||
- **`scripts/mikilab_lib.py`** — a typed Python API, for Python apps to
|
||||
import directly:
|
||||
|
||||
```python
|
||||
import sys
|
||||
sys.path.insert(0, "/path/to/mikylab_kikad_library/scripts")
|
||||
import mikilab_lib as mikilab
|
||||
|
||||
result = mikilab.add_component(
|
||||
name="TPS7A2018PDBVR",
|
||||
symbol="/path/TPS7A2018PDBVR.kicad_sym",
|
||||
footprint="/path/SOT95P280X145-5N.kicad_mod", # optional
|
||||
model="/path/TPS7A2018PDBVR.step", # optional
|
||||
category="power", # optional, auto-detected if omitted
|
||||
)
|
||||
# -> ComponentResult(name=..., category=..., action="add", symbol_path=..., ...)
|
||||
|
||||
mikilab.update_component(name="TPS7A2018PDBVR", symbol=..., footprint=...) # upsert: replaces in place
|
||||
mikilab.remove_component(name="TPS7A2018PDBVR")
|
||||
|
||||
mikilab.get_component("TPS7A2018PDBVR") # -> ComponentInfo | None
|
||||
mikilab.list_components(category="power") # -> list[ComponentInfo]
|
||||
mikilab.find_components("tps22") # -> list[ComponentInfo], substring match
|
||||
```
|
||||
|
||||
Failures raise `mikilab.MikilabError` (a single exception type, message
|
||||
safe to show to a user or log as-is) instead of printing and exiting.
|
||||
|
||||
- **`scripts/mikilab_cli.py`** — the same operations exposed as a stable
|
||||
JSON-over-stdout CLI, for apps in Swift, C++, or anything else that
|
||||
can spawn a subprocess:
|
||||
|
||||
```
|
||||
python3 scripts/mikilab_cli.py add --name TPS7A2018PDBVR \
|
||||
--symbol /path/TPS7A2018PDBVR.kicad_sym \
|
||||
--footprint /path/SOT95P280X145-5N.kicad_mod --category power
|
||||
|
||||
python3 scripts/mikilab_cli.py update --name TPS7A2018PDBVR --symbol /path/...
|
||||
python3 scripts/mikilab_cli.py remove --name TPS7A2018PDBVR
|
||||
python3 scripts/mikilab_cli.py get --name TPS7A2018PDBVR
|
||||
python3 scripts/mikilab_cli.py list [--category power]
|
||||
python3 scripts/mikilab_cli.py find --query tps22 [--category power]
|
||||
```
|
||||
|
||||
Every invocation prints exactly one JSON object to stdout —
|
||||
`{"ok": true, "data": ...}` or `{"ok": false, "error": "..."}` — and
|
||||
exits 0 iff `"ok"` is `true`. From Swift: run it via `Process`, decode
|
||||
stdout with `JSONDecoder`. From C++: `popen`/`posix_spawn` plus any
|
||||
JSON library (e.g. `nlohmann::json`).
|
||||
|
||||
Both entry points regenerate `sym-lib-table`, `fp-lib-table`,
|
||||
`sym-lib-table.global` and `fp-lib-table.global`, and append to
|
||||
`MANIFEST.csv`, on every mutating call — same guarantees as
|
||||
`add_component.py`. Neither touches KiCad's real global tables under
|
||||
`~/Library/Preferences/kicad/*/` — if this library is registered
|
||||
globally (section 1), merging new entries there is still a separate,
|
||||
deliberate step (section 1, step 3), so that an app driving this API
|
||||
never silently rewrites your live KiCad configuration.
|
||||
|
||||
`update_component()`/`update` does not move a component between
|
||||
categories — recategorizing means `remove` + `add` under the new
|
||||
category.
|
||||
|
||||
## Provenance
|
||||
|
||||
`MANIFEST.csv` has one row per file in the library (`type`, `source`,
|
||||
|
||||
@@ -0,0 +1,189 @@
|
||||
# Guida rapida all'uso della libreria MIKILAB
|
||||
|
||||
> Questa guida è il complemento pratico, in italiano, al `README.md` alla
|
||||
> radice del repository (che resta il riferimento tecnico completo, in
|
||||
> inglese, con anche la provenienza dettagliata di ogni componente).
|
||||
> Qui trovi solo "cosa fare" per i compiti di tutti i giorni.
|
||||
|
||||
## Cos'è
|
||||
|
||||
Una libreria KiCad personale e autonoma: simboli, footprint e modelli 3D
|
||||
per i progetti hardware di MIKILAB. Non dipende da nessun'altra cartella
|
||||
sul disco — puoi spostarla, zipparla o sincronizzarla su un'altra
|
||||
macchina e continua a funzionare.
|
||||
|
||||
```
|
||||
mikylab_kikad_library/
|
||||
├── sym-lib-table / fp-lib-table # registrano tutte le librerie
|
||||
├── symbols/<categoria>/<Nome>.kicad_sym
|
||||
├── footprints/<categoria>/<Nome>.pretty/<Nome>.kicad_mod
|
||||
├── 3dmodels/<categoria>/<Nome>.step
|
||||
├── scripts/ # tutti gli strumenti descritti qui sotto
|
||||
└── MANIFEST.csv # log di provenienza, una riga per file
|
||||
```
|
||||
|
||||
Categorie: `analog`, `audio`, `display`, `fpga_cpld`, `interface`,
|
||||
`logic`, `mechanical`, `memory`, `microcontrollers`, `other`, `power`,
|
||||
`rf`.
|
||||
|
||||
## 1. Installare la libreria in KiCad
|
||||
|
||||
**Un solo progetto** — se il tuo `.kicad_pro` sta dentro
|
||||
`mikylab_kikad_library/` (o copi `sym-lib-table`/`fp-lib-table` nella
|
||||
cartella del progetto), KiCad li trova da solo grazie a `${KIPRJMOD}`.
|
||||
Nessuna configurazione extra.
|
||||
|
||||
**Tutti i progetti** (consigliato per una libreria personale):
|
||||
|
||||
1. KiCad → Preferences → Configure Paths… → aggiungi `MIKILAB` che punta
|
||||
a `/Users/michelebigi/Development/mikylab_kikad_library`.
|
||||
2. Rigenera le tabelle "globali" ogni volta che aggiungi componenti:
|
||||
```
|
||||
python3 scripts/generate_global_tables.py
|
||||
```
|
||||
3. Copia le righe `(lib ...)` di `sym-lib-table.global` e
|
||||
`fp-lib-table.global` dentro le tabelle globali reali di KiCad
|
||||
(`~/Library/Preferences/kicad/10.0/sym-lib-table` e `fp-lib-table`),
|
||||
prima della parentesi finale. Vedi README §1 per lo script Python
|
||||
pronto che lo fa automaticamente (fai un backup prima).
|
||||
4. Riavvia KiCad.
|
||||
|
||||
## 2. Usare simboli e footprint
|
||||
|
||||
- Schematico: cerca `MIKILAB_<Libreria>:<Simbolo>`, es.
|
||||
`MIKILAB_TPS7A2012PDBVR:TPS7A2012PDBVR`.
|
||||
- PCB / footprint assignment: `MIKILAB_<Libreria>:<Footprint>`, es.
|
||||
`MIKILAB_SOT95P280X145_5N:SOT95P280X145-5N`.
|
||||
|
||||
Se un footprint non mostra il corpo 3D, quasi sempre è uno dei ~48 casi
|
||||
noti "`${KISBLIB}` gap" (footprint importati da fornitori il cui file
|
||||
STEP originale non era incluso nell'export) — vedi la sezione checkup o
|
||||
`python3 scripts/check_library.py` per l'elenco. Non è un errore da
|
||||
correggere subito: pad, courtyard e serigrafia restano corretti, manca
|
||||
solo la resa 3D.
|
||||
|
||||
## 3. Aggiungere un componente nuovo
|
||||
|
||||
**Un componente singolo** (hai già i file `.kicad_sym`/`.kicad_mod`/`.step`):
|
||||
|
||||
```
|
||||
python3 scripts/add_component.py \
|
||||
--name TPS7A2018PDBVR \
|
||||
--symbol /percorso/TPS7A2018PDBVR.kicad_sym \
|
||||
--footprint /percorso/SOT95P280X145-5N.kicad_mod \
|
||||
--model /percorso/TPS7A2018PDBVR.step \
|
||||
--category power
|
||||
```
|
||||
|
||||
`--footprint` e `--model` sono opzionali. `--category` è opzionale,
|
||||
viene auto-rilevata dal nome (altrimenti finisce in `other`).
|
||||
|
||||
**Da uno zip SnapEDA** ("Download KiCad"):
|
||||
```
|
||||
python3 scripts/import_snapeda.py --zip ~/Downloads/PARTNUMBER.zip [--category ...]
|
||||
```
|
||||
|
||||
**Da uno zip UltraLibrarian**:
|
||||
```
|
||||
python3 scripts/import_ultralibrarian.py --zip ~/Downloads/PARTNUMBER.zip [--category ...]
|
||||
```
|
||||
|
||||
**Molti componenti insieme**: una sottocartella per componente dentro
|
||||
una directory, poi:
|
||||
```
|
||||
python3 scripts/import_batch.py --source /percorso/batch_dir [--category power]
|
||||
```
|
||||
|
||||
Tutti gli importer: rifiutano di sovrascrivere un componente esistente
|
||||
(a meno di `--update`), deduplicano i footprint per contenuto (non per
|
||||
nome file), rigenerano le lib-table da zero e appendono una riga a
|
||||
`MANIFEST.csv` per ogni file toccato.
|
||||
|
||||
## 4. Aggiornare un componente esistente
|
||||
|
||||
Aggiungi `--update` allo stesso comando di import (qualunque sorgente:
|
||||
file locali, SnapEDA, UltraLibrarian) per sostituire in-place
|
||||
symbol/footprint/modello di un componente già presente, invece di
|
||||
ottenere l'errore "esiste già":
|
||||
|
||||
```
|
||||
python3 scripts/import_ultralibrarian.py --zip ~/Downloads/PARTNUMBER.zip --name NOME_ESISTENTE --update
|
||||
```
|
||||
|
||||
`--update` non cambia la categoria di un componente — per ricategorizzare
|
||||
serve `remove` + `add` nella nuova categoria (vedi §6).
|
||||
|
||||
## 5. Cercare / consultare componenti
|
||||
|
||||
Da riga di comando, senza scrivere Python:
|
||||
```
|
||||
python3 scripts/mikilab_cli.py list [--category power]
|
||||
python3 scripts/mikilab_cli.py find --query tps22 [--category power]
|
||||
python3 scripts/mikilab_cli.py get --name TPS7A2018PDBVR
|
||||
```
|
||||
Ogni comando stampa un JSON `{"ok": true, "data": ...}` su stdout.
|
||||
|
||||
Da Python, per integrare in un altro programma:
|
||||
```python
|
||||
import sys
|
||||
sys.path.insert(0, "/Users/michelebigi/Development/mikylab_kikad_library/scripts")
|
||||
import mikilab_lib as mikilab
|
||||
|
||||
mikilab.list_components(category="power")
|
||||
mikilab.find_components("tps22")
|
||||
mikilab.get_component("TPS7A2018PDBVR")
|
||||
```
|
||||
|
||||
## 6. Rimuovere / rinominare / ricategorizzare un componente
|
||||
|
||||
```
|
||||
python3 scripts/mikilab_cli.py remove --name NOME
|
||||
```
|
||||
oppure `mikilab.remove_component(name="NOME")` in Python. Per spostare un
|
||||
componente in un'altra categoria: `remove` seguito da un nuovo `add`
|
||||
(`--update`) nella categoria corretta.
|
||||
|
||||
## 7. Controllare l'integrità della libreria
|
||||
|
||||
Da lanciare dopo ogni import/modifica manuale, e comunque periodicamente:
|
||||
```
|
||||
python3 scripts/check_library.py
|
||||
```
|
||||
Verifica: struttura delle cartelle, sintassi di simboli/footprint,
|
||||
duplicati reali (per hash, non per nome), validità e portabilità dei
|
||||
riferimenti ai modelli 3D, sintassi e coerenza di
|
||||
`sym-lib-table`/`fp-lib-table`, e che ogni simbolo MIKILAB punti a un
|
||||
footprint esistente. Esce con `RESULT: OK` se non ci sono errori (i
|
||||
warning sono lacune note e documentate, non bloccanti — vedi README §4).
|
||||
|
||||
Per un elenco mirato dei componenti senza modello 3D (con link rapidi a
|
||||
SnapEDA/Octopart/UltraLibrarian per cercarlo):
|
||||
```
|
||||
python3 scripts/find_missing_3d_models.py
|
||||
```
|
||||
|
||||
## 8. Verificare che non ci siano percorsi assoluti o dipendenze esterne
|
||||
|
||||
La libreria non deve mai contenere percorsi assoluti né dipendere da
|
||||
`kicad-personal-library`. Puoi verificarlo in qualsiasi momento con:
|
||||
```
|
||||
grep -R "/Users/$(whoami)" --include="*.kicad_mod" --include="*.kicad_sym" .
|
||||
grep -R "kicad-personal-library" .
|
||||
```
|
||||
Entrambi i comandi devono restituire nessun risultato (a parte, per il
|
||||
secondo, le menzioni storiche nel README).
|
||||
|
||||
## Riferimento rapido comandi
|
||||
|
||||
| Cosa vuoi fare | Comando |
|
||||
|---|---|
|
||||
| Installare/aggiornare in tutti i progetti | `python3 scripts/generate_global_tables.py` |
|
||||
| Aggiungere un componente (file locali) | `python3 scripts/add_component.py --name ... --symbol ... [--footprint ...] [--model ...] [--category ...]` |
|
||||
| Aggiungere da zip SnapEDA | `python3 scripts/import_snapeda.py --zip ...` |
|
||||
| Aggiungere da zip UltraLibrarian | `python3 scripts/import_ultralibrarian.py --zip ...` |
|
||||
| Aggiungere molti componenti | `python3 scripts/import_batch.py --source ...` |
|
||||
| Aggiornare un componente esistente | aggiungi `--update` al comando di import |
|
||||
| Cercare un componente | `python3 scripts/mikilab_cli.py find --query ...` |
|
||||
| Rimuovere un componente | `python3 scripts/mikilab_cli.py remove --name ...` |
|
||||
| Controllare l'integrità della libreria | `python3 scripts/check_library.py` |
|
||||
| Trovare componenti senza modello 3D | `python3 scripts/find_missing_3d_models.py` |
|
||||
@@ -0,0 +1,176 @@
|
||||
(footprint "CP_20_1_ADI" (version 20211014) (generator pcbnew)
|
||||
(layer "F.Cu")
|
||||
(tags "ADG936BCPZ ")
|
||||
(attr smd)
|
||||
(fp_text reference "REF**" (at 0 0 unlocked) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value CP_20_1_ADI (at 0 0 unlocked) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user "${REFERENCE}" (at 0 0 unlocked) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user "*" (at -2.9337 -1.25) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user "*" (at -1.2319 -1.25) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_poly (pts
|
||||
(xy 0.809501 2.5527)
|
||||
(xy 0.809501 2.8067)
|
||||
(xy 1.190501 2.8067)
|
||||
(xy 1.190501 2.5527)
|
||||
) (layer "F.SilkS") (width 0) (fill solid))
|
||||
(fp_poly (pts
|
||||
(xy -1.190501 -2.5527)
|
||||
(xy -1.190501 -2.8067)
|
||||
(xy -0.809501 -2.8067)
|
||||
(xy -0.809501 -2.5527)
|
||||
) (layer "F.SilkS") (width 0) (fill solid))
|
||||
(fp_line (start -2.2479 2.2479) (end -2.2479 1.381) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start -2.2479 1.381) (end -2.5527 1.381) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start -2.5527 1.381) (end -2.5527 -1.381) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start -2.5527 -1.381) (end -2.2479 -1.381) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start -2.2479 -1.381) (end -2.2479 -2.2479) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start -2.2479 -2.2479) (end -1.381 -2.2479) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start -1.381 -2.2479) (end -1.381 -2.5527) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start -1.381 -2.5527) (end 1.381 -2.5527) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 1.381 -2.5527) (end 1.381 -2.2479) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 1.381 -2.2479) (end 2.2479 -2.2479) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 2.2479 -2.2479) (end 2.2479 -1.381) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 2.2479 -1.381) (end 2.5527 -1.381) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 2.5527 -1.381) (end 2.5527 1.381) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 2.5527 1.381) (end 2.2479 1.381) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 2.2479 1.381) (end 2.2479 2.2479) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 2.2479 2.2479) (end 1.381 2.2479) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 1.381 2.2479) (end 1.381 2.5527) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start 1.381 2.5527) (end -1.381 2.5527) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start -1.381 2.5527) (end -1.381 2.2479) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_line (start -1.381 2.2479) (end -2.2479 2.2479) (layer "F.CrtYd") (width 0.1524))
|
||||
(fp_text user "*" (at -2.9337 -1.25 unlocked) (layer "F.SilkS")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user "*" (at -1.2319 -1.25 unlocked) (layer "F.Fab")
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start -1.9939 -0.7239) (end -0.7239 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.8476 -1.9939) (end 1.1524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.1524 -1.9939) (end 1.1524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.1524 -1.9939) (end 0.8476 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.8476 -1.9939) (end 0.8476 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.3476 -1.9939) (end 0.6524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.6524 -1.9939) (end 0.6524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.6524 -1.9939) (end 0.3476 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.3476 -1.9939) (end 0.3476 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.1524 -1.9939) (end 0.1524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.1524 -1.9939) (end 0.1524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.1524 -1.9939) (end -0.1524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.1524 -1.9939) (end -0.1524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.6524 -1.9939) (end -0.3476 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.3476 -1.9939) (end -0.3476 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.3476 -1.9939) (end -0.6524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.6524 -1.9939) (end -0.6524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.1524 -1.9939) (end -0.8476 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.8476 -1.9939) (end -0.8476 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.8476 -1.9939) (end -1.1524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.1524 -1.9939) (end -1.1524 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -0.8476) (end -1.9939 -1.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -1.1524) (end -1.9939 -1.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -1.1524) (end -1.9939 -0.8476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -0.8476) (end -1.9939 -0.8476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -0.3476) (end -1.9939 -0.6524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -0.6524) (end -1.9939 -0.6524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -0.6524) (end -1.9939 -0.3476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -0.3476) (end -1.9939 -0.3476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 0.1524) (end -1.9939 -0.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -0.1524) (end -1.9939 -0.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -0.1524) (end -1.9939 0.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 0.1524) (end -1.9939 0.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 0.6524) (end -1.9939 0.3476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 0.3476) (end -1.9939 0.3476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 0.3476) (end -1.9939 0.6524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 0.6524) (end -1.9939 0.6524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 1.1524) (end -1.9939 0.8476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 0.8476) (end -1.9939 0.8476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 0.8476) (end -1.9939 1.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 1.1524) (end -1.9939 1.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.8476 1.9939) (end -1.1524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.1524 1.9939) (end -1.1524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.1524 1.9939) (end -0.8476 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.8476 1.9939) (end -0.8476 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.3476 1.9939) (end -0.6524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.6524 1.9939) (end -0.6524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.6524 1.9939) (end -0.3476 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.3476 1.9939) (end -0.3476 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.1524 1.9939) (end -0.1524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.1524 1.9939) (end -0.1524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -0.1524 1.9939) (end 0.1524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.1524 1.9939) (end 0.1524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.6524 1.9939) (end 0.3476 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.3476 1.9939) (end 0.3476 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.3476 1.9939) (end 0.6524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.6524 1.9939) (end 0.6524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.1524 1.9939) (end 0.8476 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.8476 1.9939) (end 0.8476 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 0.8476 1.9939) (end 1.1524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.1524 1.9939) (end 1.1524 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 0.8476) (end 1.9939 1.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 1.1524) (end 1.9939 1.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 1.1524) (end 1.9939 0.8476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 0.8476) (end 1.9939 0.8476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 0.3476) (end 1.9939 0.6524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 0.6524) (end 1.9939 0.6524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 0.6524) (end 1.9939 0.3476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 0.3476) (end 1.9939 0.3476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -0.1524) (end 1.9939 0.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 0.1524) (end 1.9939 0.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 0.1524) (end 1.9939 -0.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -0.1524) (end 1.9939 -0.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -0.6524) (end 1.9939 -0.3476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -0.3476) (end 1.9939 -0.3476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -0.3476) (end 1.9939 -0.6524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -0.6524) (end 1.9939 -0.6524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -1.1524) (end 1.9939 -0.8476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -0.8476) (end 1.9939 -0.8476) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -0.8476) (end 1.9939 -1.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -1.1524) (end 1.9939 -1.1524) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -2.1209 2.1209) (end -1.459741 2.1209) (layer "F.SilkS") (width 0.1524))
|
||||
(fp_line (start 2.1209 2.1209) (end 2.1209 1.459741) (layer "F.SilkS") (width 0.1524))
|
||||
(fp_line (start 2.1209 -2.1209) (end 1.459741 -2.1209) (layer "F.SilkS") (width 0.1524))
|
||||
(fp_line (start -2.1209 -2.1209) (end -2.1209 -1.459741) (layer "F.SilkS") (width 0.1524))
|
||||
(fp_line (start -2.1209 1.459741) (end -2.1209 2.1209) (layer "F.SilkS") (width 0.1524))
|
||||
(fp_line (start -1.9939 1.9939) (end 1.9939 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 1.9939) (end 1.9939 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 1.9939) (end 1.9939 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -1.9939) (end 1.9939 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.9939 -1.9939) (end -1.9939 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -1.9939) (end -1.9939 -1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 -1.9939) (end -1.9939 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start -1.9939 1.9939) (end -1.9939 1.9939) (layer "F.Fab") (width 0.0254))
|
||||
(fp_line (start 1.459741 2.1209) (end 2.1209 2.1209) (layer "F.SilkS") (width 0.1524))
|
||||
(fp_line (start 2.1209 -1.459741) (end 2.1209 -2.1209) (layer "F.SilkS") (width 0.1524))
|
||||
(fp_line (start -1.459741 -2.1209) (end -2.1209 -2.1209) (layer "F.SilkS") (width 0.1524))
|
||||
(pad "1" smd rect (at -1.7653 -1.000001 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "2" smd rect (at -1.7653 -0.499999 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "3" smd rect (at -1.7653 0 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "4" smd rect (at -1.7653 0.499999 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "5" smd rect (at -1.7653 1.000001 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "6" smd rect (at -1.000001 1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "7" smd rect (at -0.499999 1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "8" smd rect (at 0 1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "9" smd rect (at 0.499999 1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "10" smd rect (at 1.000001 1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "11" smd rect (at 1.7653 1.000001 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "12" smd rect (at 1.7653 0.499999 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "13" smd rect (at 1.7653 0 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "14" smd rect (at 1.7653 -0.499999 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "15" smd rect (at 1.7653 -1.000001 90) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "16" smd rect (at 1.000001 -1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "17" smd rect (at 0.499999 -1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "18" smd rect (at 0 -1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "19" smd rect (at -0.499999 -1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "20" smd rect (at -1.000001 -1.7653) (size 0.254 1.0668) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
(pad "21" smd rect (at 0 0) (size 2.2606 2.2606) (layers "F.Cu" "F.Paste" "F.Mask"))
|
||||
)
|
||||
@@ -0,0 +1,343 @@
|
||||
|
||||
(footprint OSD32MP15X-BGA-324 (layer F.Cu) (tedit 6A92A499)
|
||||
(descr "")
|
||||
(attr smd)
|
||||
(fp_text reference REF** (at -6.223 -9.9314 0) (layer F.SilkS)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value OSD32MP15X-BGA-324 (at -0.3048 9.7536 0) (layer F.Fab)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(pad L9 smd circle (at -0.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L12 smd circle (at 2.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L8 smd circle (at -1.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L13 smd circle (at 3.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L7 smd circle (at -2.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L14 smd circle (at 4.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L6 smd circle (at -3.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L15 smd circle (at 5.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L5 smd circle (at -4.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L16 smd circle (at 6.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L4 smd circle (at -5.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L17 smd circle (at 7.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L3 smd circle (at -6.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L18 smd circle (at 8.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L2 smd circle (at -7.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad L1 smd circle (at -8.5 1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K18 smd circle (at 8.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K17 smd circle (at 7.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K16 smd circle (at 6.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K15 smd circle (at 5.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K14 smd circle (at 4.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K13 smd circle (at 3.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K12 smd circle (at 2.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K9 smd circle (at -0.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K8 smd circle (at -1.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K7 smd circle (at -2.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K6 smd circle (at -3.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K5 smd circle (at -4.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K4 smd circle (at -5.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K3 smd circle (at -6.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K2 smd circle (at -7.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad K1 smd circle (at -8.5 0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M10 smd circle (at 0.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N10 smd circle (at 0.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P10 smd circle (at 0.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G10 smd circle (at 0.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R10 smd circle (at 0.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F10 smd circle (at 0.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T10 smd circle (at 0.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E10 smd circle (at 0.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U10 smd circle (at 0.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D10 smd circle (at 0.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C10 smd circle (at 0.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V10 smd circle (at 0.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B10 smd circle (at 0.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A10 smd circle (at 0.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V11 smd circle (at 1.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U11 smd circle (at 1.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T11 smd circle (at 1.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R11 smd circle (at 1.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N11 smd circle (at 1.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M11 smd circle (at 1.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G11 smd circle (at 1.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F11 smd circle (at 1.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E11 smd circle (at 1.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C11 smd circle (at 1.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B11 smd circle (at 1.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A11 smd circle (at 1.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A12 smd circle (at 2.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B12 smd circle (at 2.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C12 smd circle (at 2.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E12 smd circle (at 2.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F12 smd circle (at 2.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G12 smd circle (at 2.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H12 smd circle (at 2.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J12 smd circle (at 2.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M12 smd circle (at 2.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N12 smd circle (at 2.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R12 smd circle (at 2.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T12 smd circle (at 2.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U12 smd circle (at 2.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V12 smd circle (at 2.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V9 smd circle (at -0.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U9 smd circle (at -0.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T9 smd circle (at -0.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R9 smd circle (at -0.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P9 smd circle (at -0.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N9 smd circle (at -0.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M9 smd circle (at -0.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J9 smd circle (at -0.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H9 smd circle (at -0.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G9 smd circle (at -0.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F9 smd circle (at -0.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E9 smd circle (at -0.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D9 smd circle (at -0.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C9 smd circle (at -0.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B9 smd circle (at -0.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A9 smd circle (at -0.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A8 smd circle (at -1.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B8 smd circle (at -1.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C8 smd circle (at -1.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D8 smd circle (at -1.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E8 smd circle (at -1.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F8 smd circle (at -1.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G8 smd circle (at -1.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H8 smd circle (at -1.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J8 smd circle (at -1.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M8 smd circle (at -1.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N8 smd circle (at -1.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P8 smd circle (at -1.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R8 smd circle (at -1.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T8 smd circle (at -1.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U8 smd circle (at -1.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V8 smd circle (at -1.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V13 smd circle (at 3.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U13 smd circle (at 3.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T13 smd circle (at 3.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R13 smd circle (at 3.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N13 smd circle (at 3.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M13 smd circle (at 3.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J13 smd circle (at 3.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H13 smd circle (at 3.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G13 smd circle (at 3.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F13 smd circle (at 3.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E13 smd circle (at 3.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C13 smd circle (at 3.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B13 smd circle (at 3.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A13 smd circle (at 3.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A14 smd circle (at 4.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B14 smd circle (at 4.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C14 smd circle (at 4.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E14 smd circle (at 4.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F14 smd circle (at 4.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G14 smd circle (at 4.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H14 smd circle (at 4.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J14 smd circle (at 4.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M14 smd circle (at 4.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N14 smd circle (at 4.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R14 smd circle (at 4.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T14 smd circle (at 4.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U14 smd circle (at 4.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V14 smd circle (at 4.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V15 smd circle (at 5.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U15 smd circle (at 5.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T15 smd circle (at 5.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R15 smd circle (at 5.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N15 smd circle (at 5.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M15 smd circle (at 5.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J15 smd circle (at 5.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H15 smd circle (at 5.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G15 smd circle (at 5.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F15 smd circle (at 5.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E15 smd circle (at 5.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C15 smd circle (at 5.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B15 smd circle (at 5.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A15 smd circle (at 5.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A16 smd circle (at 6.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B16 smd circle (at 6.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C16 smd circle (at 6.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D16 smd circle (at 6.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E16 smd circle (at 6.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F16 smd circle (at 6.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G16 smd circle (at 6.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H16 smd circle (at 6.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J16 smd circle (at 6.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M16 smd circle (at 6.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N16 smd circle (at 6.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P16 smd circle (at 6.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R16 smd circle (at 6.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T16 smd circle (at 6.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U16 smd circle (at 6.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V16 smd circle (at 6.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V17 smd circle (at 7.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U17 smd circle (at 7.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T17 smd circle (at 7.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R17 smd circle (at 7.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P17 smd circle (at 7.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N17 smd circle (at 7.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M17 smd circle (at 7.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J17 smd circle (at 7.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H17 smd circle (at 7.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G17 smd circle (at 7.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F17 smd circle (at 7.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E17 smd circle (at 7.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D17 smd circle (at 7.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C17 smd circle (at 7.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B17 smd circle (at 7.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A17 smd circle (at 7.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B18 smd circle (at 8.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C18 smd circle (at 8.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D18 smd circle (at 8.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E18 smd circle (at 8.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F18 smd circle (at 8.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G18 smd circle (at 8.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H18 smd circle (at 8.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J18 smd circle (at 8.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M18 smd circle (at 8.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N18 smd circle (at 8.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P18 smd circle (at 8.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R18 smd circle (at 8.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T18 smd circle (at 8.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U18 smd circle (at 8.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M7 smd circle (at -2.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M6 smd circle (at -3.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M5 smd circle (at -4.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M4 smd circle (at -5.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M3 smd circle (at -6.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M2 smd circle (at -7.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad M1 smd circle (at -8.5 2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J1 smd circle (at -8.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J2 smd circle (at -7.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J3 smd circle (at -6.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J4 smd circle (at -5.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J5 smd circle (at -4.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J6 smd circle (at -3.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad J7 smd circle (at -2.5 -0.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H1 smd circle (at -8.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H2 smd circle (at -7.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H3 smd circle (at -6.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H4 smd circle (at -5.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H5 smd circle (at -4.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H6 smd circle (at -3.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad H7 smd circle (at -2.5 -1.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G1 smd circle (at -8.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G2 smd circle (at -7.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G3 smd circle (at -6.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G4 smd circle (at -5.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G5 smd circle (at -4.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G6 smd circle (at -3.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad G7 smd circle (at -2.5 -2.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F1 smd circle (at -8.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F2 smd circle (at -7.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F3 smd circle (at -6.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F4 smd circle (at -5.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F5 smd circle (at -4.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F6 smd circle (at -3.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad F7 smd circle (at -2.5 -3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E1 smd circle (at -8.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E2 smd circle (at -7.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E3 smd circle (at -6.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E4 smd circle (at -5.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E5 smd circle (at -4.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E6 smd circle (at -3.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad E7 smd circle (at -2.5 -4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D7 smd circle (at -2.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D6 smd circle (at -3.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D5 smd circle (at -4.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D4 smd circle (at -5.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D3 smd circle (at -6.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D2 smd circle (at -7.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad D1 smd circle (at -8.5 -5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C1 smd circle (at -8.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C2 smd circle (at -7.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C3 smd circle (at -6.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C4 smd circle (at -5.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C5 smd circle (at -4.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C6 smd circle (at -3.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad C7 smd circle (at -2.5 -6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B7 smd circle (at -2.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A7 smd circle (at -2.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A6 smd circle (at -3.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B6 smd circle (at -3.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B5 smd circle (at -4.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A5 smd circle (at -4.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A4 smd circle (at -5.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B4 smd circle (at -5.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B3 smd circle (at -6.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A3 smd circle (at -6.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad A2 smd circle (at -7.5 -8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B2 smd circle (at -7.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad B1 smd circle (at -8.5 -7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N1 smd circle (at -8.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N2 smd circle (at -7.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N3 smd circle (at -6.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N4 smd circle (at -5.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N5 smd circle (at -4.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N6 smd circle (at -3.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad N7 smd circle (at -2.5 3.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P7 smd circle (at -2.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P6 smd circle (at -3.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P5 smd circle (at -4.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P4 smd circle (at -5.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P3 smd circle (at -6.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P2 smd circle (at -7.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad P1 smd circle (at -8.5 4.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R1 smd circle (at -8.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R2 smd circle (at -7.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R3 smd circle (at -6.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R4 smd circle (at -5.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R5 smd circle (at -4.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R6 smd circle (at -3.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad R7 smd circle (at -2.5 5.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T7 smd circle (at -2.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T6 smd circle (at -3.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T5 smd circle (at -4.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T4 smd circle (at -5.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T3 smd circle (at -6.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T2 smd circle (at -7.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad T1 smd circle (at -8.5 6.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U1 smd circle (at -8.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U2 smd circle (at -7.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U3 smd circle (at -6.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U4 smd circle (at -5.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U5 smd circle (at -4.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U6 smd circle (at -3.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad U7 smd circle (at -2.5 7.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V7 smd circle (at -2.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V6 smd circle (at -3.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V5 smd circle (at -4.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V4 smd circle (at -5.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V3 smd circle (at -6.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad V2 smd circle (at -7.5 8.5) (size 0.35 0.35) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(fp_line (start 9.0 -9.0) (end 0.0 -9.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start 0.0 -9.0) (end -9.0 -9.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start -9.0 -9.0) (end -9.0 0.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start -9.0 0.0) (end -9.0 9.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start -9.0 9.0) (end 0.0 9.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start 0.0 9.0) (end 9.0 9.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start 9.0 9.0) (end 9.0 0.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_circle (center -9.5 -9.525) (end -9.373 -9.525) (layer F.SilkS) (width 0.254))
|
||||
(fp_text user "1" (at -8.5 9.5) (layer F.Fab)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user "18" (at 8.5 9.5) (layer F.Fab)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user "A" (at -9.5 -8.5) (layer F.Fab)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user "V" (at -9.5 8.5) (layer F.Fab)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(fp_line (start 9.0 0.0) (end 9.0 -9.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start -8.0 0.0) (end -9.0 0.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start 0.0 -9.0) (end 0.0 -8.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start 0.0 8.0) (end 0.0 9.0) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start 8.0 0.0) (end 9.0 0.0) (layer F.SilkS) (width 0.127))
|
||||
(model ${KIPRJMOD}/3dmodels/other/OSD32MP157F-1G-BAA.step
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,47 @@
|
||||
|
||||
(footprint SON50P200X200X80-9N (layer F.Cu) (tedit 6A90224C)
|
||||
(descr "")
|
||||
(attr smd)
|
||||
(fp_text reference REF** (at 0.292 -1.7934 0) (layer F.SilkS)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value SON50P200X200X80-9N (at 5.9816 1.7934 0) (layer F.Fab)
|
||||
(effects (font (size 0.64 0.64) (thickness 0.15)))
|
||||
)
|
||||
(pad 1 smd roundrect (roundrect_rratio 0.125) (at -0.985 -0.75) (size 0.74 0.28) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 2 smd roundrect (roundrect_rratio 0.125) (at -0.985 -0.25) (size 0.74 0.28) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 3 smd roundrect (roundrect_rratio 0.125) (at -0.985 0.25) (size 0.74 0.28) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 4 smd roundrect (roundrect_rratio 0.125) (at -0.985 0.75) (size 0.74 0.28) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 5 smd roundrect (roundrect_rratio 0.125) (at 0.985 0.75) (size 0.74 0.28) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 6 smd roundrect (roundrect_rratio 0.125) (at 0.985 0.25) (size 0.74 0.28) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 7 smd roundrect (roundrect_rratio 0.125) (at 0.985 -0.25) (size 0.74 0.28) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 8 smd roundrect (roundrect_rratio 0.125) (at 0.985 -0.75) (size 0.74 0.28) (layers F.Cu F.Mask F.Paste) (solder_mask_margin 0.102))
|
||||
(pad 9 smd rect (at 0.0 0.0) (size 0.9 1.6) (layers F.Cu F.Mask) (solder_mask_margin 0.102))
|
||||
(pad 9_1 thru_hole circle (at 0.0 -0.55) (size 0.4 0.4) (drill 0.2) (layers *.Cu))
|
||||
(pad 9_2 thru_hole circle (at 0.0 0.55) (size 0.4 0.4) (drill 0.2) (layers *.Cu))
|
||||
(fp_poly
|
||||
(pts
|
||||
(xy -0.28 -0.51)
|
||||
(xy 0.28 -0.51)
|
||||
(xy 0.28 0.51)
|
||||
(xy -0.28 0.51)
|
||||
) (layer F.Paste) (width 0.01)
|
||||
)
|
||||
(fp_circle (center -1.925 -0.75) (end -1.825 -0.75) (layer F.SilkS) (width 0.2))
|
||||
(fp_circle (center -1.925 -0.75) (end -1.825 -0.75) (layer F.Fab) (width 0.2))
|
||||
(fp_line (start -1.0 -1.0) (end 1.0 -1.0) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start -1.0 1.0) (end 1.0 1.0) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start -1.0 -1.21) (end 1.0 -1.21) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start -1.0 1.21) (end 1.0 1.21) (layer F.SilkS) (width 0.127))
|
||||
(fp_line (start -1.0 -1.0) (end -1.0 1.0) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start 1.0 -1.0) (end 1.0 1.0) (layer F.Fab) (width 0.127))
|
||||
(fp_line (start -1.605 -1.25) (end 1.605 -1.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.605 1.25) (end 1.605 1.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -1.605 -1.25) (end -1.605 1.25) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 1.605 -1.25) (end 1.605 1.25) (layer F.CrtYd) (width 0.05))
|
||||
(model ${KIPRJMOD}/3dmodels/other/TPS22965DSGR.step
|
||||
(offset (xyz 0 0 0))
|
||||
(scale (xyz 1 1 1))
|
||||
(rotate (xyz 0 0 0))
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,69 @@
|
||||
(module easyeda2kicad:QFN-40_L5.0-W5.0-P0.40-TL-EP3.4 (layer F.Cu) (tedit 5DC5F6A4)
|
||||
(attr smd)
|
||||
(fp_text reference REF** (at 0.000 -6.500) (layer F.SilkS)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text value QFN-40_L5.0-W5.0-P0.40-TL-EP3.4 (at 0.000 6.500) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(fp_text user %R (at 0 0) (layer F.Fab)
|
||||
(effects (font (size 1 1) (thickness 0.15)))
|
||||
)
|
||||
(property "LCSC Part" "C3036461")
|
||||
(fp_line (start -2.20 2.70) (end -2.70 2.70) (layer F.SilkS) (width 0.20))
|
||||
(fp_line (start -2.70 2.70) (end -2.70 2.20) (layer F.SilkS) (width 0.20))
|
||||
(fp_line (start 2.20 2.70) (end 2.70 2.70) (layer F.SilkS) (width 0.20))
|
||||
(fp_line (start 2.70 2.70) (end 2.70 2.20) (layer F.SilkS) (width 0.20))
|
||||
(fp_line (start 2.70 -2.20) (end 2.70 -2.70) (layer F.SilkS) (width 0.20))
|
||||
(fp_line (start 2.70 -2.70) (end 2.20 -2.70) (layer F.SilkS) (width 0.20))
|
||||
(fp_line (start -2.70 -2.20) (end -2.70 -2.70) (layer F.SilkS) (width 0.20))
|
||||
(fp_line (start -2.70 -2.70) (end -2.20 -2.70) (layer F.SilkS) (width 0.20))
|
||||
(pad 41 smd rect (at 0.00 -0.00 -90.00) (size 3.400 3.400) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 1 smd oval (at -2.50 -1.80 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 2 smd oval (at -2.50 -1.40 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 3 smd oval (at -2.50 -1.00 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 4 smd oval (at -2.50 -0.60 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 5 smd oval (at -2.50 -0.20 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 6 smd oval (at -2.50 0.20 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 7 smd oval (at -2.50 0.60 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 8 smd oval (at -2.50 1.00 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 9 smd oval (at -2.50 1.40 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 10 smd oval (at -2.50 1.80 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 21 smd oval (at 2.50 1.80 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 22 smd oval (at 2.50 1.40 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 23 smd oval (at 2.50 1.00 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 24 smd oval (at 2.50 0.60 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 25 smd oval (at 2.50 0.20 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 26 smd oval (at 2.50 -0.20 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 27 smd oval (at 2.50 -0.60 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 28 smd oval (at 2.50 -1.00 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 29 smd oval (at 2.50 -1.40 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 30 smd oval (at 2.50 -1.80 0.00) (size 0.800 0.200) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 40 smd oval (at -1.80 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 39 smd oval (at -1.40 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 38 smd oval (at -1.00 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 37 smd oval (at -0.60 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 36 smd oval (at -0.20 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 35 smd oval (at 0.20 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 34 smd oval (at 0.60 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 33 smd oval (at 1.00 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 32 smd oval (at 1.40 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 31 smd oval (at 1.80 -2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 20 smd oval (at 1.80 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 19 smd oval (at 1.40 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 18 smd oval (at 1.00 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 17 smd oval (at 0.60 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 16 smd oval (at 0.20 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 15 smd oval (at -0.20 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 14 smd oval (at -0.60 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 13 smd oval (at -1.00 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 12 smd oval (at -1.40 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(pad 11 smd oval (at -1.80 2.50 0.00) (size 0.200 0.800) (layers F.Cu F.Paste F.Mask))
|
||||
(fp_circle (center -2.50 -2.50) (end -2.47 -2.50) (layer F.SilkS) (width 0.06))
|
||||
(fp_circle (center -2.80 -1.82) (end -2.65 -1.82) (layer Cmts.User) (width 0.30))
|
||||
(fp_arc (start -3.20 -2.50) (end -3.05 -2.50) (angle 359.03) (layer F.SilkS) (width 0.30))
|
||||
(fp_line (start -2.50 -2.50) (end 2.50 -2.50) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 2.50 -2.50) (end 2.50 2.50) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start 2.50 2.50) (end -2.50 2.50) (layer F.CrtYd) (width 0.05))
|
||||
(fp_line (start -2.50 2.50) (end -2.50 -2.50) (layer F.CrtYd) (width 0.05))
|
||||
)
|
||||
@@ -34,10 +34,12 @@
|
||||
(lib (name "MIKILAB_ESP32_WROVER_E")(type "KiCad")(uri "${KIPRJMOD}/footprints/microcontrollers/ESP32-WROVER-E.pretty")(options "")(descr "ESP32-WROVER-E.pretty"))
|
||||
(lib (name "MIKILAB_ESP8684_WROOM_02C_U")(type "KiCad")(uri "${KIPRJMOD}/footprints/microcontrollers/ESP8684-WROOM-02C_U.pretty")(options "")(descr "ESP8684-WROOM-02C_U.pretty"))
|
||||
(lib (name "MIKILAB_25AA1024")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/25AA1024.pretty")(options "")(descr "25AA1024.pretty"))
|
||||
(lib (name "MIKILAB_ADG936BCPZ")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/ADG936BCPZ.pretty")(options "")(descr "ADG936BCPZ.pretty"))
|
||||
(lib (name "MIKILAB_ADG936BRUZ")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/ADG936BRUZ.pretty")(options "")(descr "ADG936BRUZ.pretty"))
|
||||
(lib (name "MIKILAB_CDCLVC1102PW")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/CDCLVC1102PW.pretty")(options "")(descr "CDCLVC1102PW.pretty"))
|
||||
(lib (name "MIKILAB_ESD9B5_0ST5G")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/ESD9B5.0ST5G.pretty")(options "")(descr "ESD9B5.0ST5G.pretty"))
|
||||
(lib (name "MIKILAB_IC_TPS63020DSJT")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/IC_TPS63020DSJT.pretty")(options "")(descr "IC_TPS63020DSJT.pretty"))
|
||||
(lib (name "MIKILAB_OSD32MP157F_1G_BAA")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/OSD32MP157F-1G-BAA.pretty")(options "")(descr "OSD32MP157F-1G-BAA.pretty"))
|
||||
(lib (name "MIKILAB_PESD5V0L4UW")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/PESD5V0L4UW.pretty")(options "")(descr "PESD5V0L4UW.pretty"))
|
||||
(lib (name "MIKILAB_SJ_3506_SMT_TR")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/SJ-3506-SMT-TR.pretty")(options "")(descr "SJ-3506-SMT-TR.pretty"))
|
||||
(lib (name "MIKILAB_SJ_435107RS")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/SJ-435107RS.pretty")(options "")(descr "SJ-435107RS.pretty"))
|
||||
@@ -45,6 +47,7 @@
|
||||
(lib (name "MIKILAB_SN74AXC1T45DBVR")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/SN74AXC1T45DBVR.pretty")(options "")(descr "SN74AXC1T45DBVR.pretty"))
|
||||
(lib (name "MIKILAB_SOT95P280X145_5N")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/SOT95P280X145-5N.pretty")(options "")(descr "SOT95P280X145-5N.pretty"))
|
||||
(lib (name "MIKILAB_TPD2E007DCKR")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/TPD2E007DCKR.pretty")(options "")(descr "TPD2E007DCKR.pretty"))
|
||||
(lib (name "MIKILAB_TPS22965DSGR")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/TPS22965DSGR.pretty")(options "")(descr "TPS22965DSGR.pretty"))
|
||||
(lib (name "MIKILAB_TPS22994RUKT")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/TPS22994RUKT.pretty")(options "")(descr "TPS22994RUKT.pretty"))
|
||||
(lib (name "MIKILAB_XTAC5212IRGER")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/XTAC5212IRGER.pretty")(options "")(descr "XTAC5212IRGER.pretty"))
|
||||
(lib (name "MIKILAB_abracon")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/abracon.pretty")(options "")(descr "abracon.pretty"))
|
||||
@@ -108,6 +111,7 @@
|
||||
(lib (name "MIKILAB_ublox")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/ublox.pretty")(options "")(descr "ublox.pretty"))
|
||||
(lib (name "MIKILAB_wurth")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/wurth.pretty")(options "")(descr "wurth.pretty"))
|
||||
(lib (name "MIKILAB_zif")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/zif.pretty")(options "")(descr "zif.pretty"))
|
||||
(lib (name "MIKILAB_AXP2101")(type "KiCad")(uri "${KIPRJMOD}/footprints/power/AXP2101.pretty")(options "")(descr "AXP2101.pretty"))
|
||||
(lib (name "MIKILAB_BQ25896RTWT")(type "KiCad")(uri "${KIPRJMOD}/footprints/power/BQ25896RTWT.pretty")(options "")(descr "BQ25896RTWT.pretty"))
|
||||
(lib (name "MIKILAB_FSC_BT1035")(type "KiCad")(uri "${KIPRJMOD}/footprints/rf/FSC-BT1035.pretty")(options "")(descr "FSC-BT1035.pretty"))
|
||||
(lib (name "MIKILAB_FSC_BT1058")(type "KiCad")(uri "${KIPRJMOD}/footprints/rf/FSC-BT1058.pretty")(options "")(descr "FSC-BT1058.pretty"))
|
||||
|
||||
@@ -38,6 +38,7 @@
|
||||
(lib (name "MIKILAB_CDCLVC1102PW")(type "KiCad")(uri "${MIKILAB}/footprints/other/CDCLVC1102PW.pretty")(options "")(descr "CDCLVC1102PW.pretty"))
|
||||
(lib (name "MIKILAB_ESD9B5_0ST5G")(type "KiCad")(uri "${MIKILAB}/footprints/other/ESD9B5.0ST5G.pretty")(options "")(descr "ESD9B5.0ST5G.pretty"))
|
||||
(lib (name "MIKILAB_IC_TPS63020DSJT")(type "KiCad")(uri "${MIKILAB}/footprints/other/IC_TPS63020DSJT.pretty")(options "")(descr "IC_TPS63020DSJT.pretty"))
|
||||
(lib (name "MIKILAB_OSD32MP157F_1G_BAA")(type "KiCad")(uri "${MIKILAB}/footprints/other/OSD32MP157F-1G-BAA.pretty")(options "")(descr "OSD32MP157F-1G-BAA.pretty"))
|
||||
(lib (name "MIKILAB_PESD5V0L4UW")(type "KiCad")(uri "${MIKILAB}/footprints/other/PESD5V0L4UW.pretty")(options "")(descr "PESD5V0L4UW.pretty"))
|
||||
(lib (name "MIKILAB_SJ_3506_SMT_TR")(type "KiCad")(uri "${MIKILAB}/footprints/other/SJ-3506-SMT-TR.pretty")(options "")(descr "SJ-3506-SMT-TR.pretty"))
|
||||
(lib (name "MIKILAB_SJ_435107RS")(type "KiCad")(uri "${MIKILAB}/footprints/other/SJ-435107RS.pretty")(options "")(descr "SJ-435107RS.pretty"))
|
||||
@@ -45,6 +46,7 @@
|
||||
(lib (name "MIKILAB_SN74AXC1T45DBVR")(type "KiCad")(uri "${MIKILAB}/footprints/other/SN74AXC1T45DBVR.pretty")(options "")(descr "SN74AXC1T45DBVR.pretty"))
|
||||
(lib (name "MIKILAB_SOT95P280X145_5N")(type "KiCad")(uri "${MIKILAB}/footprints/other/SOT95P280X145-5N.pretty")(options "")(descr "SOT95P280X145-5N.pretty"))
|
||||
(lib (name "MIKILAB_TPD2E007DCKR")(type "KiCad")(uri "${MIKILAB}/footprints/other/TPD2E007DCKR.pretty")(options "")(descr "TPD2E007DCKR.pretty"))
|
||||
(lib (name "MIKILAB_TPS22965DSGR")(type "KiCad")(uri "${MIKILAB}/footprints/other/TPS22965DSGR.pretty")(options "")(descr "TPS22965DSGR.pretty"))
|
||||
(lib (name "MIKILAB_TPS22994RUKT")(type "KiCad")(uri "${MIKILAB}/footprints/other/TPS22994RUKT.pretty")(options "")(descr "TPS22994RUKT.pretty"))
|
||||
(lib (name "MIKILAB_XTAC5212IRGER")(type "KiCad")(uri "${MIKILAB}/footprints/other/XTAC5212IRGER.pretty")(options "")(descr "XTAC5212IRGER.pretty"))
|
||||
(lib (name "MIKILAB_abracon")(type "KiCad")(uri "${MIKILAB}/footprints/other/abracon.pretty")(options "")(descr "abracon.pretty"))
|
||||
@@ -108,6 +110,7 @@
|
||||
(lib (name "MIKILAB_ublox")(type "KiCad")(uri "${MIKILAB}/footprints/other/ublox.pretty")(options "")(descr "ublox.pretty"))
|
||||
(lib (name "MIKILAB_wurth")(type "KiCad")(uri "${MIKILAB}/footprints/other/wurth.pretty")(options "")(descr "wurth.pretty"))
|
||||
(lib (name "MIKILAB_zif")(type "KiCad")(uri "${MIKILAB}/footprints/other/zif.pretty")(options "")(descr "zif.pretty"))
|
||||
(lib (name "MIKILAB_AXP2101")(type "KiCad")(uri "${MIKILAB}/footprints/power/AXP2101.pretty")(options "")(descr "AXP2101.pretty"))
|
||||
(lib (name "MIKILAB_BQ25896RTWT")(type "KiCad")(uri "${MIKILAB}/footprints/power/BQ25896RTWT.pretty")(options "")(descr "BQ25896RTWT.pretty"))
|
||||
(lib (name "MIKILAB_FSC_BT1035")(type "KiCad")(uri "${MIKILAB}/footprints/rf/FSC-BT1035.pretty")(options "")(descr "FSC-BT1035.pretty"))
|
||||
(lib (name "MIKILAB_FSC_BT1058")(type "KiCad")(uri "${MIKILAB}/footprints/rf/FSC-BT1058.pretty")(options "")(descr "FSC-BT1058.pretty"))
|
||||
|
||||
@@ -0,0 +1,100 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
find_missing_3d_models.py
|
||||
===========================
|
||||
|
||||
Reports every single-part MIKILAB component that has a footprint but no
|
||||
3D model, and prints ready-to-open search links for each one (SnapEDA,
|
||||
Octopart, UltraLibrarian) to speed up manually finding and importing the
|
||||
missing model via import_component.py --update (or mikilab_lib.update_component()).
|
||||
|
||||
This does not download or scrape anything -- SnapEDA/UltraLibrarian
|
||||
require a logged-in browser session to download a model, and Octopart's
|
||||
search UI sits behind a bot-detection challenge, so there is no reliable
|
||||
unattended way to fetch these. This script only narrows down *which*
|
||||
components need attention and *where* to look.
|
||||
|
||||
Bulk, multi-package category libraries (e.g. symbols/other/ti.kicad_sym,
|
||||
which pairs with a footprints/other/ti.pretty containing many unrelated
|
||||
footprints for many different chips) are excluded -- a single 3D model
|
||||
doesn't apply to a whole such library, only to one real part.
|
||||
|
||||
Usage:
|
||||
python3 scripts/find_missing_3d_models.py [--category CAT] [--csv OUTPUT.csv]
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import csv
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from urllib.parse import quote
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
|
||||
import mikilab_lib as mikilab
|
||||
|
||||
|
||||
def missing_3d_models(category: str | None = None) -> list[mikilab.ComponentInfo]:
|
||||
"""Single-part components (exactly one footprint file in their
|
||||
.pretty dir) that have a footprint but no 3D model."""
|
||||
return [
|
||||
c for c in mikilab.list_components(category=category)
|
||||
if c.footprint_path and not c.model_paths and len(c.footprint_files) == 1
|
||||
]
|
||||
|
||||
|
||||
def search_links(query: str) -> dict[str, str]:
|
||||
q = quote(query)
|
||||
return {
|
||||
"snapeda": f"https://www.snapeda.com/search/?q={q}&search-type=parts",
|
||||
"octopart": f"https://octopart.com/search?q={q}",
|
||||
"ultralibrarian": "https://app.ultralibrarian.com/search",
|
||||
}
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description=__doc__)
|
||||
parser.add_argument("--category", choices=mikilab.lc.CATEGORIES)
|
||||
parser.add_argument("--csv", help="Also write the report to this CSV file")
|
||||
args = parser.parse_args()
|
||||
|
||||
missing = sorted(missing_3d_models(args.category), key=lambda c: (c.category, c.name))
|
||||
|
||||
if not missing:
|
||||
print("Nessun componente singolo senza modello 3D.")
|
||||
return 0
|
||||
|
||||
print(f"{len(missing)} componenti senza modello 3D:\n")
|
||||
|
||||
rows = []
|
||||
for c in missing:
|
||||
links = search_links(c.name)
|
||||
print(f"{c.category:15} {c.name}")
|
||||
print(f" footprint : {c.footprint_path}/{c.footprint_files[0]}.kicad_mod")
|
||||
print(f" SnapEDA : {links['snapeda']}")
|
||||
print(f" Octopart : {links['octopart']}")
|
||||
print(f" UltraLibrarian: {links['ultralibrarian']} (cerca a mano \"{c.name}\")")
|
||||
print()
|
||||
rows.append({
|
||||
"name": c.name,
|
||||
"category": c.category,
|
||||
"footprint": f"{c.footprint_path}/{c.footprint_files[0]}.kicad_mod",
|
||||
"snapeda_search": links["snapeda"],
|
||||
"octopart_search": links["octopart"],
|
||||
"ultralibrarian_search": links["ultralibrarian"],
|
||||
})
|
||||
|
||||
if args.csv:
|
||||
with open(args.csv, "w", newline="", encoding="utf-8") as f:
|
||||
writer = csv.DictWriter(f, fieldnames=list(rows[0].keys()))
|
||||
writer.writeheader()
|
||||
writer.writerows(rows)
|
||||
print(f"Scritto anche {args.csv}")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -110,6 +110,7 @@ def main() -> int:
|
||||
|
||||
sym_entries = lc.write_sym_lib_table(ROOT)
|
||||
fp_entries = lc.write_fp_lib_table(ROOT)
|
||||
lc.write_global_tables(ROOT)
|
||||
|
||||
print(f"Batch import from {source}")
|
||||
print()
|
||||
@@ -118,6 +119,12 @@ def main() -> int:
|
||||
|
||||
print()
|
||||
print(f"Regenerated sym-lib-table ({len(sym_entries)} libraries) and fp-lib-table ({len(fp_entries)} libraries)")
|
||||
print("Regenerated sym-lib-table.global and fp-lib-table.global")
|
||||
print(
|
||||
"NOTE: if this library is registered globally in KiCad (README.md section 1), "
|
||||
"also re-run the merge step to update ~/Library/Preferences/kicad/*/sym-lib-table "
|
||||
"and fp-lib-table, or new components will not show up there."
|
||||
)
|
||||
|
||||
ok = sum(1 for _, status, _ in results if status == "OK")
|
||||
errors = sum(1 for _, status, _ in results if status == "ERROR")
|
||||
|
||||
@@ -273,7 +273,14 @@ def main() -> int:
|
||||
lc.append_manifest_rows(ROOT, manifest_rows)
|
||||
sym_entries = lc.write_sym_lib_table(ROOT)
|
||||
fp_entries = lc.write_fp_lib_table(ROOT)
|
||||
lc.write_global_tables(ROOT)
|
||||
report.append(f"Regenerated sym-lib-table ({len(sym_entries)} libraries) and fp-lib-table ({len(fp_entries)} libraries)")
|
||||
report.append("Regenerated sym-lib-table.global and fp-lib-table.global")
|
||||
report.append(
|
||||
"NOTE: if this library is registered globally in KiCad (README.md section 1), "
|
||||
"also re-run the merge step to update ~/Library/Preferences/kicad/*/sym-lib-table "
|
||||
"and fp-lib-table, or the removed component will still resolve there."
|
||||
)
|
||||
|
||||
print("\n".join(report))
|
||||
print("\nOK.")
|
||||
@@ -327,7 +334,14 @@ def main() -> int:
|
||||
|
||||
sym_entries = lc.write_sym_lib_table(ROOT)
|
||||
fp_entries = lc.write_fp_lib_table(ROOT)
|
||||
lc.write_global_tables(ROOT)
|
||||
report.append(f"Regenerated sym-lib-table ({len(sym_entries)} libraries) and fp-lib-table ({len(fp_entries)} libraries)")
|
||||
report.append("Regenerated sym-lib-table.global and fp-lib-table.global")
|
||||
report.append(
|
||||
"NOTE: if this library is registered globally in KiCad (README.md section 1), "
|
||||
"also re-run the merge step to update ~/Library/Preferences/kicad/*/sym-lib-table "
|
||||
"and fp-lib-table, or the new component will not show up there."
|
||||
)
|
||||
|
||||
print("\n".join(report))
|
||||
print("\nOK.")
|
||||
|
||||
@@ -239,6 +239,25 @@ def write_fp_lib_table(root: Path) -> list[LibEntry]:
|
||||
return entries
|
||||
|
||||
|
||||
def write_global_tables(root: Path, env_var: str = "MIKILAB") -> tuple[list[LibEntry], list[LibEntry]]:
|
||||
"""Regenerate sym-lib-table.global / fp-lib-table.global (the
|
||||
${MIKILAB}-based variants used when this library is registered
|
||||
globally in KiCad, across every project). Mirrors write_sym_lib_table
|
||||
/ write_fp_lib_table, which only cover the ${KIPRJMOD} project
|
||||
tables -- those alone are not enough for components to show up in
|
||||
KiCad when this library is used globally (see README.md section 1)."""
|
||||
sym_entries = build_sym_table_entries(root, env_var=env_var)
|
||||
fp_entries = build_fp_table_entries(root, env_var=env_var)
|
||||
|
||||
(root / "sym-lib-table.global").write_text(
|
||||
render_lib_table("sym_lib_table", sym_entries), encoding="utf-8"
|
||||
)
|
||||
(root / "fp-lib-table.global").write_text(
|
||||
render_lib_table("fp_lib_table", fp_entries), encoding="utf-8"
|
||||
)
|
||||
return sym_entries, fp_entries
|
||||
|
||||
|
||||
LIB_ENTRY_RE = re.compile(
|
||||
r'\(lib\s*\(name\s*"([^"]*)"\)\s*\(type\s*"([^"]*)"\)\s*'
|
||||
r'\(uri\s*"([^"]*)"\)\s*\(options\s*"([^"]*)"\)\s*'
|
||||
|
||||
@@ -0,0 +1,162 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
mikilab_cli.py
|
||||
===============
|
||||
|
||||
Stable JSON-over-stdout CLI for mikilab_lib.py, for apps that are not
|
||||
Python (Swift, C++, ...) or that otherwise want to drive the MIKILAB
|
||||
library out-of-process instead of importing it directly.
|
||||
|
||||
Every invocation prints exactly one JSON object to stdout and nothing
|
||||
else (diagnostics, if any, go to stderr) -- safe to pipe straight into a
|
||||
JSON parser. Exit code is 0 iff "ok" is true.
|
||||
|
||||
On success:
|
||||
{"ok": true, "data": <command-specific object or array>}
|
||||
|
||||
On failure:
|
||||
{"ok": false, "error": "<human-readable message>"}
|
||||
|
||||
Commands:
|
||||
|
||||
add --name NAME --symbol PATH [--footprint PATH] [--model PATH] [--category CAT]
|
||||
update --name NAME --symbol PATH [--footprint PATH] [--model PATH] [--category CAT]
|
||||
remove --name NAME
|
||||
get --name NAME
|
||||
list [--category CAT]
|
||||
find --query TEXT [--category CAT]
|
||||
|
||||
Examples:
|
||||
|
||||
python3 scripts/mikilab_cli.py add --name TPS7A2018PDBVR \\
|
||||
--symbol /path/TPS7A2018PDBVR.kicad_sym \\
|
||||
--footprint /path/SOT95P280X145-5N.kicad_mod --category power
|
||||
|
||||
python3 scripts/mikilab_cli.py get --name TPS7A2018PDBVR
|
||||
|
||||
python3 scripts/mikilab_cli.py find --query tps22
|
||||
|
||||
From Swift: run as a subprocess (Process), read stdout, decode with
|
||||
JSONDecoder. From C++: popen()/posix_spawn + any JSON library (e.g.
|
||||
nlohmann::json). In both cases, check the process exit code as well as
|
||||
"ok" -- a non-zero exit always means "ok": false was printed (or, if the
|
||||
process crashed before printing anything, stdout will be empty).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import dataclasses
|
||||
import json
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
|
||||
import mikilab_lib as mikilab
|
||||
|
||||
|
||||
def _emit(payload: dict) -> int:
|
||||
print(json.dumps(payload, indent=2))
|
||||
return 0 if payload.get("ok") else 1
|
||||
|
||||
|
||||
def _ok(data) -> dict:
|
||||
if dataclasses.is_dataclass(data):
|
||||
data = dataclasses.asdict(data)
|
||||
elif isinstance(data, list):
|
||||
data = [dataclasses.asdict(x) if dataclasses.is_dataclass(x) else x for x in data]
|
||||
return {"ok": True, "data": data}
|
||||
|
||||
|
||||
def _err(message: str) -> dict:
|
||||
return {"ok": False, "error": message}
|
||||
|
||||
|
||||
def cmd_add(args) -> dict:
|
||||
result = mikilab.add_component(
|
||||
name=args.name, symbol=args.symbol, footprint=args.footprint,
|
||||
model=args.model, category=args.category,
|
||||
)
|
||||
return _ok(result)
|
||||
|
||||
|
||||
def cmd_update(args) -> dict:
|
||||
result = mikilab.update_component(
|
||||
name=args.name, symbol=args.symbol, footprint=args.footprint,
|
||||
model=args.model, category=args.category,
|
||||
)
|
||||
return _ok(result)
|
||||
|
||||
|
||||
def cmd_remove(args) -> dict:
|
||||
result = mikilab.remove_component(args.name)
|
||||
return _ok(result)
|
||||
|
||||
|
||||
def cmd_get(args) -> dict:
|
||||
result = mikilab.get_component(args.name)
|
||||
if result is None:
|
||||
return _err(f"no component named '{args.name}' found")
|
||||
return _ok(result)
|
||||
|
||||
|
||||
def cmd_list(args) -> dict:
|
||||
return _ok(mikilab.list_components(category=args.category))
|
||||
|
||||
|
||||
def cmd_find(args) -> dict:
|
||||
return _ok(mikilab.find_components(args.query, category=args.category))
|
||||
|
||||
|
||||
def main() -> int:
|
||||
parser = argparse.ArgumentParser(description="JSON CLI over mikilab_lib.py")
|
||||
sub = parser.add_subparsers(dest="command", required=True)
|
||||
|
||||
p_add = sub.add_parser("add", help="Add a new component")
|
||||
p_add.add_argument("--name", required=True)
|
||||
p_add.add_argument("--symbol", required=True)
|
||||
p_add.add_argument("--footprint")
|
||||
p_add.add_argument("--model")
|
||||
p_add.add_argument("--category", choices=mikilab.lc.CATEGORIES)
|
||||
p_add.set_defaults(func=cmd_add)
|
||||
|
||||
p_update = sub.add_parser("update", help="Replace an existing component in place (or create it)")
|
||||
p_update.add_argument("--name", required=True)
|
||||
p_update.add_argument("--symbol", required=True)
|
||||
p_update.add_argument("--footprint")
|
||||
p_update.add_argument("--model")
|
||||
p_update.add_argument("--category", choices=mikilab.lc.CATEGORIES)
|
||||
p_update.set_defaults(func=cmd_update)
|
||||
|
||||
p_remove = sub.add_parser("remove", help="Remove a component")
|
||||
p_remove.add_argument("--name", required=True)
|
||||
p_remove.set_defaults(func=cmd_remove)
|
||||
|
||||
p_get = sub.add_parser("get", help="Look up one component by exact name")
|
||||
p_get.add_argument("--name", required=True)
|
||||
p_get.set_defaults(func=cmd_get)
|
||||
|
||||
p_list = sub.add_parser("list", help="List components, optionally filtered by category")
|
||||
p_list.add_argument("--category", choices=mikilab.lc.CATEGORIES)
|
||||
p_list.set_defaults(func=cmd_list)
|
||||
|
||||
p_find = sub.add_parser("find", help="Case-insensitive substring search by name")
|
||||
p_find.add_argument("--query", required=True)
|
||||
p_find.add_argument("--category", choices=mikilab.lc.CATEGORIES)
|
||||
p_find.set_defaults(func=cmd_find)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
try:
|
||||
payload = args.func(args)
|
||||
except mikilab.MikilabError as e:
|
||||
payload = _err(str(e))
|
||||
except Exception as e: # last-resort guard so callers always get valid JSON, never a traceback on stdout
|
||||
payload = _err(f"unexpected error: {e}")
|
||||
|
||||
return _emit(payload)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
@@ -0,0 +1,308 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
mikilab_lib.py
|
||||
===============
|
||||
|
||||
Public Python API for managing the MIKILAB KiCad library: add, update,
|
||||
remove and query components. Meant to be imported directly by Python
|
||||
apps:
|
||||
|
||||
import sys
|
||||
sys.path.insert(0, "/path/to/mikylab_kikad_library/scripts")
|
||||
import mikilab_lib as mikilab
|
||||
|
||||
result = mikilab.add_component(
|
||||
name="TPS7A2018PDBVR",
|
||||
symbol="/path/to/TPS7A2018PDBVR.kicad_sym",
|
||||
footprint="/path/to/SOT95P280X145-5N.kicad_mod",
|
||||
model="/path/to/TPS7A2018PDBVR.step",
|
||||
category="power",
|
||||
)
|
||||
|
||||
Non-Python apps (Swift, C++, ...) should drive this through
|
||||
mikilab_cli.py instead, which exposes the same operations as a stable
|
||||
JSON-over-stdout CLI (see that file's docstring).
|
||||
|
||||
This module does not reimplement any import/removal logic -- it is a
|
||||
thin, typed wrapper over import_component.py's existing functions (same
|
||||
validation, collision handling, and lib-table regeneration used by every
|
||||
other entry point in this repo: add_component.py, import_batch.py,
|
||||
import_snapeda.py, import_ultralibrarian.py). It only adds:
|
||||
- structured results/exceptions instead of print()+exit code,
|
||||
- query functions (get/list/find) that nothing else in this repo
|
||||
exposes today.
|
||||
|
||||
All mutating calls (add_component, update_component, remove_component)
|
||||
regenerate sym-lib-table, fp-lib-table, sym-lib-table.global and
|
||||
fp-lib-table.global before returning, and append rows to MANIFEST.csv --
|
||||
same guarantees as the CLI scripts. They do NOT touch the real KiCad
|
||||
global tables under ~/Library/Preferences/kicad/*/ -- if this library is
|
||||
registered globally in KiCad (README.md section 1), that merge step is
|
||||
still a separate, deliberate action (see README section 1, step 3).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
from dataclasses import dataclass, field
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
|
||||
import lib_common as lc
|
||||
import import_component as ic
|
||||
|
||||
ROOT = lc.LIBRARY_ROOT
|
||||
|
||||
|
||||
class MikilabError(Exception):
|
||||
"""Raised for any library-management failure: bad component name,
|
||||
missing source file, unknown category, component not found (on
|
||||
remove/lookup), etc. str(e) is a human-readable message safe to show
|
||||
to a user or log as-is."""
|
||||
|
||||
|
||||
@dataclass
|
||||
class ComponentResult:
|
||||
"""Result of a successful add_component/update_component/remove_component call."""
|
||||
|
||||
name: str
|
||||
category: str
|
||||
action: str # "add" | "update" | "remove"
|
||||
symbol_path: str | None = None
|
||||
footprint_path: str | None = None
|
||||
footprint_status: str | None = None # NEW / UPDATED / DUPLICATE / RENAMED_COLLISION
|
||||
model_path: str | None = None
|
||||
messages: list[str] = field(default_factory=list)
|
||||
|
||||
|
||||
@dataclass
|
||||
class ComponentInfo:
|
||||
"""One entry as returned by get_component/list_components/find_components.
|
||||
|
||||
Note: this reports one entry per .kicad_sym file under symbols/, which
|
||||
is the same unit add_component/remove_component operate on. A few
|
||||
library files (e.g. category-wide symbol libraries like LED.kicad_sym)
|
||||
contain multiple symbol definitions internally; this API does not look
|
||||
inside those, it reports the file as a single entry."""
|
||||
|
||||
name: str
|
||||
category: str
|
||||
symbol_path: str
|
||||
sym_nickname: str
|
||||
footprint_path: str | None
|
||||
fp_nickname: str | None
|
||||
footprint_files: list[str]
|
||||
model_paths: list[str]
|
||||
|
||||
|
||||
def _component_info(symbol_path: Path) -> ComponentInfo:
|
||||
name = symbol_path.stem
|
||||
category = symbol_path.parent.name
|
||||
|
||||
pretty_dir = ROOT / "footprints" / category / f"{name}.pretty"
|
||||
footprint_path = None
|
||||
fp_nickname = None
|
||||
footprint_files: list[str] = []
|
||||
if pretty_dir.is_dir():
|
||||
footprint_path = str(pretty_dir.relative_to(ROOT))
|
||||
fp_nickname = lc.fp_nickname(pretty_dir)
|
||||
footprint_files = sorted(p.stem for p in pretty_dir.glob("*.kicad_mod"))
|
||||
|
||||
models_dir = ROOT / "3dmodels" / category
|
||||
model_paths = []
|
||||
if models_dir.is_dir():
|
||||
model_paths = sorted(
|
||||
str(p.relative_to(ROOT))
|
||||
for p in models_dir.glob(f"{name}.*")
|
||||
if p.suffix.lower() in lc.MODEL_EXTENSIONS
|
||||
)
|
||||
|
||||
return ComponentInfo(
|
||||
name=name,
|
||||
category=category,
|
||||
symbol_path=str(symbol_path.relative_to(ROOT)),
|
||||
sym_nickname=lc.sym_nickname(symbol_path),
|
||||
footprint_path=footprint_path,
|
||||
fp_nickname=fp_nickname,
|
||||
footprint_files=footprint_files,
|
||||
model_paths=model_paths,
|
||||
)
|
||||
|
||||
|
||||
def _resolve(path: str | Path | None) -> Path | None:
|
||||
if path is None:
|
||||
return None
|
||||
return Path(path).expanduser().resolve()
|
||||
|
||||
|
||||
def _regenerate_tables() -> None:
|
||||
lc.write_sym_lib_table(ROOT)
|
||||
lc.write_fp_lib_table(ROOT)
|
||||
lc.write_global_tables(ROOT)
|
||||
|
||||
|
||||
def _import(
|
||||
name: str,
|
||||
symbol: str | Path,
|
||||
footprint: str | Path | None,
|
||||
model: str | Path | None,
|
||||
category: str | None,
|
||||
update: bool,
|
||||
action: str,
|
||||
) -> ComponentResult:
|
||||
name = name.strip()
|
||||
if not name:
|
||||
raise MikilabError("name must not be empty")
|
||||
|
||||
symbol_path = _resolve(symbol)
|
||||
footprint_path = _resolve(footprint)
|
||||
model_path = _resolve(model)
|
||||
|
||||
for label, p in (("symbol", symbol_path), ("footprint", footprint_path), ("model", model_path)):
|
||||
if p is not None and not p.is_file():
|
||||
raise MikilabError(f"{label} does not exist or is not a file: {p}")
|
||||
|
||||
if model_path is not None and footprint_path is None:
|
||||
raise MikilabError("model requires footprint (a 3D model needs a footprint to attach to)")
|
||||
|
||||
resolved_category = category or lc.classify(name)
|
||||
if resolved_category not in lc.CATEGORIES:
|
||||
raise MikilabError(
|
||||
f"category '{resolved_category}' is not one of the known categories: "
|
||||
+ ", ".join(lc.CATEGORIES)
|
||||
)
|
||||
|
||||
manifest_rows: list[list[str]] = []
|
||||
report: list[str] = []
|
||||
|
||||
try:
|
||||
sym_dst = ic.import_symbol(name, resolved_category, symbol_path, manifest_rows, report, update=update)
|
||||
except ic.ImportError_ as e:
|
||||
lc.append_manifest_rows(ROOT, [["symbol", str(symbol_path), "", "ERROR", "", str(e)]])
|
||||
raise MikilabError(str(e)) from e
|
||||
|
||||
fp_dst = None
|
||||
fp_status = None
|
||||
model_dst = None
|
||||
|
||||
if footprint_path is not None:
|
||||
try:
|
||||
fp_dst, fp_nick, fp_name, fp_status = ic.import_footprint(
|
||||
name, resolved_category, footprint_path, manifest_rows, report, update=update
|
||||
)
|
||||
except ic.ImportError_ as e:
|
||||
lc.append_manifest_rows(ROOT, manifest_rows + [["footprint", str(footprint_path), "", "ERROR", "", str(e)]])
|
||||
raise MikilabError(str(e)) from e
|
||||
|
||||
if model_path is not None:
|
||||
model_target = fp_dst if fp_dst is not None else None
|
||||
ic.import_model(name, resolved_category, model_path, model_target, manifest_rows, report)
|
||||
model_dst = ROOT / "3dmodels" / resolved_category / f"{name}{model_path.suffix.lower()}"
|
||||
|
||||
text = sym_dst.read_text(encoding="utf-8")
|
||||
new_ref = f"{fp_nick}:{fp_name}"
|
||||
new_text, changed = lc.set_symbol_footprint_property(text, new_ref)
|
||||
if changed:
|
||||
sym_dst.write_text(new_text, encoding="utf-8")
|
||||
report.append(f" Linked symbol Footprint property -> {new_ref}")
|
||||
|
||||
lc.append_manifest_rows(ROOT, manifest_rows)
|
||||
_regenerate_tables()
|
||||
|
||||
return ComponentResult(
|
||||
name=name,
|
||||
category=resolved_category,
|
||||
action=action,
|
||||
symbol_path=str(sym_dst.relative_to(ROOT)),
|
||||
footprint_path=str(fp_dst.relative_to(ROOT)) if fp_dst is not None else None,
|
||||
footprint_status=fp_status,
|
||||
model_path=str(model_dst.relative_to(ROOT)) if model_dst is not None else None,
|
||||
messages=report,
|
||||
)
|
||||
|
||||
|
||||
def add_component(
|
||||
name: str,
|
||||
symbol: str | Path,
|
||||
footprint: str | Path | None = None,
|
||||
model: str | Path | None = None,
|
||||
category: str | None = None,
|
||||
) -> ComponentResult:
|
||||
"""Add a new component. Raises MikilabError if a component with this
|
||||
name already exists -- use update_component() to replace it in
|
||||
place instead."""
|
||||
return _import(name, symbol, footprint, model, category, update=False, action="add")
|
||||
|
||||
|
||||
def update_component(
|
||||
name: str,
|
||||
symbol: str | Path,
|
||||
footprint: str | Path | None = None,
|
||||
model: str | Path | None = None,
|
||||
category: str | None = None,
|
||||
) -> ComponentResult:
|
||||
"""Replace an existing component's symbol/footprint in place (upsert:
|
||||
if no component with this name exists yet, it is created, same as
|
||||
add_component()). `category` should normally match the component's
|
||||
current category -- this does not move files between category
|
||||
directories; use remove_component() + add_component() to
|
||||
recategorize."""
|
||||
return _import(name, symbol, footprint, model, category, update=True, action="update")
|
||||
|
||||
|
||||
def remove_component(name: str) -> ComponentResult:
|
||||
"""Remove a component: its symbol, its footprint library (if any),
|
||||
and its 3D model(s) (if any). Raises MikilabError if no component
|
||||
with this name exists."""
|
||||
name = name.strip()
|
||||
if not name:
|
||||
raise MikilabError("name must not be empty")
|
||||
|
||||
manifest_rows: list[list[str]] = []
|
||||
report: list[str] = []
|
||||
|
||||
try:
|
||||
ic.remove_component(name, manifest_rows, report)
|
||||
except ic.ImportError_ as e:
|
||||
raise MikilabError(str(e)) from e
|
||||
|
||||
category = next(
|
||||
(row[5].split("category=", 1)[1] for row in manifest_rows if row[0] == "symbol" and "category=" in row[5]),
|
||||
"",
|
||||
)
|
||||
|
||||
lc.append_manifest_rows(ROOT, manifest_rows)
|
||||
_regenerate_tables()
|
||||
|
||||
return ComponentResult(name=name, category=category, action="remove", messages=report)
|
||||
|
||||
|
||||
def get_component(name: str) -> ComponentInfo | None:
|
||||
"""Look up a component by exact name. Returns None if not found."""
|
||||
path = lc.find_symbol_by_name(ROOT, name.strip())
|
||||
if path is None:
|
||||
return None
|
||||
return _component_info(path)
|
||||
|
||||
|
||||
def list_components(category: str | None = None) -> list[ComponentInfo]:
|
||||
"""List every symbol library file under symbols/ (optionally filtered
|
||||
to one category). See ComponentInfo's docstring for what "one entry"
|
||||
means for multi-symbol category libraries."""
|
||||
if category is not None and category not in lc.CATEGORIES:
|
||||
raise MikilabError(
|
||||
f"category '{category}' is not one of the known categories: " + ", ".join(lc.CATEGORIES)
|
||||
)
|
||||
|
||||
entries = [_component_info(p) for p in lc.discover_symbol_libraries(ROOT)]
|
||||
if category is not None:
|
||||
entries = [e for e in entries if e.category == category]
|
||||
return entries
|
||||
|
||||
|
||||
def find_components(query: str, category: str | None = None) -> list[ComponentInfo]:
|
||||
"""Case-insensitive substring search over component names, optionally
|
||||
restricted to one category."""
|
||||
q = query.strip().lower()
|
||||
return [e for e in list_components(category) if q in e.name.lower()]
|
||||
@@ -197,6 +197,7 @@
|
||||
(lib (name "MIKILAB_MCU_WCH_CH32V3")(type "KiCad")(uri "${KIPRJMOD}/symbols/microcontrollers/MCU_WCH_CH32V3.kicad_sym")(options "")(descr "MCU_WCH_CH32V3"))
|
||||
(lib (name "MIKILAB_25AA1024")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/25AA1024.kicad_sym")(options "")(descr "25AA1024"))
|
||||
(lib (name "MIKILAB_74xGxx")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/74xGxx.kicad_sym")(options "")(descr "74xGxx"))
|
||||
(lib (name "MIKILAB_ADG936BCPZ")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/ADG936BCPZ.kicad_sym")(options "")(descr "ADG936BCPZ"))
|
||||
(lib (name "MIKILAB_ADG936BRUZ")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/ADG936BRUZ.kicad_sym")(options "")(descr "ADG936BRUZ"))
|
||||
(lib (name "MIKILAB_Amplifier_Current")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/Amplifier_Current.kicad_sym")(options "")(descr "Amplifier_Current"))
|
||||
(lib (name "MIKILAB_Amplifier_Difference")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/Amplifier_Difference.kicad_sym")(options "")(descr "Amplifier_Difference"))
|
||||
@@ -215,6 +216,7 @@
|
||||
(lib (name "MIKILAB_Isolator")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/Isolator.kicad_sym")(options "")(descr "Isolator"))
|
||||
(lib (name "MIKILAB_LED")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/LED.kicad_sym")(options "")(descr "LED"))
|
||||
(lib (name "MIKILAB_Motor")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/Motor.kicad_sym")(options "")(descr "Motor"))
|
||||
(lib (name "MIKILAB_OSD32MP157F_1G_BAA")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/OSD32MP157F-1G-BAA.kicad_sym")(options "")(descr "OSD32MP157F-1G-BAA"))
|
||||
(lib (name "MIKILAB_Oscillator")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/Oscillator.kicad_sym")(options "")(descr "Oscillator"))
|
||||
(lib (name "MIKILAB_PESD5V0L4UW")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/PESD5V0L4UW.kicad_sym")(options "")(descr "PESD5V0L4UW"))
|
||||
(lib (name "MIKILAB_Potentiometer_Digital")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/Potentiometer_Digital.kicad_sym")(options "")(descr "Potentiometer_Digital"))
|
||||
@@ -224,6 +226,7 @@
|
||||
(lib (name "MIKILAB_SN74AXC1T45DBVR")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/SN74AXC1T45DBVR.kicad_sym")(options "")(descr "SN74AXC1T45DBVR"))
|
||||
(lib (name "MIKILAB_Security")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/Security.kicad_sym")(options "")(descr "Security"))
|
||||
(lib (name "MIKILAB_TPD2E007DCKR")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/TPD2E007DCKR.kicad_sym")(options "")(descr "TPD2E007DCKR"))
|
||||
(lib (name "MIKILAB_TPS22965DSGR")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/TPS22965DSGR.kicad_sym")(options "")(descr "TPS22965DSGR"))
|
||||
(lib (name "MIKILAB_TPS22994RUKT")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/TPS22994RUKT.kicad_sym")(options "")(descr "TPS22994RUKT"))
|
||||
(lib (name "MIKILAB_TPS63020DSJT")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/TPS63020DSJT.kicad_sym")(options "")(descr "TPS63020DSJT"))
|
||||
(lib (name "MIKILAB_Transformer")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/Transformer.kicad_sym")(options "")(descr "Transformer"))
|
||||
@@ -232,6 +235,7 @@
|
||||
(lib (name "MIKILAB_Video")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/Video.kicad_sym")(options "")(descr "Video"))
|
||||
(lib (name "MIKILAB_XTAC5212IRGER")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/XTAC5212IRGER.kicad_sym")(options "")(descr "XTAC5212IRGER"))
|
||||
(lib (name "MIKILAB_ti")(type "KiCad")(uri "${KIPRJMOD}/symbols/other/ti.kicad_sym")(options "")(descr "ti"))
|
||||
(lib (name "MIKILAB_AXP2101")(type "KiCad")(uri "${KIPRJMOD}/symbols/power/AXP2101.kicad_sym")(options "")(descr "AXP2101"))
|
||||
(lib (name "MIKILAB_BQ25896RTWT")(type "KiCad")(uri "${KIPRJMOD}/symbols/power/BQ25896RTWT.kicad_sym")(options "")(descr "BQ25896RTWT"))
|
||||
(lib (name "MIKILAB_Battery_Management")(type "KiCad")(uri "${KIPRJMOD}/symbols/power/Battery_Management.kicad_sym")(options "")(descr "Battery_Management"))
|
||||
(lib (name "MIKILAB_Converter_ACDC")(type "KiCad")(uri "${KIPRJMOD}/symbols/power/Converter_ACDC.kicad_sym")(options "")(descr "Converter_ACDC"))
|
||||
|
||||
@@ -215,6 +215,7 @@
|
||||
(lib (name "MIKILAB_Isolator")(type "KiCad")(uri "${MIKILAB}/symbols/other/Isolator.kicad_sym")(options "")(descr "Isolator"))
|
||||
(lib (name "MIKILAB_LED")(type "KiCad")(uri "${MIKILAB}/symbols/other/LED.kicad_sym")(options "")(descr "LED"))
|
||||
(lib (name "MIKILAB_Motor")(type "KiCad")(uri "${MIKILAB}/symbols/other/Motor.kicad_sym")(options "")(descr "Motor"))
|
||||
(lib (name "MIKILAB_OSD32MP157F_1G_BAA")(type "KiCad")(uri "${MIKILAB}/symbols/other/OSD32MP157F-1G-BAA.kicad_sym")(options "")(descr "OSD32MP157F-1G-BAA"))
|
||||
(lib (name "MIKILAB_Oscillator")(type "KiCad")(uri "${MIKILAB}/symbols/other/Oscillator.kicad_sym")(options "")(descr "Oscillator"))
|
||||
(lib (name "MIKILAB_PESD5V0L4UW")(type "KiCad")(uri "${MIKILAB}/symbols/other/PESD5V0L4UW.kicad_sym")(options "")(descr "PESD5V0L4UW"))
|
||||
(lib (name "MIKILAB_Potentiometer_Digital")(type "KiCad")(uri "${MIKILAB}/symbols/other/Potentiometer_Digital.kicad_sym")(options "")(descr "Potentiometer_Digital"))
|
||||
@@ -224,6 +225,7 @@
|
||||
(lib (name "MIKILAB_SN74AXC1T45DBVR")(type "KiCad")(uri "${MIKILAB}/symbols/other/SN74AXC1T45DBVR.kicad_sym")(options "")(descr "SN74AXC1T45DBVR"))
|
||||
(lib (name "MIKILAB_Security")(type "KiCad")(uri "${MIKILAB}/symbols/other/Security.kicad_sym")(options "")(descr "Security"))
|
||||
(lib (name "MIKILAB_TPD2E007DCKR")(type "KiCad")(uri "${MIKILAB}/symbols/other/TPD2E007DCKR.kicad_sym")(options "")(descr "TPD2E007DCKR"))
|
||||
(lib (name "MIKILAB_TPS22965DSGR")(type "KiCad")(uri "${MIKILAB}/symbols/other/TPS22965DSGR.kicad_sym")(options "")(descr "TPS22965DSGR"))
|
||||
(lib (name "MIKILAB_TPS22994RUKT")(type "KiCad")(uri "${MIKILAB}/symbols/other/TPS22994RUKT.kicad_sym")(options "")(descr "TPS22994RUKT"))
|
||||
(lib (name "MIKILAB_TPS63020DSJT")(type "KiCad")(uri "${MIKILAB}/symbols/other/TPS63020DSJT.kicad_sym")(options "")(descr "TPS63020DSJT"))
|
||||
(lib (name "MIKILAB_Transformer")(type "KiCad")(uri "${MIKILAB}/symbols/other/Transformer.kicad_sym")(options "")(descr "Transformer"))
|
||||
@@ -232,6 +234,7 @@
|
||||
(lib (name "MIKILAB_Video")(type "KiCad")(uri "${MIKILAB}/symbols/other/Video.kicad_sym")(options "")(descr "Video"))
|
||||
(lib (name "MIKILAB_XTAC5212IRGER")(type "KiCad")(uri "${MIKILAB}/symbols/other/XTAC5212IRGER.kicad_sym")(options "")(descr "XTAC5212IRGER"))
|
||||
(lib (name "MIKILAB_ti")(type "KiCad")(uri "${MIKILAB}/symbols/other/ti.kicad_sym")(options "")(descr "ti"))
|
||||
(lib (name "MIKILAB_AXP2101")(type "KiCad")(uri "${MIKILAB}/symbols/power/AXP2101.kicad_sym")(options "")(descr "AXP2101"))
|
||||
(lib (name "MIKILAB_BQ25896RTWT")(type "KiCad")(uri "${MIKILAB}/symbols/power/BQ25896RTWT.kicad_sym")(options "")(descr "BQ25896RTWT"))
|
||||
(lib (name "MIKILAB_Battery_Management")(type "KiCad")(uri "${MIKILAB}/symbols/power/Battery_Management.kicad_sym")(options "")(descr "Battery_Management"))
|
||||
(lib (name "MIKILAB_Converter_ACDC")(type "KiCad")(uri "${MIKILAB}/symbols/power/Converter_ACDC.kicad_sym")(options "")(descr "Converter_ACDC"))
|
||||
|
||||
@@ -0,0 +1,144 @@
|
||||
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
|
||||
(symbol "ADG936BCPZ" (pin_names (offset 0.254)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (id 0) (at 30.48 10.16 0)
|
||||
(effects (font (size 1.524 1.524)))
|
||||
)
|
||||
(property "Value" "ADG936BCPZ" (id 1) (at 30.48 7.62 0)
|
||||
(effects (font (size 1.524 1.524)))
|
||||
)
|
||||
(property "Footprint" "MIKILAB_ADG936BCPZ:CP_20_1_ADI" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27) italic) hide)
|
||||
)
|
||||
(property "Datasheet" "https://www.analog.com/media/en/technical-documentation/data-sheets/ADG936_936R.pdf" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27) italic) hide)
|
||||
)
|
||||
(property "ki_keywords" "ADG936BCPZ" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_locked" "" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_fp_filters" "CP_20_1_ADI CP_20_1_ADI-M CP_20_1_ADI-L" (id 6) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "ADG936BCPZ_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.62 5.08)
|
||||
(xy 7.62 -30.48)
|
||||
)
|
||||
(stroke (width 0.127) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 7.62 -30.48)
|
||||
(xy 53.34 -30.48)
|
||||
)
|
||||
(stroke (width 0.127) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 53.34 -30.48)
|
||||
(xy 53.34 5.08)
|
||||
)
|
||||
(stroke (width 0.127) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 53.34 5.08)
|
||||
(xy 7.62 5.08)
|
||||
)
|
||||
(stroke (width 0.127) (type default) (color 0 0 0 0))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line (at 0 0 0) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 0 -2.54 0) (length 7.62)
|
||||
(name "RF1A" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 0 -5.08 0) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 0 -7.62 0) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 0 -10.16 0) (length 7.62)
|
||||
(name "RF1B" (effects (font (size 1.27 1.27))))
|
||||
(number "5" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 0 -12.7 0) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "6" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 0 -15.24 0) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "7" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 0 -17.78 0) (length 7.62)
|
||||
(name "RFCB" (effects (font (size 1.27 1.27))))
|
||||
(number "8" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 0 -20.32 0) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "9" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 0 -22.86 0) (length 7.62)
|
||||
(name "INB" (effects (font (size 1.27 1.27))))
|
||||
(number "10" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 -25.4 180) (length 7.62)
|
||||
(name "RF2B" (effects (font (size 1.27 1.27))))
|
||||
(number "11" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 -22.86 180) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "12" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 -20.32 180) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "13" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 -17.78 180) (length 7.62)
|
||||
(name "RF2A" (effects (font (size 1.27 1.27))))
|
||||
(number "14" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 -15.24 180) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "15" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 -12.7 180) (length 7.62)
|
||||
(name "INA" (effects (font (size 1.27 1.27))))
|
||||
(number "16" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 -10.16 180) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "17" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 -7.62 180) (length 7.62)
|
||||
(name "RFCA" (effects (font (size 1.27 1.27))))
|
||||
(number "18" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin power_in line (at 60.96 -5.08 180) (length 7.62)
|
||||
(name "VDD" (effects (font (size 1.27 1.27))))
|
||||
(number "19" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 -2.54 180) (length 7.62)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "20" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line (at 60.96 0 180) (length 7.62)
|
||||
(name "EP" (effects (font (size 1.27 1.27))))
|
||||
(number "21" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,131 @@
|
||||
|
||||
(kicad_symbol_lib (version 20211014) (generator kicad_symbol_editor)
|
||||
(symbol "TPS22965DSGR" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "U" (id 0) (at -12.7 11.16 0.0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom left))
|
||||
)
|
||||
(property "Value" "TPS22965DSGR" (id 1) (at -12.7 -14.16 0.0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom left))
|
||||
)
|
||||
(property "Footprint" "MIKILAB_TPS22965DSGR:SON50P200X200X80-9N" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "MF" "Texas Instruments" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Description" "\n \n 5.7-V, 6-A, 16-mΩ load switch with adj. rise time and optional output discharge\n \n" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Package" "WSON-8 Texas Instruments" (id 6) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Price" "None" (id 7) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "SnapEDA_Link" "https://www.snapeda.com/parts/TPS22965DSGR/Texas+Instruments/view-part/?ref=snap" (id 8) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "MP" "TPS22965DSGR" (id 9) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Availability" "In Stock" (id 10) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(property "Check_prices" "https://www.snapeda.com/parts/TPS22965DSGR/Texas+Instruments/view-part/?ref=eda" (id 11) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) (justify bottom) hide)
|
||||
)
|
||||
(symbol "TPS22965DSGR_0_0"
|
||||
(rectangle (start -12.7 -10.16) (end 12.7 10.16)
|
||||
(stroke (width 0.41)) (fill (type background))
|
||||
)
|
||||
(pin input line (at -17.78 2.54 0) (length 5.08)
|
||||
(name "ON"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "3"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin input line (at -17.78 0.0 0) (length 5.08)
|
||||
(name "VIN"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "1"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin input line (at -17.78 0.0 0) (length 5.08) hide
|
||||
(name "VIN"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "2"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin power_in line (at 17.78 7.62 180.0) (length 5.08)
|
||||
(name "VBIAS"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "4"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin output line (at 17.78 2.54 180.0) (length 5.08)
|
||||
(name "CT"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "6"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin output line (at 17.78 0.0 180.0) (length 5.08)
|
||||
(name "VOUT"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "7"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin output line (at 17.78 0.0 180.0) (length 5.08) hide
|
||||
(name "VOUT"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "8"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin power_in line (at 17.78 -5.08 180.0) (length 5.08)
|
||||
(name "GND"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "5"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin power_in line (at 17.78 -5.08 180.0) (length 5.08) hide
|
||||
(name "GND"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "9"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin power_in line (at 17.78 -5.08 180.0) (length 5.08) hide
|
||||
(name "GND"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "9_1"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
(pin power_in line (at 17.78 -5.08 180.0) (length 5.08) hide
|
||||
(name "GND"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(number "9_2"
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
@@ -0,0 +1,325 @@
|
||||
(kicad_symbol_lib
|
||||
(version 20211014)
|
||||
(generator "https://github.com/uPesy/easyeda2kicad.py")
|
||||
|
||||
(symbol "AXP2101"
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property
|
||||
"Reference"
|
||||
"U"
|
||||
(id 0)
|
||||
(at 0 33.02 0)
|
||||
(effects (font (size 1.27 1.27) ) )
|
||||
)
|
||||
(property
|
||||
"Value"
|
||||
"AXP2101"
|
||||
(id 1)
|
||||
(at 0 -30.48 0)
|
||||
(effects (font (size 1.27 1.27) ) )
|
||||
)
|
||||
(property
|
||||
"Footprint"
|
||||
"MIKILAB_AXP2101:QFN-40_L5.0-W5.0-P0.40-TL-EP3.4"
|
||||
(id 2)
|
||||
(at 0 -33.02 0)
|
||||
(effects (font (size 1.27 1.27) ) hide)
|
||||
)
|
||||
(property
|
||||
"Datasheet"
|
||||
"https://www.lcsc.com/datasheet/C3036461.pdf"
|
||||
(id 3)
|
||||
(at 0 -35.56 0)
|
||||
(effects (font (size 1.27 1.27) ) hide)
|
||||
)
|
||||
(property
|
||||
"Manufacturer"
|
||||
"x-powers(芯智汇)"
|
||||
(id 4)
|
||||
(at 0 -38.10 0)
|
||||
(effects (font (size 1.27 1.27) ) hide)
|
||||
)
|
||||
(property
|
||||
"MPN"
|
||||
"AXP2101"
|
||||
(id 5)
|
||||
(at 0 -40.64 0)
|
||||
(effects (font (size 1.27 1.27) ) hide)
|
||||
)
|
||||
(property
|
||||
"LCSC Part"
|
||||
"C3036461"
|
||||
(id 6)
|
||||
(at 0 -43.18 0)
|
||||
(effects (font (size 1.27 1.27) ) hide)
|
||||
)
|
||||
(property
|
||||
"ki_keywords"
|
||||
"Microcontroller Units (MCUs/MPUs/SOCs)"
|
||||
(id 8)
|
||||
(at 0 -45.72 0)
|
||||
(effects (font (size 1.27 1.27) ) hide)
|
||||
)
|
||||
(symbol "AXP2101_0_1"
|
||||
(rectangle
|
||||
(start -26.67 25.40)
|
||||
(end 26.67 -27.94)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type background))
|
||||
)
|
||||
(circle
|
||||
(center -25.40 24.13)
|
||||
(radius 0.38)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 22.86 0)
|
||||
(length 2.54)
|
||||
(name "CHGLED" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 20.32 0)
|
||||
(length 2.54)
|
||||
(name "VREF" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 17.78 0)
|
||||
(length 2.54)
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "3" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 15.24 0)
|
||||
(length 2.54)
|
||||
(name "FB3" (effects (font (size 1.27 1.27))))
|
||||
(number "4" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 12.70 0)
|
||||
(length 2.54)
|
||||
(name "LX3" (effects (font (size 1.27 1.27))))
|
||||
(number "5" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 10.16 0)
|
||||
(length 2.54)
|
||||
(name "VIN3" (effects (font (size 1.27 1.27))))
|
||||
(number "6" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 7.62 0)
|
||||
(length 2.54)
|
||||
(name "VIN4" (effects (font (size 1.27 1.27))))
|
||||
(number "7" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 5.08 0)
|
||||
(length 2.54)
|
||||
(name "LX4" (effects (font (size 1.27 1.27))))
|
||||
(number "8" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 2.54 0)
|
||||
(length 2.54)
|
||||
(name "FB4" (effects (font (size 1.27 1.27))))
|
||||
(number "9" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -0.00 0)
|
||||
(length 2.54)
|
||||
(name "CPULDOS" (effects (font (size 1.27 1.27))))
|
||||
(number "10" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -2.54 0)
|
||||
(length 2.54)
|
||||
(name "DLDO2/DC4SW" (effects (font (size 1.27 1.27))))
|
||||
(number "11" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -5.08 0)
|
||||
(length 2.54)
|
||||
(name "BLDO1" (effects (font (size 1.27 1.27))))
|
||||
(number "12" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -7.62 0)
|
||||
(length 2.54)
|
||||
(name "BLDOIN" (effects (font (size 1.27 1.27))))
|
||||
(number "13" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -10.16 0)
|
||||
(length 2.54)
|
||||
(name "BLDO2" (effects (font (size 1.27 1.27))))
|
||||
(number "14" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -12.70 0)
|
||||
(length 2.54)
|
||||
(name "ALDO4" (effects (font (size 1.27 1.27))))
|
||||
(number "15" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -15.24 0)
|
||||
(length 2.54)
|
||||
(name "ALDO3" (effects (font (size 1.27 1.27))))
|
||||
(number "16" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -17.78 0)
|
||||
(length 2.54)
|
||||
(name "ALDOIN" (effects (font (size 1.27 1.27))))
|
||||
(number "17" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -20.32 0)
|
||||
(length 2.54)
|
||||
(name "ALDO1" (effects (font (size 1.27 1.27))))
|
||||
(number "18" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -22.86 0)
|
||||
(length 2.54)
|
||||
(name "ALDO2" (effects (font (size 1.27 1.27))))
|
||||
(number "19" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at -29.21 -25.40 0)
|
||||
(length 2.54)
|
||||
(name "DLDO1/DC1SW" (effects (font (size 1.27 1.27))))
|
||||
(number "20" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -25.40 180)
|
||||
(length 2.54)
|
||||
(name "FB1" (effects (font (size 1.27 1.27))))
|
||||
(number "21" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -22.86 180)
|
||||
(length 2.54)
|
||||
(name "LX1" (effects (font (size 1.27 1.27))))
|
||||
(number "22" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -20.32 180)
|
||||
(length 2.54)
|
||||
(name "VIN1" (effects (font (size 1.27 1.27))))
|
||||
(number "23" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -17.78 180)
|
||||
(length 2.54)
|
||||
(name "VIN2" (effects (font (size 1.27 1.27))))
|
||||
(number "24" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -15.24 180)
|
||||
(length 2.54)
|
||||
(name "LX2" (effects (font (size 1.27 1.27))))
|
||||
(number "25" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -12.70 180)
|
||||
(length 2.54)
|
||||
(name "FB2" (effects (font (size 1.27 1.27))))
|
||||
(number "26" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -10.16 180)
|
||||
(length 2.54)
|
||||
(name "VBACKUP" (effects (font (size 1.27 1.27))))
|
||||
(number "27" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -7.62 180)
|
||||
(length 2.54)
|
||||
(name "VRTC" (effects (font (size 1.27 1.27))))
|
||||
(number "28" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -5.08 180)
|
||||
(length 2.54)
|
||||
(name "PWROK" (effects (font (size 1.27 1.27))))
|
||||
(number "29" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -2.54 180)
|
||||
(length 2.54)
|
||||
(name "PWRON" (effects (font (size 1.27 1.27))))
|
||||
(number "30" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 -0.00 180)
|
||||
(length 2.54)
|
||||
(name "TS" (effects (font (size 1.27 1.27))))
|
||||
(number "31" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 2.54 180)
|
||||
(length 2.54)
|
||||
(name "GPIO1/FB5/RTC/LDO2" (effects (font (size 1.27 1.27))))
|
||||
(number "32" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 5.08 180)
|
||||
(length 2.54)
|
||||
(name "BAT" (effects (font (size 1.27 1.27))))
|
||||
(number "33" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 7.62 180)
|
||||
(length 2.54)
|
||||
(name "VSYS" (effects (font (size 1.27 1.27))))
|
||||
(number "34" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 10.16 180)
|
||||
(length 2.54)
|
||||
(name "SW" (effects (font (size 1.27 1.27))))
|
||||
(number "35" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 12.70 180)
|
||||
(length 2.54)
|
||||
(name "VMID" (effects (font (size 1.27 1.27))))
|
||||
(number "36" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 15.24 180)
|
||||
(length 2.54)
|
||||
(name "VBUS" (effects (font (size 1.27 1.27))))
|
||||
(number "37" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 17.78 180)
|
||||
(length 2.54)
|
||||
(name "IRQ" (effects (font (size 1.27 1.27))))
|
||||
(number "38" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 20.32 180)
|
||||
(length 2.54)
|
||||
(name "SDA" (effects (font (size 1.27 1.27))))
|
||||
(number "39" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 29.21 22.86 180)
|
||||
(length 2.54)
|
||||
(name "SCK" (effects (font (size 1.27 1.27))))
|
||||
(number "40" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin unspecified line
|
||||
(at 0.00 27.94 270)
|
||||
(length 2.54)
|
||||
(name "EP" (effects (font (size 1.27 1.27))))
|
||||
(number "41" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
Reference in New Issue
Block a user