docs/reference/system-functional/data-products.md
Data products provide a mechanism for components to collect structured data into named containers and write them to the file system for later downlink. Unlike telemetry channels that represent real-time state, data products capture larger datasets (science data, diagnostic dumps, logs) that are stored on-board and downloaded on a priority-driven schedule. The capability is provided by the Data Product Manager (buffer allocation), Data Product Writer (file storage), and Data Product Catalog (downlink management).
Data products are defined in FPP models as containers and records:
The serialized container format includes a header, a header hash for integrity verification, the data records, and a data hash.
When a component needs to write a data product, it requests a buffer from the Data Product Manager. The manager allocates a buffer of the requested size and returns it to the component. The component populates the buffer with its container and record data, then sends the filled buffer to the Data Product Writer. Buffers can be requested either synchronously (blocking) or asynchronously (via request/response).
The Data Product Writer receives filled data product buffers and writes them to the file system. It applies any configured processing (such as compression) before writing. Each container is written as an individual file in a project-specified directory structure. The writer reports successful writes via events.
The Data Product Catalog manages the inventory and downlink of stored data products. Upon command, it scans the data product directories and builds a catalog of available products. It then initiates downlink of the cataloged products, ordered by the priority stored in each product file and by generation time. Additional commands allow operators to: