# yiaobang/serialporttoolfx architecture

> Architecture diagram of the GitHub repository yiaobang/serialporttoolfx, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/yiaobang/serialporttoolfx
- Repository: https://github.com/yiaobang/serialporttoolfx

## Overview

SerialPortToolFX is a JavaFX serial-port debugging application. The main workflow is to discover and configure a port, open a connection, send and receive ASCII or HEX data, inspect or save traffic, and optionally load a JSON device simulator that replies to matching packets. Separate windows support parallel device sessions; the UI also provides internationalization and theme switching. The graph follows documented capabilities and sampled call sites; listener internals and some UI wiring were not sampled, so uncertain links are omitted.

Main entry points: [`src/main/java/com/yiaobang/serialPortToolFX/view/SerialPortView.java`](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/view/SerialPortView.java) (Serial window), [`src/main/java/com/yiaobang/serialPortToolFX/serial/SerialComm.java`](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/serial/SerialComm.java) (Serial session), [`src/main/java/com/yiaobang/serialPortToolFX/model/DeviceSimulator.java`](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/DeviceSimulator.java) (Device simulator), [`src/main/java/com/yiaobang/serialPortToolFX/serial/PortMonitor.java`](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/serial/PortMonitor.java) (Port monitor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application UI"]
  node_launcher["App launcher<br/>[AppLauncher.java]"]
  node_view["Serial window"]
end

subgraph group_serial["Serial Communication"]
  node_portmonitor["Port monitor<br/>[PortMonitor.java]"]
  node_serialcomm["Serial session<br/>[SerialComm.java]"]
  node_listener["Data listener"]
end

subgraph group_data["Traffic and Simulation"]
  node_format["ASCII / HEX format<br/>[CodeFormat.java]"]
  node_buffer["Receive buffer<br/>[ByteBuffer.java]"]
  node_writer["Traffic file writer<br/>[DataWriteFile.java]"]
  node_simulator["Device simulator"]
  node_fixedsim["Fixed-length framing"]
  node_delimsim["Delimiter framing"]
end

subgraph group_framework["UI Framework"]
  node_theme["Theme selection<br/>[Theme.java]"]
  node_i18n["Localization<br/>[I18nUtils.java]"]
  node_fx["JavaFX helpers<br/>[FX.java]"]
end

node_user(("Engineer"))
node_ports(("System serial ports"))
node_device(("Serial device"))
node_localfiles(("Local files"))
node_config["Simulator JSON"]

node_user -->|"operates"| node_view
node_launcher -->|"starts monitoring"| node_portmonitor
node_launcher -->|"opens window"| node_view
node_portmonitor -->|"scans"| node_ports
node_view -->|"reads port list"| node_portmonitor
node_view -->|"configures session"| node_serialcomm
node_view -->|"sends bytes"| node_serialcomm
node_view -->|"converts input"| node_format
node_view -->|"formats display"| node_format
node_view -->|"switches theme"| node_theme
node_view -->|"loads translations"| node_i18n
node_view -->|"creates windows"| node_fx
node_serialcomm -->|"creates listener"| node_listener
node_serialcomm -->|"finds port"| node_ports
node_serialcomm -->|"reads and writes"| node_device
node_serialcomm -->|"stores received data"| node_buffer
node_view -->|"clears display buffer"| node_buffer
node_serialcomm -->|"records traffic"| node_writer
node_writer -->|"writes traffic"| node_localfiles
node_user -->|"selects configuration"| node_config
node_view -->|"loads simulator"| node_serialcomm
node_serialcomm -->|"creates and feeds"| node_simulator
node_simulator -->|"reads rules"| node_config
node_simulator -->|"creates fixed framing"| node_fixedsim
node_simulator -->|"creates delimiter framing"| node_delimsim
node_simulator -->|"writes matched reply"| node_serialcomm

click node_launcher "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/AppLauncher.java"
click node_view "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/view/SerialPortView.java"
click node_portmonitor "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/serial/PortMonitor.java"
click node_serialcomm "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/serial/SerialComm.java"
click node_listener "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/serial/SerialDataListener.java"
click node_format "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/utils/CodeFormat.java"
click node_buffer "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/ByteBuffer.java"
click node_writer "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/DataWriteFile.java"
click node_simulator "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/DeviceSimulator.java"
click node_fixedsim "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/FixedLengthSimulator.java"
click node_delimsim "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/DelimiterBasedSimulator.java"
click node_theme "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/framework/theme/Theme.java"
click node_i18n "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/utils/I18nUtils.java"
click node_fx "https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/framework/core/FX.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_launcher,node_view toneBlue
class node_portmonitor,node_serialcomm,node_listener toneAmber
class node_format,node_buffer,node_writer,node_simulator,node_fixedsim,node_delimsim toneMint
class node_theme,node_i18n,node_fx toneRose
class node_user,node_ports,node_device,node_localfiles,node_config toneIndigo
```

## Components

### Application UI

- [App launcher](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/AppLauncher.java): `src/main/java/com/yiaobang/serialPortToolFX/AppLauncher.java`
- [Serial window](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/view/SerialPortView.java): `src/main/java/com/yiaobang/serialPortToolFX/view/SerialPortView.java`

### Serial Communication

- [Port monitor](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/serial/PortMonitor.java): `src/main/java/com/yiaobang/serialPortToolFX/serial/PortMonitor.java`
- [Serial session](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/serial/SerialComm.java): `src/main/java/com/yiaobang/serialPortToolFX/serial/SerialComm.java`
- [Data listener](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/serial/SerialDataListener.java): `src/main/java/com/yiaobang/serialPortToolFX/serial/SerialDataListener.java`

### Traffic and Simulation

- [ASCII / HEX format](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/utils/CodeFormat.java): `src/main/java/com/yiaobang/serialPortToolFX/utils/CodeFormat.java`
- [Receive buffer](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/ByteBuffer.java): `src/main/java/com/yiaobang/serialPortToolFX/model/ByteBuffer.java`
- [Traffic file writer](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/DataWriteFile.java): `src/main/java/com/yiaobang/serialPortToolFX/model/DataWriteFile.java`
- [Device simulator](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/DeviceSimulator.java): `src/main/java/com/yiaobang/serialPortToolFX/model/DeviceSimulator.java`
- [Fixed-length framing](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/FixedLengthSimulator.java): `src/main/java/com/yiaobang/serialPortToolFX/model/FixedLengthSimulator.java`
- [Delimiter framing](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/model/DelimiterBasedSimulator.java): `src/main/java/com/yiaobang/serialPortToolFX/model/DelimiterBasedSimulator.java`

### UI Framework

- [Theme selection](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/framework/theme/Theme.java): `src/main/java/com/yiaobang/serialPortToolFX/framework/theme/Theme.java`
- [Localization](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/utils/I18nUtils.java): `src/main/java/com/yiaobang/serialPortToolFX/utils/I18nUtils.java`
- [JavaFX helpers](https://github.com/yiaobang/serialporttoolfx/blob/master/src/main/java/com/yiaobang/serialPortToolFX/framework/core/FX.java): `src/main/java/com/yiaobang/serialPortToolFX/framework/core/FX.java`

### Other components

- **Engineer**
- **System serial ports**
- **Serial device**
- **Local files**
- **Simulator JSON**

## Connections

- Engineer → Serial window: operates
- App launcher → Port monitor: starts monitoring
- App launcher → Serial window: opens window
- Port monitor → System serial ports: scans
- Serial window → Port monitor: reads port list
- Serial window → Serial session: configures session
- Serial window → Serial session: sends bytes
- Serial window → ASCII / HEX format: converts input
- Serial window → ASCII / HEX format: formats display
- Serial window → Theme selection: switches theme
- Serial window → Localization: loads translations
- Serial window → JavaFX helpers: creates windows
- Serial session → Data listener: creates listener
- Serial session → System serial ports: finds port
- Serial session → Serial device: reads and writes
- Serial session → Receive buffer: stores received data
- Serial window → Receive buffer: clears display buffer
- Serial session → Traffic file writer: records traffic
- Traffic file writer → Local files: writes traffic
- Engineer → Simulator JSON: selects configuration
- Serial window → Serial session: loads simulator
- Serial session → Device simulator: creates and feeds
- Device simulator → Simulator JSON: reads rules
- Device simulator → Fixed-length framing: creates fixed framing
- Device simulator → Delimiter framing: creates delimiter framing
- Device simulator → Serial session: writes matched reply
