# pcmhammer/pcmhammer architecture

> Architecture diagram of the GitHub repository pcmhammer/pcmhammer, 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/pcmhammer/pcmhammer
- Repository: https://github.com/pcmhammer/pcmhammer

## Overview

PCM Hammer is a GM powertrain-control-module toolset for identifying modules, reading and writing calibration/firmware images, and logging vehicle data. The principal workflow selects an interface, connects to a PCM, performs an operation, and saves or reports the result. The graph emphasizes the shared library and its Windows, CLI, and experimental Uno clients. README capabilities supplement the sampled source; unsampled UI and protocol wiring is shown only where supported by the repository structure or documented product workflow.

Main entry points: [`Apps/UI/PcmHammerCLI/Program.cs`](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/UI/PcmHammerCLI/Program.cs) (CLI), [`Apps/PcmLibrary/Devices/Device.cs`](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Devices/Device.cs) (Device transport), [`Apps/PcmLibrary/ReadManager.cs`](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/ReadManager.cs) (Read manager), [`Apps/PcmLibrary/Vehicle.cs`](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Vehicle.cs) (Vehicle API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["User clients"]
  node_winforms["Windows app<br/>[MainForm.cs]"]
  node_loggerapp["Logger app<br/>[MainForm.cs]"]
  node_cli["CLI<br/>[Program.cs]"]
  node_unoui["Uno app<br/>[Presentation]"]
end

subgraph group_operations["PCM operations"]
  node_vehicle["Vehicle API<br/>[Vehicle.cs]"]
  node_read["Read manager<br/>[ReadManager.cs]"]
  node_write["Write manager<br/>[WriteManager.cs]"]
  node_detect["PCM detection"]
  node_logging["Data logging<br/>[Logger.cs]"]
  node_kernel["Kernel transfer<br/>[KernelWriter.cs]"]
end

subgraph group_communications["Communication"]
  node_devicefactory["Device selection<br/>[DeviceFactory.cs]"]
  node_device["Device transport<br/>[Device.cs]"]
  node_query["Message exchange<br/>[Query.cs]"]
  node_commands["CAN commands<br/>[CanCommands.cs]"]
  node_j2534["J2534 adapter<br/>[J2534.cs]"]
end

subgraph group_artifacts["Data and logging"]
  node_package["PCM packages<br/>[PcmPackage.cs]"]
  node_store["Package store<br/>[PackageStore.cs]"]
  node_format["Package formats<br/>[PhzFormat.cs]"]
  node_logfile["Log output<br/>[LogFileWriter.cs]"]
end

node_user(("Operator"))
node_vehiclepcm(("GM PCM"))
node_interface["OBD interface"]

node_user -->|"uses"| node_winforms
node_user -->|"uses"| node_loggerapp
node_user -->|"runs"| node_cli
node_user -.->|"uses"| node_unoui
node_cli -->|"selects device"| node_devicefactory
node_cli -->|"starts read"| node_read
node_cli -->|"starts write"| node_write
node_devicefactory -->|"creates"| node_device
node_device -->|"communicates"| node_interface
node_vehicle -->|"uses transport"| node_device
node_query -->|"sends and receives"| node_device
node_vehiclepcm -->|"exchanges messages"| node_device
node_read -->|"requests data"| node_commands
node_read -->|"builds image"| node_package
node_read -->|"saves package"| node_store
node_store -->|"encodes package"| node_format
node_write -->|"loads image"| node_package
node_write -->|"runs transfer"| node_kernel
node_kernel -->|"issues commands"| node_commands
node_logging -->|"collects data"| node_commands
node_logging -->|"writes log"| node_logfile
node_vehicle -->|"identifies PCM"| node_detect
node_detect -->|"queries identity"| node_vehiclepcm
node_winforms -->|"operates"| node_vehicle
node_loggerapp -->|"configures logging"| node_logging
node_cli -->|"operates"| node_vehicle

click node_winforms "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/UI/WindowsForms/PcmHammer/MainForm.cs"
click node_loggerapp "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/UI/WindowsForms/PcmLogger/MainForm.cs"
click node_cli "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/UI/PcmHammerCLI/Program.cs"
click node_unoui "https://github.com/pcmhammer/pcmhammer/tree/develop/Apps/UI/UnoUI/PcmHacking.UnoUI/Presentation"
click node_vehicle "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Vehicle.cs"
click node_read "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/ReadManager.cs"
click node_write "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/WriteManager.cs"
click node_detect "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Vehicle.Detection.cs"
click node_logging "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Logging/Logger.cs"
click node_devicefactory "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibraryWindowsApi/Devices/DeviceFactory.cs"
click node_device "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Devices/Device.cs"
click node_query "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Misc/Query.cs"
click node_commands "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/CanCommands.cs"
click node_j2534 "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/J2534DotNet/J2534DotNet/J2534.cs"
click node_package "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Package/PcmPackage.cs"
click node_store "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Package/PackageStore.cs"
click node_format "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Package/PhzFormat.cs"
click node_kernel "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/KernelWriter.cs"
click node_logfile "https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Logging/LogFileWriter.cs"

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_winforms,node_loggerapp,node_cli,node_unoui toneBlue
class node_vehicle,node_read,node_write,node_detect,node_logging,node_kernel toneAmber
class node_devicefactory,node_device,node_query,node_commands,node_j2534 toneMint
class node_package,node_store,node_format,node_logfile toneRose
class node_user,node_vehiclepcm,node_interface toneIndigo
```

## Components

### User clients

- [Windows app](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/UI/WindowsForms/PcmHammer/MainForm.cs): `Apps/UI/WindowsForms/PcmHammer/MainForm.cs`
- [Logger app](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/UI/WindowsForms/PcmLogger/MainForm.cs): `Apps/UI/WindowsForms/PcmLogger/MainForm.cs`
- [CLI](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/UI/PcmHammerCLI/Program.cs): `Apps/UI/PcmHammerCLI/Program.cs`
- [Uno app](https://github.com/pcmhammer/pcmhammer/tree/develop/Apps/UI/UnoUI/PcmHacking.UnoUI/Presentation): `Apps/UI/UnoUI/PcmHacking.UnoUI/Presentation`

### PCM operations

- [Vehicle API](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Vehicle.cs): `Apps/PcmLibrary/Vehicle.cs`
- [Read manager](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/ReadManager.cs): `Apps/PcmLibrary/ReadManager.cs`
- [Write manager](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/WriteManager.cs): `Apps/PcmLibrary/WriteManager.cs`
- [PCM detection](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Vehicle.Detection.cs): `Apps/PcmLibrary/Vehicle.Detection.cs`
- [Data logging](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Logging/Logger.cs): `Apps/PcmLibrary/Logging/Logger.cs`
- [Kernel transfer](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/KernelWriter.cs): `Apps/PcmLibrary/KernelWriter.cs`

### Communication

- [Device selection](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibraryWindowsApi/Devices/DeviceFactory.cs): `Apps/PcmLibraryWindowsApi/Devices/DeviceFactory.cs`
- [Device transport](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Devices/Device.cs): `Apps/PcmLibrary/Devices/Device.cs`
- [Message exchange](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Misc/Query.cs): `Apps/PcmLibrary/Misc/Query.cs`
- [CAN commands](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/CanCommands.cs): `Apps/PcmLibrary/CanCommands.cs`
- [J2534 adapter](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/J2534DotNet/J2534DotNet/J2534.cs): `Apps/J2534DotNet/J2534DotNet/J2534.cs`

### Data and logging

- [PCM packages](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Package/PcmPackage.cs): `Apps/PcmLibrary/Package/PcmPackage.cs`
- [Package store](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Package/PackageStore.cs): `Apps/PcmLibrary/Package/PackageStore.cs`
- [Package formats](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Package/PhzFormat.cs): `Apps/PcmLibrary/Package/PhzFormat.cs`
- [Log output](https://github.com/pcmhammer/pcmhammer/blob/develop/Apps/PcmLibrary/Logging/LogFileWriter.cs): `Apps/PcmLibrary/Logging/LogFileWriter.cs`

### Other components

- **Operator**
- **GM PCM**
- **OBD interface**

## Connections

- Operator → Windows app: uses
- Operator → Logger app: uses
- Operator → CLI: runs
- Operator → Uno app: uses
- CLI → Device selection: selects device
- CLI → Read manager: starts read
- CLI → Write manager: starts write
- Device selection → Device transport: creates
- Device transport → OBD interface: communicates
- Vehicle API → Device transport: uses transport
- Message exchange → Device transport: sends and receives
- GM PCM → Device transport: exchanges messages
- Read manager → CAN commands: requests data
- Read manager → PCM packages: builds image
- Read manager → Package store: saves package
- Package store → Package formats: encodes package
- Write manager → PCM packages: loads image
- Write manager → Kernel transfer: runs transfer
- Kernel transfer → CAN commands: issues commands
- Data logging → CAN commands: collects data
- Data logging → Log output: writes log
- Vehicle API → PCM detection: identifies PCM
- PCM detection → GM PCM: queries identity
- Windows app → Vehicle API: operates
- Logger app → Data logging: configures logging
- CLI → Vehicle API: operates
