usb standardization

This commit is contained in:
Bane Stojkovic
2026-08-27 12:24:25 +02:00
parent bb3d81bb71
commit 1a5d9cda8c
15 changed files with 324 additions and 69 deletions
@@ -84,6 +84,35 @@ public abstract class AbstractMakerBoard extends AbstractTransparentComponent<Vo
public static Size ANTENNA_WIDTH = new Size(15.0d, SizeUnit.mm);
public static Size ANTENNA_LENGTH = new Size(7.0d, SizeUnit.mm);
// Standard USB Port Dimensions
public static Size USB_MICRO_WIDTH = new Size(7.5d, SizeUnit.mm);
public static Size USB_MICRO_LENGTH = new Size(5.6d, SizeUnit.mm);
public static Size USB_MICRO_OVERHANG = new Size(0.5d, SizeUnit.mm);
public static Size USB_C_WIDTH = new Size(8.94d, SizeUnit.mm);
public static Size USB_C_LENGTH = new Size(7.5d, SizeUnit.mm);
public static Size USB_C_OVERHANG = new Size(0.5d, SizeUnit.mm);
public static Size USB_A_WIDTH = new Size(14.5d, SizeUnit.mm);
public static Size USB_A_LENGTH = new Size(14.0d, SizeUnit.mm);
public static Size USB_A_DUAL_LENGTH = new Size(17.5d, SizeUnit.mm);
public static Size USB_B_WIDTH = new Size(0.45d, SizeUnit.in);
public static Size USB_B_LENGTH = new Size(0.51d, SizeUnit.in);
public static Size USB_B_OVERHANG = new Size(0.14d, SizeUnit.in);
public static Size USB_MINI_WIDTH = new Size(0.30d, SizeUnit.in);
public static Size USB_MINI_LENGTH = new Size(0.36d, SizeUnit.in);
public static Size USB_MINI_OVERHANG = new Size(0.05d, SizeUnit.in);
public enum UsbPortType {
MICRO,
TYPE_C,
TYPE_A,
TYPE_B,
MINI
}
public static Font SILK_FONT_SMALL = new Font("SansSerif", Font.PLAIN, 10);
public static Font SILK_FONT = new Font("SansSerif", Font.BOLD, 11);
public static Font SILK_FONT_LARGE = new Font("SansSerif", Font.BOLD, 13);
@@ -775,7 +804,49 @@ public abstract class AbstractMakerBoard extends AbstractTransparentComponent<Vo
}
/**
* Helper to draw a metal USB connector / shield.
* Helper to draw a standard Micro-USB connector.
*/
protected void drawMicroUsb(Graphics2D g2d, double x, double y, double w, double h, String label) {
drawMetalConnector(g2d, x, y, w, h, label);
}
/**
* Helper to draw a standard USB Type-C connector.
*/
protected void drawUsbC(Graphics2D g2d, double x, double y, double w, double h, String label) {
drawMetalConnector(g2d, x, y, w, h, label);
}
/**
* Helper to draw a standard USB Type-A connector.
*/
protected void drawUsbA(Graphics2D g2d, double x, double y, double w, double h, String label) {
drawMetalConnector(g2d, x, y, w, h, label);
}
/**
* Helper to draw a standard USB Type-B connector.
*/
protected void drawUsbB(Graphics2D g2d, double x, double y, double w, double h, String label) {
drawMetalConnector(g2d, x, y, w, h, label);
}
/**
* Helper to draw a standard Mini-USB connector.
*/
protected void drawMiniUsb(Graphics2D g2d, double x, double y, double w, double h, String label) {
drawMetalConnector(g2d, x, y, w, h, label);
}
/**
* Helper to draw any standardized USB port type.
*/
protected void drawUsbPort(Graphics2D g2d, double x, double y, double w, double h, UsbPortType type, String label) {
drawMetalConnector(g2d, x, y, w, h, label);
}
/**
* Helper to draw a metal connector / shield (e.g. RF shield cans, SD card slots, HDMI).
*/
protected void drawMetalConnector(Graphics2D g2d, double x, double y, double w, double h, String label) {
g2d.setColor(USB_METAL_COLOR);
@@ -270,10 +270,10 @@ public class ArduinoMega extends AbstractMakerBoard {
drawMountingHole(g2d, boardX + new Size(3.8d, SizeUnit.in).convertToPixels(), boardY + new Size(2.0d, SizeUnit.in).convertToPixels(), holeDiameter); // (3800, 100 mils)
// USB Type-B Jack & DC Power Jack
drawMetalConnector(g2d, boardX - new Size(0.14d, SizeUnit.in).convertToPixels(),
drawUsbB(g2d, boardX - USB_B_OVERHANG.convertToPixels(),
boardY + new Size(0.375d, SizeUnit.in).convertToPixels(),
new Size(0.515d, SizeUnit.in).convertToPixels(),
new Size(0.45d, SizeUnit.in).convertToPixels(), "USB");
USB_B_LENGTH.convertToPixels(),
USB_B_WIDTH.convertToPixels(), "USB");
drawChip(g2d, boardX - new Size(0.07d, SizeUnit.in).convertToPixels(),
boardY + new Size(1.625d, SizeUnit.in).convertToPixels(),
new Size(0.52d, SizeUnit.in).convertToPixels(),
@@ -216,9 +216,10 @@ public class ArduinoNano extends AbstractMakerBoard {
drawMountingHole(g2d, rightHoleX, bottomHoleY, holeDiameter);
// Mini USB Jack at bottom (plain metal connector)
double usbW = new Size(0.30d, SizeUnit.in).convertToPixels();
double usbH = new Size(0.36d, SizeUnit.in).convertToPixels();
drawMetalConnector(g2d, boardX + (boardW - usbW) / 2.0, boardY + boardH - usbH + new Size(0.05d, SizeUnit.in).convertToPixels(), usbW, usbH, "USB");
double usbW = USB_MINI_WIDTH.convertToPixels();
double usbH = USB_MINI_LENGTH.convertToPixels();
double usbOverhang = USB_MINI_OVERHANG.convertToPixels();
drawMiniUsb(g2d, boardX + (boardW - usbW) / 2.0, boardY + boardH - usbH + usbOverhang, usbW, usbH, "USB");
// ATmega328P TQFP square chip rotated 45 degrees
double chipSize = new Size(0.28d, SizeUnit.in).convertToPixels();
@@ -240,10 +240,10 @@ public class ArduinoUno extends AbstractMakerBoard {
drawMountingHole(g2d, boardX + new Size(2.6d, SizeUnit.in).convertToPixels(), boardY + new Size(1.8d, SizeUnit.in).convertToPixels(), holeDiameter);
// USB Type-B Jack & DC Power Jack
drawMetalConnector(g2d, boardX - new Size(0.14d, SizeUnit.in).convertToPixels(),
drawUsbB(g2d, boardX - USB_B_OVERHANG.convertToPixels(),
boardY + new Size(0.375d, SizeUnit.in).convertToPixels(),
new Size(0.51d, SizeUnit.in).convertToPixels(),
new Size(0.45d, SizeUnit.in).convertToPixels(), "USB");
USB_B_LENGTH.convertToPixels(),
USB_B_WIDTH.convertToPixels(), "USB");
drawChip(g2d, boardX - new Size(0.07d, SizeUnit.in).convertToPixels(),
boardY + new Size(1.615d, SizeUnit.in).convertToPixels(),
new Size(0.52d, SizeUnit.in).convertToPixels(),
@@ -78,15 +78,14 @@ public class ESP32DevKit extends AbstractMakerBoard {
}
public static Color ESP_BLACK = Color.decode("#3E3E3E");
public static Color ANTENNA_COLOR = Color.decode("#DAA520");
public static Color ANTENNA_BG_COLOR = Color.decode("#1E1E1E");
public static Color BUTTON_BODY_COLOR = Color.decode("#383838");
public static Color BUTTON_BORDER_COLOR = Color.decode("#666666");
public static Color BUTTON_ACTUATOR_COLOR = Color.decode("#A0A0A0");
public static Color SILK_COLOR = Color.WHITE;
public static Size BOARD_WIDTH_30 = new Size(28.2d, SizeUnit.mm);
public static Size BOARD_LENGTH_30 = new Size(51.8d, SizeUnit.mm);
public static Size BOARD_WIDTH_30 = new Size(28.33d, SizeUnit.mm);
public static Size BOARD_LENGTH_30 = new Size(51.45d, SizeUnit.mm);
public static Size TOP_MARGIN_30 = new Size(6.7d, SizeUnit.mm);
public static Size ANTENNA_LENGTH = new Size(7.0d, SizeUnit.mm);
public static Size ANTENNA_WIDTH = new Size(15.0d, SizeUnit.mm);
@@ -410,12 +409,13 @@ public class ESP32DevKit extends AbstractMakerBoard {
drawMountingHole(g2d, leftHoleX, bottomHoleY, holeDiameter);
drawMountingHole(g2d, rightHoleX, bottomHoleY, holeDiameter);
// Micro-USB Jack at bottom
double usbW = 58;
double usbH = 34;
// Micro-USB Jack at bottom (7.5mm x 5.6mm, 0.5mm overhang)
double usbW = USB_MICRO_WIDTH.convertToPixels();
double usbH = USB_MICRO_LENGTH.convertToPixels();
double usbOverhang = USB_MICRO_OVERHANG.convertToPixels();
double usbX = centerX - usbW / 2.0;
double usbY = boardY + boardH - 22;
drawMetalConnector(g2d, usbX, usbY, usbW, usbH, "USB");
double usbY = boardY + boardH - usbH + usbOverhang;
drawMicroUsb(g2d, usbX, usbY, usbW, usbH, "USB");
// EN & BOOT tactile buttons at bottom (flanking the Micro-USB port)
double btnY = boardY + boardH - 25 - shift1mm;
@@ -456,16 +456,17 @@ public class ESP32DevKit extends AbstractMakerBoard {
double btnRightX = mainX + boardW - 49 - btnW;
drawButtons(g2d, btnLeftX, btnRightX, btnY, btnW, btnH, "BOOT", "RST");
// Two USB Type-C connectors at bottom edge (UART on left, USB on right)
// Each is 7x7mm, centered 6mm from the board edge, protruding 0.5mm below
double usbSize = new Size(7.0d, SizeUnit.mm).convertToPixels();
// Two Micro-USB connectors at bottom edge (UART on left, USB on right)
// Each is 7.5x5.6mm, centered 6mm from the board edge, protruding 0.5mm below
double usbW = USB_MICRO_WIDTH.convertToPixels();
double usbH = USB_MICRO_LENGTH.convertToPixels();
double usbOverhang = USB_MICRO_OVERHANG.convertToPixels();
double usbEdgeDist = new Size(6.0d, SizeUnit.mm).convertToPixels();
double usbOverhang = new Size(0.5d, SizeUnit.mm).convertToPixels();
double usbLeftX = mainX + usbEdgeDist - usbSize / 2.0;
double usbRightX = mainX + boardW - usbEdgeDist - usbSize / 2.0;
double usbY = mainY + boardH - usbSize + usbOverhang;
drawMetalConnector(g2d, usbLeftX, usbY, usbSize, usbSize, "UART");
drawMetalConnector(g2d, usbRightX, usbY, usbSize, usbSize, "USB");
double usbLeftX = mainX + usbEdgeDist - usbW / 2.0;
double usbRightX = mainX + boardW - usbEdgeDist - usbW / 2.0;
double usbY = mainY + boardH - usbH + usbOverhang;
drawMicroUsb(g2d, usbLeftX, usbY, usbW, usbH, "UART");
drawMicroUsb(g2d, usbRightX, usbY, usbW, usbH, "USB");
// Silkscreen
g2d.setColor(SILK_COLOR);
@@ -495,12 +496,13 @@ public class ESP32DevKit extends AbstractMakerBoard {
double shieldY = mainY + 8;
drawMetalConnector(g2d, shieldX, shieldY, shieldW, shieldH, "ESP32-WROOM-32");
// Micro-USB Jack at bottom
double usbW = 58;
double usbH = 34;
// Micro-USB Jack at bottom (7.5mm x 5.6mm, 0.5mm overhang)
double usbW = USB_MICRO_WIDTH.convertToPixels();
double usbH = USB_MICRO_LENGTH.convertToPixels();
double usbOverhang = USB_MICRO_OVERHANG.convertToPixels();
double usbX = centerX - usbW / 2.0;
double usbY = mainY + mainH - 22;
drawMetalConnector(g2d, usbX, usbY, usbW, usbH, "USB");
double usbY = mainY + mainH - usbH + usbOverhang;
drawMicroUsb(g2d, usbX, usbY, usbW, usbH, "USB");
// EN & BOOT tactile buttons at bottom
double btnY = mainY + mainH - 25;
@@ -211,12 +211,13 @@ public class ESP8266NodeMCU extends AbstractMakerBoard {
// ESP-12 Metal shield module below antenna
drawMetalConnector(g2d, shieldX, shieldY, shieldW, shieldH, "ESP8266");
// Micro-USB Jack at bottom
double usbW = 54;
double usbH = 32;
// Micro-USB Jack at bottom (7.5mm x 5.6mm, 0.5mm overhang)
double usbW = USB_MICRO_WIDTH.convertToPixels();
double usbH = USB_MICRO_LENGTH.convertToPixels();
double usbOverhang = USB_MICRO_OVERHANG.convertToPixels();
double usbX = (x + rowSpacing / 2.0) - usbW / 2.0;
double usbY = boardY + boardH - 22;
drawMetalConnector(g2d, usbX, usbY, usbW, usbH, "USB");
double usbY = boardY + boardH - usbH + usbOverhang;
drawMicroUsb(g2d, usbX, usbY, usbW, usbH, "USB");
// RST & FLASH tactile buttons at bottom (flanking the Micro-USB port)
double btnW = 18;
@@ -212,15 +212,15 @@ public class RaspberryPi extends AbstractMakerBoard {
// USB & Ethernet Ports on the right edge
// USB 3.0 (top): center Y = 9.0 mm from top edge (47.0 mm from bottom edge)
drawMetalConnector(g2d, boardX + boardW - new Size(14.5d, SizeUnit.mm).convertToPixels(),
drawUsbA(g2d, boardX + boardW - new Size(14.5d, SizeUnit.mm).convertToPixels(),
boardY + new Size(2.0d, SizeUnit.mm).convertToPixels(),
new Size(17.5d, SizeUnit.mm).convertToPixels(),
USB_A_DUAL_LENGTH.convertToPixels(),
new Size(14.0d, SizeUnit.mm).convertToPixels(), "USB 3.0");
// USB 2.0 (middle): center Y = 26.9 mm from top edge (29.1 mm from bottom edge)
drawMetalConnector(g2d, boardX + boardW - new Size(14.5d, SizeUnit.mm).convertToPixels(),
drawUsbA(g2d, boardX + boardW - new Size(14.5d, SizeUnit.mm).convertToPixels(),
boardY + new Size(19.9d, SizeUnit.mm).convertToPixels(),
new Size(17.5d, SizeUnit.mm).convertToPixels(),
USB_A_DUAL_LENGTH.convertToPixels(),
new Size(14.0d, SizeUnit.mm).convertToPixels(), "USB 2.0");
// Ethernet (bottom): center Y = 45.8 mm from top edge (10.2 mm from bottom edge)
@@ -256,10 +256,11 @@ public class RaspberryPi extends AbstractMakerBoard {
// Bottom edge: USB-C Power & Micro-HDMI connectors
// PWR (USB-C): center X = 11.2 mm
drawMetalConnector(g2d, boardX + new Size(6.7d, SizeUnit.mm).convertToPixels(),
double usbCW = USB_C_WIDTH.convertToPixels();
double usbCH = USB_C_LENGTH.convertToPixels();
drawUsbC(g2d, boardX + new Size(11.2d, SizeUnit.mm).convertToPixels() - usbCW / 2.0,
boardY + boardH - new Size(6.5d, SizeUnit.mm).convertToPixels(),
new Size(9.0d, SizeUnit.mm).convertToPixels(),
new Size(7.5d, SizeUnit.mm).convertToPixels(), "PWR");
usbCW, usbCH, "PWR");
// HDMI0: center X = 25.8 mm
drawMetalConnector(g2d, boardX + new Size(22.05d, SizeUnit.mm).convertToPixels(),
@@ -206,10 +206,10 @@ public class RaspberryPiPico extends AbstractMakerBoard {
if (!outlineMode) {
// Micro USB Connector
double usbW = new Size(7.5d, SizeUnit.mm).convertToPixels();
double usbH = new Size(5.6d, SizeUnit.mm).convertToPixels();
double usbW = USB_MICRO_WIDTH.convertToPixels();
double usbH = USB_MICRO_LENGTH.convertToPixels();
double usbOverhang = new Size(1.3d, SizeUnit.mm).convertToPixels();
drawMetalConnector(g2d, boardX + (boardW - usbW) / 2.0, boardY - usbOverhang, usbW, usbH, "USB");
drawMicroUsb(g2d, boardX + (boardW - usbW) / 2.0, boardY - usbOverhang, usbW, usbH, "USB");
// BOOTSEL button
double btnW = new Size(3.8d, SizeUnit.mm).convertToPixels();
@@ -220,16 +220,17 @@ public class RaspberryPiZero extends AbstractMakerBoard {
drawMetalConnector(g2d, hdmiX, hdmiY, hdmiW, hdmiH, "HDMI");
// Micro USB Data (center at X = 41.4mm, width = 7.5mm, height = 5.6mm, overhang = 1.4mm)
double usbW = new Size(7.5d, SizeUnit.mm).convertToPixels();
double usbH = new Size(5.6d, SizeUnit.mm).convertToPixels();
double usbW = USB_MICRO_WIDTH.convertToPixels();
double usbH = USB_MICRO_LENGTH.convertToPixels();
double usbOverhang = new Size(1.4d, SizeUnit.mm).convertToPixels();
double usbX = boardX + new Size(41.4d, SizeUnit.mm).convertToPixels() - usbW / 2.0;
double usbY = boardY + boardH - new Size(4.2d, SizeUnit.mm).convertToPixels();
drawMetalConnector(g2d, usbX, usbY, usbW, usbH, "USB");
double usbY = boardY + boardH - usbH + usbOverhang;
drawMicroUsb(g2d, usbX, usbY, usbW, usbH, "USB");
// Micro USB Power (center at X = 54.0mm, width = 7.5mm, height = 5.6mm, overhang = 1.4mm)
double pwrX = boardX + new Size(54.0d, SizeUnit.mm).convertToPixels() - usbW / 2.0;
double pwrY = boardY + boardH - new Size(4.2d, SizeUnit.mm).convertToPixels();
drawMetalConnector(g2d, pwrX, pwrY, usbW, usbH, "PWR");
double pwrY = boardY + boardH - usbH + usbOverhang;
drawMicroUsb(g2d, pwrX, pwrY, usbW, usbH, "PWR");
// Camera Connector (CSI) on right edge
double csiW = new Size(3.2d, SizeUnit.mm).convertToPixels();
@@ -333,11 +333,11 @@ public class Teensy extends AbstractMakerBoard {
double centerX = boardX + boardW / 2.0;
// Micro-USB connector on top edge (overhangs edge slightly)
double usbW = new Size(7.5d, SizeUnit.mm).convertToPixels();
double usbH = new Size(5.6d, SizeUnit.mm).convertToPixels();
double usbW = USB_MICRO_WIDTH.convertToPixels();
double usbH = USB_MICRO_LENGTH.convertToPixels();
double usbX = centerX - usbW / 2.0;
double usbY = boardY - new Size(1.0d, SizeUnit.mm).convertToPixels();
drawMetalConnector(g2d, usbX, usbY, usbW, usbH, "USB");
drawMicroUsb(g2d, usbX, usbY, usbW, usbH, "USB");
// Main MCU chip (NXP i.MX RT1062 BGA)
double chipW = (version == TeensyVersion.Teensy_4_0)
@@ -81,9 +81,9 @@ public class WemosD1Mini extends AbstractMakerBoard {
public static Size SHIELD_WIDTH = new Size(15.0d, SizeUnit.mm);
public static Size SHIELD_LENGTH = new Size(14.54d, SizeUnit.mm);
public static Size USB_WIDTH = new Size(5.8d, SizeUnit.mm);
public static Size USB_LENGTH = new Size(3.3d, SizeUnit.mm);
public static Size USB_CUTOUT_WIDTH = new Size(6.8d, SizeUnit.mm);
public static Size USB_WIDTH = USB_MICRO_WIDTH;
public static Size USB_LENGTH = USB_MICRO_LENGTH;
public static Size USB_CUTOUT_WIDTH = new Size(8.0d, SizeUnit.mm);
public static Size USB_CUTOUT_DEPTH = new Size(1.8d, SizeUnit.mm);
public static Size RST_CUTOUT_WIDTH = new Size(2.0d, SizeUnit.mm);
@@ -263,12 +263,13 @@ public class WemosD1Mini extends AbstractMakerBoard {
// ESP8266 Metal Shield (main chip module)
drawMetalConnector(g2d, shieldX, shieldY, shieldW, shieldH, "ESP8266");
// Micro-USB Jack drawn flush with the bottom edge of the board
// Micro-USB Jack drawn with 0.5mm overhang at the bottom edge
double usbW = USB_WIDTH.convertToPixels();
double usbH = USB_LENGTH.convertToPixels();
double usbOverhang = USB_MICRO_OVERHANG.convertToPixels();
double usbX = (x + rowSpacing / 2.0) - usbW / 2.0;
double usbY = bottomY - usbH;
drawMetalConnector(g2d, usbX, usbY, usbW, usbH, "USB");
double usbY = bottomY - usbH + usbOverhang;
drawMicroUsb(g2d, usbX, usbY, usbW, usbH, "USB");
// Reset button: small black rectangle touching the board in the bottom left cutout, moved 2mm up
double rstCutoutW = RST_CUTOUT_WIDTH.convertToPixels();
@@ -167,7 +167,7 @@ public class MB102PowerSupply extends AbstractMakerBoard {
g2d.fill(new Ellipse2D.Double(boardX + 1, boardY + boardH / 2.0 - 5, 10, 10));
// USB-A Connector (Center)
drawMetalConnector(g2d, boardX + 45, boardY + boardH / 2.0 - 22, 48, 44, "USB");
drawUsbA(g2d, boardX + 45, boardY + boardH / 2.0 - 22, 48, 44, "USB");
// Push Button Latch Switch (Left-ish)
g2d.setColor(Color.LIGHT_GRAY);
@@ -154,7 +154,7 @@ public class TP4056Charger extends AbstractMakerBoard {
if (!outlineMode) {
// USB Type-C Connector (Left Edge)
drawMetalConnector(g2d, boardX - 6, boardY + boardH / 2.0 - 18, 32, 36, "Type-C");
drawUsbC(g2d, boardX - 6, boardY + boardH / 2.0 - 18, 32, 36, "Type-C");
// TP4056 Linear Charger IC (SOP-8)
drawChip(g2d, boardX + 60, boardY + 20, 26, 32, "4056");
@@ -0,0 +1,115 @@
package org.diylc.components.maker;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import org.diylc.components.AbstractMakerBoard;
import org.diylc.components.AbstractMakerBoard.UsbPortType;
import org.diylc.core.measures.SizeUnit;
import org.junit.Assert;
import org.junit.Test;
public class UsbPortTest {
@Test
public void testUsbConstants() {
// Micro-USB
Assert.assertEquals(7.5d, AbstractMakerBoard.USB_MICRO_WIDTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_MICRO_WIDTH.getUnit());
Assert.assertEquals(5.6d, AbstractMakerBoard.USB_MICRO_LENGTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_MICRO_LENGTH.getUnit());
Assert.assertEquals(0.5d, AbstractMakerBoard.USB_MICRO_OVERHANG.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_MICRO_OVERHANG.getUnit());
// USB Type-C
Assert.assertEquals(8.94d, AbstractMakerBoard.USB_C_WIDTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_C_WIDTH.getUnit());
Assert.assertEquals(7.5d, AbstractMakerBoard.USB_C_LENGTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_C_LENGTH.getUnit());
Assert.assertEquals(0.5d, AbstractMakerBoard.USB_C_OVERHANG.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_C_OVERHANG.getUnit());
// USB Type-A
Assert.assertEquals(14.5d, AbstractMakerBoard.USB_A_WIDTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_A_WIDTH.getUnit());
Assert.assertEquals(14.0d, AbstractMakerBoard.USB_A_LENGTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_A_LENGTH.getUnit());
Assert.assertEquals(17.5d, AbstractMakerBoard.USB_A_DUAL_LENGTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_A_DUAL_LENGTH.getUnit());
// USB Type-B
Assert.assertEquals(0.45d, AbstractMakerBoard.USB_B_WIDTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.in, AbstractMakerBoard.USB_B_WIDTH.getUnit());
Assert.assertEquals(0.51d, AbstractMakerBoard.USB_B_LENGTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.in, AbstractMakerBoard.USB_B_LENGTH.getUnit());
Assert.assertEquals(0.14d, AbstractMakerBoard.USB_B_OVERHANG.getValue(), 0.001);
Assert.assertEquals(SizeUnit.in, AbstractMakerBoard.USB_B_OVERHANG.getUnit());
// Mini-USB
Assert.assertEquals(0.30d, AbstractMakerBoard.USB_MINI_WIDTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.in, AbstractMakerBoard.USB_MINI_WIDTH.getUnit());
Assert.assertEquals(0.36d, AbstractMakerBoard.USB_MINI_LENGTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.in, AbstractMakerBoard.USB_MINI_LENGTH.getUnit());
Assert.assertEquals(0.05d, AbstractMakerBoard.USB_MINI_OVERHANG.getValue(), 0.001);
Assert.assertEquals(SizeUnit.in, AbstractMakerBoard.USB_MINI_OVERHANG.getUnit());
}
@Test
public void testUsbPortTypeEnum() {
Assert.assertEquals(5, UsbPortType.values().length);
Assert.assertNotNull(UsbPortType.valueOf("MICRO"));
Assert.assertNotNull(UsbPortType.valueOf("TYPE_C"));
Assert.assertNotNull(UsbPortType.valueOf("TYPE_A"));
Assert.assertNotNull(UsbPortType.valueOf("TYPE_B"));
Assert.assertNotNull(UsbPortType.valueOf("MINI"));
}
@Test
public void testUsbDrawingMethods() {
BufferedImage img = new BufferedImage(400, 400, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = img.createGraphics();
TestMakerBoard board = new TestMakerBoard();
board.testDrawMethods(g2d);
g2d.dispose();
}
static class TestMakerBoard extends AbstractMakerBoard {
private static final long serialVersionUID = 1L;
@Override
protected void updateControlPoints() {}
@Override
public java.awt.Shape getBodyShape() {
return null;
}
@Override
public void draw(Graphics2D g2d, org.diylc.core.ComponentState componentState, boolean outlineMode,
org.diylc.core.Project project, org.diylc.core.IDrawingObserver drawingObserver) {}
@Override
public void drawIcon(Graphics2D g2d, int width, int height) {}
public void testDrawMethods(Graphics2D g2d) {
// Horizontal and Vertical tests for all types
for (UsbPortType type : UsbPortType.values()) {
drawUsbPort(g2d, 10, 10, 60, 40, type, type.name());
drawUsbPort(g2d, 100, 10, 40, 60, type, type.name());
drawUsbPort(g2d, 10, 100, 60, 40, type, null);
drawUsbPort(g2d, 100, 100, 40, 60, type, "");
}
// Direct method calls
drawMicroUsb(g2d, 10, 200, 60, 40, "USB");
drawMicroUsb(g2d, 100, 200, 40, 60, "USB");
drawUsbC(g2d, 10, 260, 60, 40, "Type-C");
drawUsbC(g2d, 100, 260, 40, 60, "Type-C");
drawUsbA(g2d, 10, 320, 60, 40, "USB 3.0");
drawUsbA(g2d, 100, 320, 40, 60, "USB 2.0");
drawUsbB(g2d, 200, 10, 60, 40, "USB");
drawMiniUsb(g2d, 200, 80, 60, 40, "USB");
drawMetalConnector(g2d, 200, 150, 60, 40, "SHIELD");
drawUsbPort(g2d, 200, 220, 60, 40, null, "FALLBACK");
}
}
}
@@ -4,6 +4,7 @@ import java.awt.Shape;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import org.diylc.components.AbstractMakerBoard;
import org.diylc.core.measures.Size;
import org.diylc.core.measures.SizeUnit;
import org.junit.Assert;
@@ -177,9 +178,9 @@ public class ESP32DevKitTest {
Assert.assertNotNull(body);
Rectangle2D bounds = body.getBounds2D();
double expectedWidth = new Size(28.2d, SizeUnit.mm).convertToPixels();
double expectedHeight = new Size(51.8d, SizeUnit.mm).convertToPixels();
double expectedTopMargin = new Size(6.7d, SizeUnit.mm).convertToPixels();
double expectedWidth = ESP32DevKit.BOARD_WIDTH_30.convertToPixels();
double expectedHeight = ESP32DevKit.BOARD_LENGTH_30.convertToPixels();
double expectedTopMargin = ESP32DevKit.TOP_MARGIN_30.convertToPixels();
Assert.assertEquals(expectedWidth, bounds.getWidth(), 0.1);
Assert.assertEquals(expectedHeight, bounds.getHeight(), 0.1);
@@ -197,8 +198,8 @@ public class ESP32DevKitTest {
Assert.assertNotNull(body);
Rectangle2D bounds = body.getBounds2D();
double expectedWidth = new Size(27.9d, SizeUnit.mm).convertToPixels();
double expectedTotalLength = new Size(54.4d, SizeUnit.mm).convertToPixels();
double expectedWidth = ESP32DevKit.BOARD_WIDTH_38.convertToPixels();
double expectedTotalLength = ESP32DevKit.BOARD_LENGTH_38.convertToPixels();
Assert.assertEquals(expectedWidth, bounds.getWidth(), 0.1);
Assert.assertEquals(expectedTotalLength, bounds.getHeight(), 0.1);
@@ -422,4 +423,65 @@ public class ESP32DevKitTest {
g2d.dispose();
}
@Test
public void testUsbConstants() {
Assert.assertEquals(7.5d, AbstractMakerBoard.USB_MICRO_WIDTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_MICRO_WIDTH.getUnit());
Assert.assertEquals(5.6d, AbstractMakerBoard.USB_MICRO_LENGTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_MICRO_LENGTH.getUnit());
Assert.assertEquals(0.5d, AbstractMakerBoard.USB_MICRO_OVERHANG.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_MICRO_OVERHANG.getUnit());
Assert.assertEquals(8.94d, AbstractMakerBoard.USB_C_WIDTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_C_WIDTH.getUnit());
Assert.assertEquals(7.5d, AbstractMakerBoard.USB_C_LENGTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_C_LENGTH.getUnit());
Assert.assertEquals(14.5d, AbstractMakerBoard.USB_A_WIDTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_A_WIDTH.getUnit());
Assert.assertEquals(14.0d, AbstractMakerBoard.USB_A_LENGTH.getValue(), 0.001);
Assert.assertEquals(SizeUnit.mm, AbstractMakerBoard.USB_A_LENGTH.getUnit());
}
@Test
public void testAllESP32VersionsDrawing() {
java.awt.image.BufferedImage img = new java.awt.image.BufferedImage(400, 400, java.awt.image.BufferedImage.TYPE_INT_ARGB);
java.awt.Graphics2D g2d = img.createGraphics();
org.diylc.core.Project project = new org.diylc.core.Project();
org.diylc.core.IDrawingObserver observer = new org.diylc.core.IDrawingObserver() {
@Override public void startTracking() {}
@Override public void stopTracking() {}
@Override public void startTrackingContinuityArea(boolean positive) {}
@Override public void stopTrackingContinuityArea() {}
@Override public boolean isTrackingContinuityArea() { return false; }
@Override public void setContinuityMarker(String marker) {}
};
for (ESP32DevKit.DevKitVersion version : ESP32DevKit.DevKitVersion.values()) {
ESP32DevKit devKit = new ESP32DevKit();
devKit.setVersion(version);
devKit.setControlPoint(new Point2D.Double(100, 100), 0);
// Normal mode with solder pads
devKit.setHeaders(false);
devKit.draw(g2d, org.diylc.core.ComponentState.NORMAL, false, project, observer);
// Normal mode with pin headers
devKit.setHeaders(true);
devKit.draw(g2d, org.diylc.core.ComponentState.NORMAL, false, project, observer);
// Selected mode
devKit.draw(g2d, org.diylc.core.ComponentState.SELECTED, false, project, observer);
// Outline mode
devKit.draw(g2d, org.diylc.core.ComponentState.NORMAL, true, project, observer);
}
g2d.dispose();
}
}