Software Porting Guidelines

This document provides guidelines for porting the software from IFW 2025.0.0 to IFW 2026.0.0 based on the experience porting the template instrument provided with the IFW software.

Target Audience

These guidelines are intended for software developers involved in the porting process.

Prerequisites

A successful installation of the software as described in Installation.

List of Changes

The following changes affect instrument projects that are porting from IFW 2025 to IFW 2026. They are ordered by impact:

  • FCF Device Manager communication migration to eso::uatools::Client.

  • FCF ExecuteRpc API change (VectorVariant parameter removed).

  • CCF ROI coordinates changed from 0-based to 1-based.

  • DPM OLDB URI prefix now requires three slashes.

FCF Device Manager Communication Migration

The FCF device manager has migrated from the ifw::core::protocol::base framework to eso::uatools::Client. The old iComm/CommFactory/Dispatcher infrastructure has been removed entirely. Custom FCF device manager servers need to be updated.

Update includes and namespaces

The following header files need to be replaced in your server/src/main.cpp:

< #include <ifw/core/protocol/base/iComm.hpp>
< #include <ifw/core/protocol/base/commFactory.hpp>
< #include <ifw/core/protocol/base/dispatcher.hpp>
< #include <ifw/core/protocol/open62541/taskPoll.hpp>

< using namespace ifw::core::protocol::base;

Should be changed to:

> #include <ifw/fnd/defs/iCommAdapter.hpp>
> #include <ifw/fcf/devmgr/common/fndLog4cplusBridge.hpp>
> #include <eso/uatools/ualib/client.hpp>

Update dispatcher setup

The old Dispatcher<> template has been replaced by simple std::function callbacks:

< ifw::core::protocol::base::Dispatcher<> failure_dispatcher;
< ifw::core::protocol::base::Dispatcher<> normal_dispatcher;

Should be changed to:

> std::function<void()> failure_dispatcher;
> std::function<void()> normal_dispatcher;

Install the logging bridge

Before constructing any FCF or uatools objects, the logging bridge must be installed. Otherwise the first log call will abort with “no logger installed”:

> ifw::fcf::devmgr::common::InstallFndLog4cplusBridge();

Create uatools Client instance

The CommFactory has been removed. Each device now gets its own eso::uatools::Client.

< auto interface = CommFactory::Instance().Create(interface_cfg, devname, ifname);

Should be changed to:

> auto interface = std::make_shared<eso::uatools::Client>();

Update RegisterComm call

The RegisterComm signature has changed to use the device facade’s callback getters instead of the old dispatcher objects:

< device->RegisterComm(interface, failure_dispatcher, normal_dispatcher);

Should be changed to:

> device->RegisterComm(interface,
>                       device_facade.GetFailureCB(),
>                       device_facade.GetNormalCB());

Remove Open62541 service thread

The TaskPoll for Open62541 is now managed internally by eso::uatools. Remove any taskpoll thread management:

< ifw::core::protocol::opcua::TaskPoll open62541_service(std::chrono::milliseconds(100));

< ... open62541_service.StartThread();
< ... open62541_service.StopThread();

FCF ExecuteRpc API Change

The ExecuteRpc method no longer accepts a VectorVariant attribute list parameter.

In your custom LcsIf device implementations (e.g., YourDeviceLcsIf.cpp):

< ifw::core::protocol::base::VectorVariant attr_list;
< ...
< ExecuteRpc(obj, proc, attr_list);

Should be changed to:

> ExecuteRpc(obj, proc, {});

CCF ROI Coordinate Change

The CCF ROI (Region of Interest) window coordinates have changed from 0-based to 1-based lower-left origin to align with NGC2.

In your config/ccf/ccfSetup.yaml:

< win_start_x: 0
< win_start_y: 0

Should be changed to:

> win_start_x: 1
> win_start_y: 1

The window width and height may also need adjustment depending on your specific use case.

DPM OLDB URI Format

The OLDB URI prefix now uses three slashes to indicate the hierarchical context.

In your config/daq/dpm.yaml:

< oldb_uri_prefix: cii.oldb:/elt/prefix/dpm

Should be changed to:

> oldb_uri_prefix: cii.oldb:///elt/prefix/dpm