# forth32/balongflash architecture

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

- Interactive diagram: https://gitdiagram.com/forth32/balongflash
- Repository: https://github.com/forth32/balongflash

## Overview

balongflash is a command-line utility for flashing Huawei Balong V7 modems and LTE routers. The documented workflow accepts BIN/EXE firmware or component files from a directory, supports extraction and signed or unsigned images, and flashes in download mode. The sampled partition code confirms partition discovery and zlib decompression; source-index references identify the main program’s dependencies, but do not show its call sequence, so uncertain internal links are dashed.

Main entry points: [`balong_flash.c`](https://github.com/forth32/balongflash/blob/master/balong_flash.c) (CLI application), [`ptable.c`](https://github.com/forth32/balongflash/blob/master/ptable.c) (Partition handling), [`flasher.c`](https://github.com/forth32/balongflash/blob/master/flasher.c) (Flash orchestration), [`util.c`](https://github.com/forth32/balongflash/blob/master/util.c) (Device utilities)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_application["Application workflow"]
  node_main["CLI application<br/>[balong_flash.c]"]
  node_options["Option parsing<br/>[getopt.c]"]
end

subgraph group_firmware["Firmware processing"]
  node_partition["Partition handling<br/>[ptable.c]"]
  node_signature["Signature checks<br/>[signver.c]"]
  node_flash["Flash orchestration<br/>[flasher.c]"]
end

subgraph group_device["Device communication"]
  node_utilities["Device utilities<br/>[util.c]"]
  node_serial_linux["Linux serial I/O<br/>[hdlcio_linux.c]"]
  node_serial_windows["Windows serial I/O<br/>[hdlcio_win32.c]"]
end

subgraph group_compression["Compression libraries"]
  node_zlib["zlib compression"]
  node_lzma["LZMA decoder<br/>[LzmaDec.c]"]
  node_lzma_alloc["LZMA allocation<br/>[Alloc.c]"]
end

node_operator(("Operator"))
node_modem(("Balong device"))

node_operator -->|"runs"| node_main
node_main -.->|"parses options"| node_options
node_main -.->|"handles firmware"| node_partition
node_main -.->|"checks signatures"| node_signature
node_main -.->|"initiates flashing"| node_flash
node_flash -.->|"flashes firmware"| node_modem
node_partition -->|"decompresses images"| node_zlib
node_partition -.->|"references checks"| node_signature
node_flash -.->|"uses device operations"| node_utilities
node_utilities -.->|"uses transport"| node_serial_linux
node_utilities -.->|"uses transport"| node_serial_windows
node_partition -.->|"decodes images"| node_lzma
node_lzma -->|"uses allocation"| node_lzma_alloc

click node_main "https://github.com/forth32/balongflash/blob/master/balong_flash.c"
click node_options "https://github.com/forth32/balongflash/blob/master/winbuild/balong_flash/getopt.c"
click node_partition "https://github.com/forth32/balongflash/blob/master/ptable.c"
click node_signature "https://github.com/forth32/balongflash/blob/master/signver.c"
click node_flash "https://github.com/forth32/balongflash/blob/master/flasher.c"
click node_utilities "https://github.com/forth32/balongflash/blob/master/util.c"
click node_serial_linux "https://github.com/forth32/balongflash/blob/master/hdlcio_linux.c"
click node_serial_windows "https://github.com/forth32/balongflash/blob/master/hdlcio_win32.c"
click node_zlib "https://github.com/forth32/balongflash/tree/master/winbuild/zlib"
click node_lzma "https://github.com/forth32/balongflash/blob/master/lzma/LzmaDec.c"
click node_lzma_alloc "https://github.com/forth32/balongflash/blob/master/lzma/Alloc.c"

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_main,node_options toneBlue
class node_partition,node_signature,node_flash toneAmber
class node_utilities,node_serial_linux,node_serial_windows toneMint
class node_zlib,node_lzma,node_lzma_alloc toneRose
class node_operator,node_modem toneIndigo
```

## Components

### Application workflow

- [CLI application](https://github.com/forth32/balongflash/blob/master/balong_flash.c): `balong_flash.c`
- [Option parsing](https://github.com/forth32/balongflash/blob/master/winbuild/balong_flash/getopt.c): `winbuild/balong_flash/getopt.c`

### Firmware processing

- [Partition handling](https://github.com/forth32/balongflash/blob/master/ptable.c): `ptable.c`
- [Signature checks](https://github.com/forth32/balongflash/blob/master/signver.c): `signver.c`
- [Flash orchestration](https://github.com/forth32/balongflash/blob/master/flasher.c): `flasher.c`

### Device communication

- [Device utilities](https://github.com/forth32/balongflash/blob/master/util.c): `util.c`
- [Linux serial I/O](https://github.com/forth32/balongflash/blob/master/hdlcio_linux.c): `hdlcio_linux.c`
- [Windows serial I/O](https://github.com/forth32/balongflash/blob/master/hdlcio_win32.c): `hdlcio_win32.c`

### Compression libraries

- [zlib compression](https://github.com/forth32/balongflash/tree/master/winbuild/zlib): `winbuild/zlib`
- [LZMA decoder](https://github.com/forth32/balongflash/blob/master/lzma/LzmaDec.c): `lzma/LzmaDec.c`
- [LZMA allocation](https://github.com/forth32/balongflash/blob/master/lzma/Alloc.c): `lzma/Alloc.c`

### Other components

- **Operator**
- **Balong device**

## Connections

- Operator → CLI application: runs
- CLI application → Option parsing: parses options
- CLI application → Partition handling: handles firmware
- CLI application → Signature checks: checks signatures
- CLI application → Flash orchestration: initiates flashing
- Flash orchestration → Balong device: flashes firmware
- Partition handling → zlib compression: decompresses images (evidence: `ptable.c`)
- Partition handling → Signature checks: references checks
- Flash orchestration → Device utilities: uses device operations
- Device utilities → Linux serial I/O: uses transport
- Device utilities → Windows serial I/O: uses transport
- Partition handling → LZMA decoder: decodes images
- LZMA decoder → LZMA allocation: uses allocation (evidence: `lzma/LzmaDec.c`)
