Controllers (#1068)

* initial

* more components

* fixes

* Update TreePanel.java

* fix boost converter

* Improve wrapping of component names

* Update ULN2003Driver.java

* Update NRF24L01Transceiver.java

* imp

* updates

* improvements

* more components

* arduino

* uno

* icon

* cleanup

* mega

* mega

* improveent

* nano

* esp boards

* esp

* esp32

* esp32

* Update ESP8266NodeMCU.java

* d1

* Update WemosD1Mini.java

* pi

* consolidate esp32

* pi pico updates

* pi zero

* Update RaspberryPiZero.java

* pi pico

* cleanup

* pi improvements

* consolidate pins

* antenna consolidation

* improve solder pads

* teensy

* headers

* teensy fix, test cleanup

* s3

* Update ESP32DevKit.java

* usb standardization

* pico w

* button standardization

* arduino improvements

* Update AbstractMakerBoard.java

* Update RaspberryPiZero.java

* Update RaspberryPi.java

* pi 3

* pi 5 improvements

* Update RaspberryPiZero.java

* fix tests

* esp pinout fix

* Update ESP32DevKit.java

* pin name improvements

* Create tier-1-modern-boards.md

* new versions

* pinouts

* nano improvements

* sanitize node names

* label improvements

* minima fixes

* arduino uno labels

* nano labels

* Update ArduinoNano.java

* mega

* mega

* comment out future stuff

* release prep

* Update RaspberryPiPico.java

* Refactor abstract class

* labeling improvement

* label offset fixes

* Update Teensy.java

* consolidate tests

* micro variants

* Update RaspberryPi.java
This commit is contained in:
Bane Stojkovic
2026-09-11 11:08:15 +02:00
committed by GitHub
parent 8080b8d70b
commit 89ce96b6c8
81 changed files with 19542 additions and 15 deletions
+1 -1
View File
@@ -7,7 +7,7 @@
<parent>
<groupId>org.diylc</groupId>
<artifactId>diylc-parent</artifactId>
<version>6.4.0</version>
<version>6.5.0</version>
</parent>
<artifactId>diylc-core</artifactId>
@@ -72,6 +72,7 @@ public class NetlistBuilder {
if (!(c instanceof IContinuity && !(c instanceof ISwitch)) && !(c instanceof ICommonNode)) {
// regular components, create a node per control point
for (int i = 0; i < c.getControlPointCount(); i++) {
// Node renders the name through Node.sanitizeNodeName; here it only marks a named point
String nodeName = c.getControlPointNodeName(i);
if (c.isControlPointSticky(i) && nodeName != null
&& (!includeSwitches || !ISwitch.class.isAssignableFrom(type.getInstanceClass()))) {
@@ -52,7 +52,28 @@ public class Node implements Comparable<Node> {
}
public String getDisplayName() {
return component.getControlPointNodeName(pointIndex);
return sanitizeNodeName(component.getControlPointNodeName(pointIndex));
}
/**
* Strips the parenthesized annotation off a raw control point name, so a netlist reads
* <code>MCU1.D11</code> rather than <code>MCU1.D11 (~, MOSI)</code>. The bare name identifies the
* pin; everything in parentheses documents its alternate functions and only adds noise here.
*
* <p>A trailing disambiguator such as the <code>_1</code> in <code>GND_1</code> is deliberately
* kept, because those mark genuinely different pins that a netlist has to tell apart.
*
* @param nodeName raw name from {@link IDIYComponent#getControlPointNodeName(int)}
* @return the sanitized name, or null if the raw name was null
*/
public static String sanitizeNodeName(String nodeName) {
if (nodeName == null) {
return null;
}
int parenIndex = nodeName.indexOf('(');
String sanitized = (parenIndex == -1 ? nodeName : nodeName.substring(0, parenIndex)).trim();
// Never let sanitizing leave a pin nameless
return sanitized.isEmpty() ? nodeName.trim() : sanitized;
}
public Point2D getPoint2D() {
@@ -5080,4 +5080,279 @@
</org.diylc.core.Template>
</list>
</entry>
<entry>
<string>org.diylc.components.micro.ArduinoNano</string>
<list>
<org.diylc.core.Template>
<name>Nano (ATmega328)</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoNano_-NanoVersion>CLASSIC</diylc.micro.ArduinoNano_-NanoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Nano 33 BLE</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoNano_-NanoVersion>NANO_33_BLE</diylc.micro.ArduinoNano_-NanoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Nano 33 BLE Sense</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoNano_-NanoVersion>NANO_33_BLE_SENSE</diylc.micro.ArduinoNano_-NanoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Nano 33 IoT</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoNano_-NanoVersion>NANO_33_IOT</diylc.micro.ArduinoNano_-NanoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Nano ESP32</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoNano_-NanoVersion>NANO_ESP32</diylc.micro.ArduinoNano_-NanoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Nano Every</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoNano_-NanoVersion>EVERY</diylc.micro.ArduinoNano_-NanoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Nano R4</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoNano_-NanoVersion>NANO_R4</diylc.micro.ArduinoNano_-NanoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Nano RP2040 Connect</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoNano_-NanoVersion>NANO_RP2040_CONNECT</diylc.micro.ArduinoNano_-NanoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
</list>
</entry>
<entry>
<string>org.diylc.components.micro.ArduinoUno</string>
<list>
<org.diylc.core.Template>
<name>Leonardo</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoUno_-ArduinoUnoVersion>LEONARDO</diylc.micro.ArduinoUno_-ArduinoUnoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>UNO R3</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoUno_-ArduinoUnoVersion>REV3</diylc.micro.ArduinoUno_-ArduinoUnoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>UNO R4 Minima</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoUno_-ArduinoUnoVersion>R4_MINIMA</diylc.micro.ArduinoUno_-ArduinoUnoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>UNO R4 WiFi</name>
<values>
<entry><string>Version</string><diylc.micro.ArduinoUno_-ArduinoUnoVersion>R4_WIFI</diylc.micro.ArduinoUno_-ArduinoUnoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
</list>
</entry>
<entry>
<string>org.diylc.components.micro.ESP32DevKit</string>
<list>
<org.diylc.core.Template>
<name>ESP32 DevKit V1 (30-Pin)</name>
<values>
<entry><string>Version</string><diylc.micro.ESP32DevKit_-DevKitVersion>DevKit_V1_30Pin</diylc.micro.ESP32DevKit_-DevKitVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>ESP32 DevKitC V4 (38-Pin)</name>
<values>
<entry><string>Version</string><diylc.micro.ESP32DevKit_-DevKitVersion>DevKitC_V4_38Pin</diylc.micro.ESP32DevKit_-DevKitVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>ESP32-S3 DevKitC-1 (44-Pin)</name>
<values>
<entry><string>Version</string><diylc.micro.ESP32DevKit_-DevKitVersion>ESP32_S3_DevKitC_44Pin</diylc.micro.ESP32DevKit_-DevKitVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>ESP32-C3 DevKitM-1 (30-Pin)</name>
<values>
<entry><string>Version</string><diylc.micro.ESP32DevKit_-DevKitVersion>ESP32_C3_DevKitM_1</diylc.micro.ESP32DevKit_-DevKitVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>ESP32-C6 DevKitC-1 (32-Pin)</name>
<values>
<entry><string>Version</string><diylc.micro.ESP32DevKit_-DevKitVersion>ESP32_C6_DevKitC_1</diylc.micro.ESP32DevKit_-DevKitVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
</list>
</entry>
<entry>
<string>org.diylc.components.micro.RaspberryPi</string>
<list>
<org.diylc.core.Template>
<name>Pi 3 (Model B+)</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPi_-RaspberryPiVersion>PI_3_B</diylc.micro.RaspberryPi_-RaspberryPiVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Pi 4 (Model B)</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPi_-RaspberryPiVersion>PI_4_B</diylc.micro.RaspberryPi_-RaspberryPiVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Pi 5</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPi_-RaspberryPiVersion>PI_5</diylc.micro.RaspberryPi_-RaspberryPiVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
</list>
</entry>
<entry>
<string>org.diylc.components.micro.RaspberryPiPico</string>
<list>
<org.diylc.core.Template>
<name>Pi Pico</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPiPico_-PicoVersion>PICO</diylc.micro.RaspberryPiPico_-PicoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Pi Pico W</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPiPico_-PicoVersion>PICO_W</diylc.micro.RaspberryPiPico_-PicoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Pi Pico 2</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPiPico_-PicoVersion>PICO_2</diylc.micro.RaspberryPiPico_-PicoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Pi Pico 2 W</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPiPico_-PicoVersion>PICO_2_W</diylc.micro.RaspberryPiPico_-PicoVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
</list>
</entry>
<entry>
<string>org.diylc.components.micro.RaspberryPiZero</string>
<list>
<org.diylc.core.Template>
<name>Pi Zero</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPiZero_-ZeroVersion>PI_ZERO</diylc.micro.RaspberryPiZero_-ZeroVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Pi Zero W</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPiZero_-ZeroVersion>PI_ZERO_W</diylc.micro.RaspberryPiZero_-ZeroVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Pi Zero 2 W</name>
<values>
<entry><string>Version</string><diylc.micro.RaspberryPiZero_-ZeroVersion>PI_ZERO_2_W</diylc.micro.RaspberryPiZero_-ZeroVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
</list>
</entry>
<entry>
<string>org.diylc.components.micro.Teensy</string>
<list>
<org.diylc.core.Template>
<name>Teensy 3.2</name>
<values>
<entry><string>Version</string><diylc.micro.Teensy_-TeensyVersion>Teensy_3_2</diylc.micro.Teensy_-TeensyVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Teensy 4.0</name>
<values>
<entry><string>Version</string><diylc.micro.Teensy_-TeensyVersion>Teensy_4_0</diylc.micro.Teensy_-TeensyVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
<org.diylc.core.Template>
<name>Teensy 4.1</name>
<values>
<entry><string>Version</string><diylc.micro.Teensy_-TeensyVersion>Teensy_4_1</diylc.micro.Teensy_-TeensyVersion></entry>
</values>
<defaultFlag>false</defaultFlag>
<createdOn>2026-09-12T00:00:00.0000000</createdOn>
</org.diylc.core.Template>
</list>
</entry>
</map>
@@ -412,5 +412,57 @@
</changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version>
<org.diylc.appframework.update.Version>
<versionNumber>
<major>6</major>
<minor>5</minor>
<build>0</build>
</versionNumber>
<releaseDate>2026-09-04 00:00:00.000 CET</releaseDate>
<name></name>
<changes>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Arduino Mega 2560</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Arduino Nano - ATmega328, 33 BLE, 33 BLE Sense, 33 IoT, ESP32, Every, R4, RP3040 Connect</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Arduino Uno - R3, R4 Minima, R4 WiFi, Leonardo</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>ESP32 - DevKit V1 (30-pin), DevKitC V4 (38-pin), S3 DevKitC-1 (44-pin), C3 DevKitM-1 (30-pin), C6 DevKitC-1 (32-pin)</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>ESP8266 NodeMCU</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Raspberry Pi - 3B+, 4B, 5</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Raspberry Pi - Pico, Pico W, Pico 2, Pico 2 W</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Raspberry Pi - Zero, Zero 2, Zero 2 W</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Teensy - 3.2, 4.0, 4.1</description>
</org.diylc.appframework.update.Change>
<org.diylc.appframework.update.Change>
<changeType>NEW_FEATURE</changeType>
<description>Wemos D1 Mini</description>
</org.diylc.appframework.update.Change>
</changes>
<url>https://github.com/bancika/diy-layout-creator/releases</url>
</org.diylc.appframework.update.Version>
</a>
</java.util.Arrays_-ArrayList>
@@ -0,0 +1,51 @@
/*
*
* DIY Layout Creator (DIYLC).
* Copyright (c) 2009-2025 held jointly by the individual authors.
*
* This file is part of DIYLC.
*
* DIYLC is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* DIYLC is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with DIYLC. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.diylc.netlist;
import org.junit.Assert;
import org.junit.Test;
public class NodeNameTest {
@Test
public void testSanitizeNodeName() {
// The annotation in parentheses is stripped, the pin name is kept
Assert.assertEquals("D11", Node.sanitizeNodeName("D11 (~, MOSI)"));
Assert.assertEquals("A5", Node.sanitizeNodeName("A5 (SCL)"));
Assert.assertEquals("D3", Node.sanitizeNodeName("D3 (~)"));
Assert.assertEquals("VIN", Node.sanitizeNodeName("VIN (3.6-5.5V)"));
Assert.assertEquals("GPIO2/SDA", Node.sanitizeNodeName("GPIO2/SDA (Pin 3)"));
// Names without an annotation are untouched
Assert.assertEquals("VIN", Node.sanitizeNodeName("VIN"));
Assert.assertEquals("Tip", Node.sanitizeNodeName("Tip"));
Assert.assertEquals("3.3V", Node.sanitizeNodeName("3.3V"));
// Trailing disambiguators stay: these mark genuinely different pins
Assert.assertEquals("GND_1", Node.sanitizeNodeName("GND_1"));
Assert.assertEquals("5V_ICSP", Node.sanitizeNodeName("5V_ICSP"));
// Degenerate input never leaves a pin nameless
Assert.assertEquals("(only annotation)", Node.sanitizeNodeName("(only annotation)"));
Assert.assertNull(Node.sanitizeNodeName(null));
}
}