Introduction
ifw-fnd is the ESO IFW Foundation library: a small, dependency-light C++20 package that holds the contracts and utility code every other IFW component is expected to agree on.
Two concerns dominate ifw-fnd’s scope:
Logging abstraction.
ifw::fnd::Loggeris a pure-virtual interface plus a process-wide installation hook. Every component logs through the sameFND*macros at call sites and never names a specific backend. Downstream applications install the backend they want (stdout, log4cplus, CII, custom) once at startup.Communication-adapter contract.
ifw::fnd::defs::ICommAdapteris the protocol-agnostic adapter contract: Read / Write / Call / Browse / Subscribe / Configure / Connect over arbitrary protocols (OPC UA, Modbus, REST, MQTT, GenICam control plane, …). Implementations live elsewhere (uatools/ualibcarries the OPC UA one); ifw-fnd just owns the contract.
In addition to those two large pieces, ifw-fnd carries a small grab
bag of common types (DataType), FITS-IO helpers (BaseFitsio),
and timing / threading utilities (IsoTimeNow, ThreadName,
SleepSecs).
Scope
This manual is for developers consuming or extending ifw-fnd: it describes the logging abstraction (Logger and FND* macros), the communication- adapter contract (ICommAdapter), and how to build and install the library (Build and install). It is not an exhaustive API reference – the Doxygen documentation covers types and functions in detail.
Design constraints
Portability. No hard dependency on log4cplus, CII,
ifw-core, or any other ESO-internal stack. Builds cleanly on VLT and ELT hosts and on plain CI containers.Minimal third-party. Only
fmt(formatting),cfitsio(for the FITS helpers), the C++20 standard library, and (for tests) GTest.Header-friendly. Macros and inline helpers in headers so that call sites pay nothing for disabled-level logging and pay nothing extra to use them from any TU.
Conventions used in this manual
C++ identifiers refer to types and functions in the
ifw::fndnamespace unless otherwise noted.Path-like names such as
$INTROOTand$PREFIXrefer to the install prefix – by convention the same place ESO/IFW projects install to today (set via thePREFIX/INTROOTenv vars picked up by the build).The single header consumers include is
<ifw/fnd/defs/base.hpp>. It pulls everything else in; see Logger and FND* macros for why this matters.
Acronyms
Acronym |
Description |
|---|---|
CII |
Common Instrument Interface |
ELT |
Extremely Large Telescope |
ESO |
European Southern Observatory |
FITS |
Flexible Image Transport System |
GenICam |
Generic Interface for Cameras |
ICS |
Instrument Control System |
IFW |
Instrument Framework |
MQTT |
Message Queuing Telemetry Transport |
OPC UA |
Open Platform Communications Unified Architecture |
REST |
Representational State Transfer |
TU |
Translation Unit (a C++ compilation unit) |
VLT |
Very Large Telescope |