ADTF
Loading...
Searching...
No Matches
Example Demo Interface Binding

Description

Shows how to share functionality between filters.

Prebuilt Binaries

Source Code

./examples/demo_adtfplugins/demo_interface_binding/

Interface

print_intf.h

#pragma once
#include <adtf_utils.h>
// this is the example interface that is shared via interface binding
class IPrintInterface : public adtf::ucom::IObject
{
public:
ADTF_IID(IPrintInterface, "demo_print_interface.demo.adtf.iid");
public:
virtual void Print(const char* strString) = 0;
};
class cPrinter : public adtf::ucom::object<IPrintInterface>
{
public:
void Print(const char* strString) override
{
LOG_INFO("%s", strString);
}
};
#define ADTF_IID(_interface, _striid)
Definition adtf_iid.h:19
#define LOG_INFO(...)
Logs an info message.
Definition log.h:388
Definition object.h:397
ant::IObject IObject
Alias always bringing the latest version of ant::IObject into scope.
Definition object_intf.h:109

Client

demo_interface_binding_client_filter.h

#pragma once
#include <print_intf.h>
#ifndef ADTF_EXAMPLES_CID
#define ADTF_EXAMPLES_CID ".local.cid"
#endif
// define a trigger function
class cInterfaceBindingClientFilter final : public adtf::filter::cFilter
{
public:
ADTF_CLASS_ID_NAME(cInterfaceBindingClientFilter,
"demo_interface_binding.filter" ADTF_EXAMPLES_CID,
"Demo Interface Binding Client");
cInterfaceBindingClientFilter();
~cInterfaceBindingClientFilter() override;
adtf::streaming::IRunner* pRunner) override;
private:
};
A_UTILS_NS::cResult tResult
For backwards compatibility and to bring latest version into scope.
Definition result.h:736
#define ADTF_CLASS_ID_NAME(_class, _strcid, _strclabel)
Definition class_id.h:33
Definition filter.h:289
virtual tResult Process(base::flash::tNanoSeconds tmTrigger, streaming::ant::IRunner *pRunner)
Definition graph_object.h:66
Definition runner_intf.h:24
A timestamp with nanosecond precision.
Definition chrono.h:23

demo_interface_binding_client_filter.cpp

#include "demo_interface_binding_client_filter.h"
#include <cinttypes>
using namespace adtf::util;
using namespace adtf::ucom;
using namespace adtf::base;
using namespace adtf::streaming;
using namespace adtf::filter;
cInterfaceBindingClientFilter::cInterfaceBindingClientFilter()
{
m_oInterfaceClient = CreateInterfaceClient<IPrintInterface>("printer_client");
SetDescription("printer_client", "Interface client to call a printer function from a server");
CreateRunner("trigger", cTimerTriggerHint(std::chrono::seconds{1}));
SetDescription("trigger", "Runner to periodically trigger the function which prints the timestamp of the trigger");
// sets a short description for the component
SetDescription("Use this filter to provide a client which accesses the printer interface from Demo Interface Printer (see Streaming Sources).");
// set help link to jump to documentation from ADTF Configuration Editor
SetHelpLink("$(ADTF_DIR)/doc/html/page_demo_interface_binding_client.html");
}
cInterfaceBindingClientFilter::~cInterfaceBindingClientFilter() = default;
tResult cInterfaceBindingClientFilter::Process(tNanoSeconds tmTimeOfTrigger, IRunner * /*pRunner*/)
{
m_oInterfaceClient->Print(cString::Format("time is %" PRIi64, tmTimeOfTrigger.nCount));
}
#define RETURN_NOERROR
Return status ERR_NOERROR, which requires the calling function's return type to be tResult.
Definition result.h:29
Namespace for the ADTF Base SDK.
Definition adtf_base_type_traits.h:13
Namespace for the ADTF Filter SDK.
Definition configurable_runner.h:18
Namespace for the ADTF Streaming SDK.
Definition bindingproxyinport.h:14
Namespace for the ADTF uCOM SDK.
Definition adtf_system.h:324

Server

demo_interface_binding_server_filter.h

#pragma once
#include <print_intf.h>
#ifndef ADTF_EXAMPLES_CID
#define ADTF_EXAMPLES_CID ".local.cid"
#endif
class cInterfaceBindingServerFilter final : public adtf::filter::cFilter
{
public:
ADTF_CLASS_ID_NAME(cInterfaceBindingServerFilter,
"demo_interface_binding_server.filter" ADTF_EXAMPLES_CID,
"Demo Interface Binding Server");
cInterfaceBindingServerFilter();
~cInterfaceBindingServerFilter() override;
private:
// this is our exppose server object
};
Definition object_ptr.h:384

demo_interface_binding_server_filter.cpp

#include "demo_interface_binding_server_filter.h"
using namespace adtf::util;
using namespace adtf::ucom;
using namespace adtf::base;
using namespace adtf::streaming;
using namespace adtf::filter;
cInterfaceBindingServerFilter::cInterfaceBindingServerFilter()
{
m_pPrinter = make_object_ptr<cPrinter>();
CreateInterfaceServer<IPrintInterface>("printer_server", m_pPrinter);
SetDescription("printer_server", "Interface server to provide access to a function for printing");
// sets a short description for the component
SetDescription("Use this filter to provide a server for a printer Interface (e.g. used by 'Demo Interface Binding Client', see Filters");
// set help link to jump to documentation from ADTF Configuration Editor
SetHelpLink("$(ADTF_DIR)/doc/html/page_demo_interface_binding_server.html");
}
cInterfaceBindingServerFilter::~cInterfaceBindingServerFilter() = default;
object_ptr< Implementation > make_object_ptr(Args &&... args)
Alias always bringing the latest version of ant::make_object_ptr() into scope.
Definition object_ptr_utilities.h:129

Plugin

plugin.cpp

#include "demo_string_sending_filter.h"
#include "demo_string_receiving_filter.h"
ADTF_PLUGIN("Demo String Handling Filters Plugin",
cDemoStringSending,
cDemoStringReceiving);
#define ADTF_PLUGIN(__plugin_identifier,...)
Definition adtf_plugin.h:29