# danieldeer/hdp architecture

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

- Interactive diagram: https://gitdiagram.com/danieldeer/hdp
- Repository: https://github.com/danieldeer/hdp

## Overview

HDP is a command-line utility that turns raw binary input and a JSON packet specification into a generated binary packet. The CLI reads both inputs, invokes packet generation, and writes the result. Packet assembly handles field layout, input embedding, padding, length fields, and CRCs using the declared field and length-encoding types. The tree also contains CCSDS packet and transfer-frame specifications; their runtime use is not shown in the excerpts, so no connection to them is asserted.

Main entry points: [`src/main/java/com/hirschdaniel/hdp/Generator.java`](https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/Generator.java) (Generator CLI), [`src/main/java/com/hirschdaniel/hdp/PacketGenerator.java`](https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/PacketGenerator.java) (Packet generator), [`src/main/java/com/hirschdaniel/hdp/PacketSpecification.java`](https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/PacketSpecification.java) (Packet specification), [`src/main/java/com/hirschdaniel/hdp/FieldType.java`](https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/FieldType.java) (Field types)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli_io["CLI and files"]
  node_input_data["Raw input"]
  node_spec_file["JSON spec file"]
  node_generator_cli["Generator CLI<br/>[Generator.java]"]
  node_output_file["Binary output"]
end

subgraph group_packet_model["Packet model"]
  node_packet_spec["Packet specification"]
  node_field_type["Field types<br/>[FieldType.java]"]
  node_length_encoding["Length encodings"]
end

subgraph group_assembly["Packet assembly"]
  node_packet_generator["Packet generator"]
end

subgraph group_spec_examples["CCSDS specifications"]
  node_tm_packet_spec["TM packet spec"]
  node_tm_frame_spec["TM frame spec"]
end

node_user(("CLI user"))

node_user -->|"invokes"| node_generator_cli
node_generator_cli -->|"reads bytes"| node_input_data
node_generator_cli -->|"loads JSON"| node_spec_file
node_generator_cli -->|"deserializes as"| node_packet_spec
node_generator_cli -->|"constructs and runs"| node_packet_generator
node_packet_generator -->|"uses fields"| node_packet_spec
node_packet_generator -->|"dispatches by"| node_field_type
node_packet_generator -->|"encodes lengths"| node_length_encoding
node_generator_cli -->|"writes packet"| node_output_file

click node_generator_cli "https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/Generator.java"
click node_packet_spec "https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/PacketSpecification.java"
click node_field_type "https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/FieldType.java"
click node_length_encoding "https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/LengthEncoding.java"
click node_packet_generator "https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/PacketGenerator.java"
click node_tm_packet_spec "https://github.com/danieldeer/hdp/blob/main/src/main/resources/specs/ccsds-tm-space-packet.json"
click node_tm_frame_spec "https://github.com/danieldeer/hdp/blob/main/src/main/resources/specs/ccsds-tm-transfer-frame.json"

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_input_data,node_spec_file,node_generator_cli,node_output_file,node_user toneBlue
class node_packet_spec,node_field_type,node_length_encoding toneAmber
class node_packet_generator toneMint
class node_tm_packet_spec,node_tm_frame_spec toneRose
```

## Components

### CLI and files

- **Raw input**
- **JSON spec file**
- [Generator CLI](https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/Generator.java): `src/main/java/com/hirschdaniel/hdp/Generator.java`
- **Binary output**

### Packet model

- [Packet specification](https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/PacketSpecification.java): `src/main/java/com/hirschdaniel/hdp/PacketSpecification.java`
- [Field types](https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/FieldType.java): `src/main/java/com/hirschdaniel/hdp/FieldType.java`
- [Length encodings](https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/LengthEncoding.java): `src/main/java/com/hirschdaniel/hdp/LengthEncoding.java`

### Packet assembly

- [Packet generator](https://github.com/danieldeer/hdp/blob/main/src/main/java/com/hirschdaniel/hdp/PacketGenerator.java): `src/main/java/com/hirschdaniel/hdp/PacketGenerator.java`

### CCSDS specifications

- [TM packet spec](https://github.com/danieldeer/hdp/blob/main/src/main/resources/specs/ccsds-tm-space-packet.json): `src/main/resources/specs/ccsds-tm-space-packet.json`
- [TM frame spec](https://github.com/danieldeer/hdp/blob/main/src/main/resources/specs/ccsds-tm-transfer-frame.json): `src/main/resources/specs/ccsds-tm-transfer-frame.json`

### Other components

- **CLI user**

## Connections

- CLI user → Generator CLI: invokes (evidence: `src/main/java/com/hirschdaniel/hdp/Generator.java`)
- Generator CLI → Raw input: reads bytes (evidence: `src/main/java/com/hirschdaniel/hdp/Generator.java`)
- Generator CLI → JSON spec file: loads JSON (evidence: `src/main/java/com/hirschdaniel/hdp/Generator.java`)
- Generator CLI → Packet specification: deserializes as (evidence: `src/main/java/com/hirschdaniel/hdp/Generator.java`)
- Generator CLI → Packet generator: constructs and runs (evidence: `src/main/java/com/hirschdaniel/hdp/Generator.java`)
- Packet generator → Packet specification: uses fields (evidence: `src/main/java/com/hirschdaniel/hdp/PacketGenerator.java`)
- Packet generator → Field types: dispatches by (evidence: `src/main/java/com/hirschdaniel/hdp/PacketGenerator.java`)
- Packet generator → Length encodings: encodes lengths (evidence: `src/main/java/com/hirschdaniel/hdp/PacketGenerator.java`)
- Generator CLI → Binary output: writes packet (evidence: `src/main/java/com/hirschdaniel/hdp/Generator.java`)
