# rocketgod-git/protopirate architecture

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

- Interactive diagram: https://gitdiagram.com/rocketgod-git/protopirate
- Repository: https://github.com/rocketgod-git/protopirate

## Overview

ProtoPirate is a Flipper Zero app for capturing and decoding automotive key-fob signals, analyzing saved or raw captures, and optionally emulating supported protocols. The main workflow is user → receiver → protocol decoding → live history or saved capture; separate branches handle `.sub` analysis, timing measurement, brute-force analysis, and emulation. The README documents these capabilities and protocol coverage; sampled source confirms the app shell, receiver view, AM registry, storage, history, and selected analysis/emulation code. Some scene-to-helper wiring is not shown, so uncertain links are omitted.

Main entry points: [`protopirate_app.c`](https://github.com/rocketgod-git/protopirate/blob/main/protopirate_app.c) (App controller), [`scenes/protopirate_scene_receiver.c`](https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_receiver.c) (Receiver scene), [`scenes/protopirate_scene_sub_decode.c`](https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_sub_decode.c) (RAW sub decode), [`helpers/protopirate_storage.c`](https://github.com/rocketgod-git/protopirate/blob/main/helpers/protopirate_storage.c) (Capture storage)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and scenes"]
  node_app["App controller<br/>[protopirate_app.c]"]
  node_scenes["Scene flow"]
  node_receiver_scene["Receiver scene"]
  node_receiver_view["Receiver display"]
  node_tool_plugins["Tool plugins"]
end

subgraph group_radio["Radio and decoding"]
  node_radio_helpers["Radio and TX/RX"]
  node_protocol_host["Protocol host"]
  node_am_registry["AM protocols"]
  node_protocols["Protocol decoders"]
end

subgraph group_captures["Capture management"]
  node_history["Live history"]
  node_storage["Capture storage"]
  node_saved_scene["Saved captures"]
end

subgraph group_analysis["Analysis tools"]
  node_sub_decode["RAW sub decode"]
  node_raw_reader["RAW file reader<br/>[raw_file_reader.c]"]
  node_timing["Timing tuner"]
  node_psa_bf["Brute-force analysis"]
  node_bf_core["BF protocol core<br/>[psa_bf_core.c]"]
end

subgraph group_emulation["Emulation"]
  node_emulate["Emulation scene"]
end

node_user(("User"))
node_radio_device(("Flipper radio"))
node_sd_card[("SD card files")]

node_user -->|"operates"| node_app
node_app -->|"dispatches"| node_scenes
node_scenes -->|"routes"| node_receiver_scene
node_receiver_scene -->|"updates view"| node_receiver_view
node_radio_device -->|"supplies signals"| node_radio_helpers
node_radio_helpers -->|"selects registry"| node_protocol_host
node_protocol_host -->|"loads"| node_am_registry
node_am_registry -->|"registers"| node_protocols
node_receiver_scene -->|"records captures"| node_history
node_history -->|"stores history"| node_storage
node_user -->|"browses"| node_saved_scene
node_saved_scene -->|"reads captures"| node_storage
node_user -->|"selects RAW file"| node_sub_decode
node_sub_decode -->|"reads capture"| node_raw_reader
node_sub_decode -->|"starts analysis"| node_psa_bf
node_psa_bf -->|"runs search"| node_bf_core
node_user -->|"starts measurement"| node_timing
node_radio_device -->|"provides timings"| node_timing
node_user -->|"requests emulation"| node_emulate
node_emulate -.->|"transmits signal"| node_radio_device
node_app -.->|"loads plugins"| node_tool_plugins
node_storage -->|"reads and writes"| node_sd_card

click node_app "https://github.com/rocketgod-git/protopirate/blob/main/protopirate_app.c"
click node_scenes "https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene.c"
click node_receiver_scene "https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_receiver.c"
click node_receiver_view "https://github.com/rocketgod-git/protopirate/blob/main/views/protopirate_receiver.c"
click node_radio_helpers "https://github.com/rocketgod-git/protopirate/blob/main/helpers/protopirate_radio.c"
click node_protocol_host "https://github.com/rocketgod-git/protopirate/blob/main/helpers/protopirate_protocol_plugin_host.c"
click node_am_registry "https://github.com/rocketgod-git/protopirate/blob/main/protocols/plugins/protopirate_am_plugin.c"
click node_protocols "https://github.com/rocketgod-git/protopirate/tree/main/protocols"
click node_history "https://github.com/rocketgod-git/protopirate/blob/main/protopirate_history.c"
click node_storage "https://github.com/rocketgod-git/protopirate/blob/main/helpers/protopirate_storage.c"
click node_saved_scene "https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_saved.c"
click node_sub_decode "https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_sub_decode.c"
click node_raw_reader "https://github.com/rocketgod-git/protopirate/blob/main/helpers/raw_file_reader.c"
click node_timing "https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_timing_tuner.c"
click node_psa_bf "https://github.com/rocketgod-git/protopirate/blob/main/scenes/plugins/protopirate_psa_bf_plugin.c"
click node_bf_core "https://github.com/rocketgod-git/protopirate/blob/main/protocols/psa_bf_core.c"
click node_emulate "https://github.com/rocketgod-git/protopirate/blob/main/scenes/plugins/protopirate_emulate_plugin.c"
click node_tool_plugins "https://github.com/rocketgod-git/protopirate/tree/main/scenes/plugins"

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_app,node_scenes,node_receiver_scene,node_receiver_view,node_tool_plugins,node_user toneBlue
class node_radio_helpers,node_protocol_host,node_am_registry,node_protocols,node_sd_card toneAmber
class node_history,node_storage,node_saved_scene toneMint
class node_sub_decode,node_raw_reader,node_timing,node_psa_bf,node_bf_core toneRose
class node_emulate,node_radio_device toneIndigo
```

## Components

### App and scenes

- [App controller](https://github.com/rocketgod-git/protopirate/blob/main/protopirate_app.c): `protopirate_app.c`
- [Scene flow](https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene.c): `scenes/protopirate_scene.c`
- [Receiver scene](https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_receiver.c): `scenes/protopirate_scene_receiver.c`
- [Receiver display](https://github.com/rocketgod-git/protopirate/blob/main/views/protopirate_receiver.c): `views/protopirate_receiver.c`
- [Tool plugins](https://github.com/rocketgod-git/protopirate/tree/main/scenes/plugins): `scenes/plugins`

### Radio and decoding

- [Radio and TX/RX](https://github.com/rocketgod-git/protopirate/blob/main/helpers/protopirate_radio.c): `helpers/protopirate_radio.c`
- [Protocol host](https://github.com/rocketgod-git/protopirate/blob/main/helpers/protopirate_protocol_plugin_host.c): `helpers/protopirate_protocol_plugin_host.c`
- [AM protocols](https://github.com/rocketgod-git/protopirate/blob/main/protocols/plugins/protopirate_am_plugin.c): `protocols/plugins/protopirate_am_plugin.c`
- [Protocol decoders](https://github.com/rocketgod-git/protopirate/tree/main/protocols): `protocols`

### Capture management

- [Live history](https://github.com/rocketgod-git/protopirate/blob/main/protopirate_history.c): `protopirate_history.c`
- [Capture storage](https://github.com/rocketgod-git/protopirate/blob/main/helpers/protopirate_storage.c): `helpers/protopirate_storage.c`
- [Saved captures](https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_saved.c): `scenes/protopirate_scene_saved.c`

### Analysis tools

- [RAW sub decode](https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_sub_decode.c): `scenes/protopirate_scene_sub_decode.c`
- [RAW file reader](https://github.com/rocketgod-git/protopirate/blob/main/helpers/raw_file_reader.c): `helpers/raw_file_reader.c`
- [Timing tuner](https://github.com/rocketgod-git/protopirate/blob/main/scenes/protopirate_scene_timing_tuner.c): `scenes/protopirate_scene_timing_tuner.c`
- [Brute-force analysis](https://github.com/rocketgod-git/protopirate/blob/main/scenes/plugins/protopirate_psa_bf_plugin.c): `scenes/plugins/protopirate_psa_bf_plugin.c`
- [BF protocol core](https://github.com/rocketgod-git/protopirate/blob/main/protocols/psa_bf_core.c): `protocols/psa_bf_core.c`

### Emulation

- [Emulation scene](https://github.com/rocketgod-git/protopirate/blob/main/scenes/plugins/protopirate_emulate_plugin.c): `scenes/plugins/protopirate_emulate_plugin.c`

### Other components

- **User**
- **Flipper radio**
- **SD card files**

## Connections

- User → App controller: operates
- App controller → Scene flow: dispatches
- Scene flow → Receiver scene: routes
- Receiver scene → Receiver display: updates view
- Flipper radio → Radio and TX/RX: supplies signals
- Radio and TX/RX → Protocol host: selects registry
- Protocol host → AM protocols: loads
- AM protocols → Protocol decoders: registers
- Receiver scene → Live history: records captures
- Live history → Capture storage: stores history
- User → Saved captures: browses
- Saved captures → Capture storage: reads captures
- User → RAW sub decode: selects RAW file
- RAW sub decode → RAW file reader: reads capture
- RAW sub decode → Brute-force analysis: starts analysis
- Brute-force analysis → BF protocol core: runs search
- User → Timing tuner: starts measurement
- Flipper radio → Timing tuner: provides timings
- User → Emulation scene: requests emulation
- Emulation scene → Flipper radio: transmits signal
- App controller → Tool plugins: loads plugins
- Capture storage → SD card files: reads and writes
