FAQ's¶
- Table of contents
- FAQ's
- Common
- ADTF 3.x
- Core
- Q: I cannot load toolboxes due to invalid major version in ADTF 3.2.0
- Q: Since ADTF 3.4.0 I cannot install Toolboxes (Device 3.0.0, Calibration 3.0.0 and Display 3.2.0) into ADTF
- Q: Which class ids (CID) are changed in ADTF 3.3.0
- Q: ADTF GUI Control does not start on Ubuntu 16.4 with a NVIDIA grafic card
- Q: The ADTF Configuration Editor starts but the window content is either black or corrupted.
- Q: The ADTF Configuration Editor window can not be selected from the Windows Taskbar
- Q: Can I use ADTF in VM's (VirtualBox, Hyperv)
- Q: After migrating to ADTF >= 3.8 my session could be launched without errors but seems that functionality is missing ?
- Q: ADTF3 Generating plugindescription fails with "Result code '-38 '(ERR_FAILED) - unknown exception"
- Q: If I have too many graph tabs open, they get out of the visible area in the CE. How can I still access it?
- Q: Can files which are generated during runtime be set as attachments?
- Q: Playing ADTF2 dat files with compressed_video streams inside crashes in ADTF3 during initialization. Is there a way to still use such ADTF2 dat files, even if the compressed streams are not needed?
- Q: Is it possible to give different description files different namespaces?
- Q: How to generate dynamic properties
- Q: How to create dynamic pins based on the dynamic filter properties
- Q: If I start the ADTF Configuration Editor via an Windows Remote Desktop session I get a "LoadLibrary failed" error.
- Q: Launch within QML Filter Editor does not escape qutotation marks since ADTF 3.11.
- Q: How to use a trigger runner in a test
- Q: How can I access the recorder interface from my Filter
- Q: How can I acces all recorders within a ADTF Service
- Q: Does ADTF 3.x works with VS2019 Compiler?
- Q: Where ist the "reset_recording_time_offset" property of the Player? How are timestamps handled during playback?
- Q: How do I prevent corrupted recordings due to e.g. insufficient disk space?
- Q: Trying to build a filter with Linux fails with the Error: GCC 5.4 Linker Error: cannot fill debug link section `<Filter>.adtfplugin.dbg': No such file or directory
- Q: How can I dump all properties of a Filter/Service or Stream Type?
- Tools
- Calibration TB
- Device TB
- Q: Which class ids (CID) are changed in ADTF Device Toolbox 3.0.0 (BETA 4)
- Q: Which interface ids (IID) are changed in ADTF Device Toolbox 3.0.0 (BETA 4)
- Q: Losing samples when using FlexRay Streaming Source (VN7600)
- Q: Within the SOMEIP trace view, is it possible to exclude irrelevant parts of the payload from the display in some way?
- Q: Failed to find configured Direct Show Capture Device at runtime on same machine
- Q: Which Vector devices are compatible with ADTF 3.x?
- Q: Which class ids (CID) are changed in ADTF Display Toolbox 3.1.0
- Q: Content of Drawers are missing since upgrading to ADTF >= 3.8 ?
- Q: Self created Plugin based on an example from the Display TB is not recognized by CE
- Core
- ADTF Libraries
- ADTF 2.x
- Core
- Q: Will there still be licenses for ADTF 2.x after EOL ?
- Q: Can I compile ADTF Filters with Visual Studio 2010 Express
- Q: ADTF does not start, I get a license error
- Q: ADTF does not start (or starts and quits immediately)
- Q: ADTF does not start on Ubuntu 18.04 or higher
- Q: What do I need to build ADTF 2.x PLB-files
- Q: How can I use debug plugins using Qt
- Q: How to react on a defined keyboard input
- Q: How can I use legacy or deprecated components
- Q: How to build ADTF 2.x Qt-Filters on a newly installed Linux Ubuntu 12.04 system
- Q: How to get the name of the playbacked DAT file
- Q: Is there a way to define a range of allowed values (Min/Max) for a Float or Int Property
- Q: How can I retrieve the signal value from ISignalRegistryExtended
- Q: How to communicate between ADTF and dSpace Autobox
- Q: What can be the reason for ADTF Message Bus UDP Network - message echos?
- Q: If ADTF has trouble with terminating cleanly at the end of a playlist.datpls (Segmentation fault)
- Q: How can Filters share Property Values
- Autosar TB
- Calibration TB
- Device TB
- Display TB
- Video Compression TB
- VTD TB
- Core
- Support Portal
Common¶
Q: Where does ADTF set or search for license ?¶
ADTF search on specific path for your license file, depending on your OS and permissions.
On Windows:- HKCU\Software\Audi Electronics Venture GmbH\ADTF\<ADTF_MAJOR_VERSION>\license_file
- HKLM\Software\Audi Electronics Venture GmbH\ADTF\<ADTF_MAJOR_VERSION>\license_file
- <home>/.adtf/adtf<ADTF_MAJOR_VERSION>.lic
- /etc/adtf<ADTF_MAJOR_VERSION>.lic
If you have a file, you can copy it or set there.
But we recommend to use the license mechanism/licenseviewer/licenser tool delivered by ADTF.
Q: How is the support workflow and what are the duties of the customer ?¶
Generally the support will do all the work but please answer if feedback is required - please also have a look at the detailed view
Q: Where can I find the ADTF Roadmap?¶
So far we don't have a detailed roadmap but you can finde some Key Topics at ADTF3 Key Topics
Please also have a look at our support site Support Seite for an overview and functional requirements
We are working on an agile Process - until then the roadmap results from
Q: Is it possible to use/set up a license server for ADTF?¶
Yes there is the possibility to use an License Server for ADTF 2.x or ADTF 3.x.
To generate an ADTF License server for you, we will need these information as well:- MAC Address of the server/pc on which the License Server will be running.
- Volume Count (number of licenses)
- Volume ID (Name of the license server)
- License Type (Developer/Runtime)
- Runtime of the licenses
The licenses from the license server are floating licenses.
Please note, that it is only working on clients having a MAC address, the server license is not working on container or anything else without that.
A Windows-VM is enough to let the service work, of course it must be reachable for the clients.
Q: Does the log4j problem affect ADTF?¶
Not the main product but the Device Toolbox. It contains the arxml toolbox and the parser engine based on Java.
Affected Versions:
ADTF Device Toolbox 3.5.0 (ADTF ARXML Toolbox 1.0.0)
ADTF Device Toolbox 3.5.1 (ADTF ARXML Toolbox 1.0.1)
ADTF Device Toolbox 3.6.0 (ADTF ARXML Toolbox 1.0.2)
ADTF Device Toolbox 3.6.1 (ADTF ARXML Toolbox 1.0.0)
ADTF Device Toolbox 3.7.0 (ADTF ARXML Toolbox 1.1.0)
ADTF Device Toolbox 3.7.1 (ADTF ARXML Toolbox 1.1.1)
ADTF Device Toolbox 3.7.2 (ADTF ARXML Toolbox 1.1.2)
ADTF Device Toolbox 3.8.0 RC1 Preview
ADTF Device Toolbox 3.8.0 RC2 Preview
ADTF Device Toolbox 3.8.0 RC3 Preview
It will be fixed with the release of Device Toolbox 3.8.0. The problem is solved wiht the preview 3.8.0 RC4 which is already released.
Download here
Older versions can't unfortunately be rewrited, they are already shared and not a Live System.
ADTF 3.x¶
Core¶
Q: I cannot load toolboxes due to invalid major version in ADTF 3.2.0¶
Known Problem - please use ADTF 3.2.1 instead
Due to a wrong version check it is not possible to load components lower than build against ADTF 3.2.0.
The bugfix will be patched in ADTF 3.2.1.
Please also have a look at #1415.
Q: Since ADTF 3.4.0 I cannot install Toolboxes (Device 3.0.0, Calibration 3.0.0 and Display 3.2.0) into ADTF¶
Known Problem - please install seperate and then refer to directory or copy manually in addons folder)
This issue is regarding to the change of archive delivery.
With the upcoming toolboxes (Device 3.1.0, Calibration 3.1.0 and Display 3.3.0) this obsolete because they will also be archives instead of installer.
*Note:*
The example sessions are searching for the plugins in the addons folder under a specific name.
Maybe you have to adapt the paths in the .adtfsystem file or use the Remove All / Autofill From Config method in ADTF Configuration Editor.
Q: Which class ids (CID) are changed in ADTF 3.3.0¶
- Note: We implement a small tool to update your class ids
OLD | NEW |
playback_input.streaming_services.adtf.cid | adtfdat_file_player.streaming_source.adtf.cid |
reference_clock.services.adtf.cid | reference_clock.service.adtf.cid |
kernel.services.adtf.cid | kernel.service.adtf.cid |
media_description.services.adtf.cid | media_description.service.adtf.cid |
demo_data_triggered_filter.demo.adtf.cid | demo_data_trigger.filter.adtf.cid |
demo_thread_triggered_filter.demo.adtf.cid | demo_thread_trigger.filter.adtf.cid |
demo_time_triggered_filter.demo.adtf.cid | demo_time_trigger.filter.adtf.cid |
default_sample_stream.ant.streaming.adtf.cid | default_sample_stream.streaming.adtf.cid |
default_binding_proxy.ant.streaming.adtf.cid | default_binding_proxy.streaming.adtf.cid |
default_thread_runner.ant.core.adtf.cid | default_thread_runner.streaming.adtf.cid |
default_timer_runner.ant.core.adtf.cid | default_timer_runner.streaming.adtf.cid |
demo_interface_binding_filter.demo.adtf.cid | demo_interface_binding.filter.adtf.cid |
demo_interface_source.demo.adtf.cid | demo_interface_printer.streaming_source.adtf.cid |
java_script_filter.filter.adtf.cid | java_script_processor.filter.adtf.cid |
demo_qt_video_display.demo.adtf.cid | demo_qt_video_display.ui_filter.adtf.cid |
demo_media_description_display.demo.adtf.cid | demo_qt_media_description_display.ui_filter.adtf.cid |
recorder.streaming_services.adtf.cid | adtfdat_file_recorder.streaming_sink.adtf.cid |
demo_sdl_video_display_sink.demo.adtf.cid | demo_sdl_video_display.streaming_sink.adtf.cid |
demo_synchronizer_filter.demo.adtf.cid | demo_timestamp_synchronizer.filter.adtf.cid |
gui_control.ant.tool.adtf.cid | gui_control.ui_tool.adtf.cid |
logview.ant.tool.adtf.cid | logview.ui_tool.adtf.cid |
statusmonitor.devil.tool.adtf.cid | statusmonitor.ui_tool.adtf.cid |
ce.ant.tool.adtf.cid | configuration_editor.ui_tool.adtf.cid |
licenseviewer.ant.tool.adtf.cid | licenseviewer.ui_tool.adtf.cid |
host_only_sink.streaming_services.adtf.cid | host_only_sender.streaming_sink.adtf.cid |
host_only_source.streaming_services.adtf.cid | host_only_receiver.streaming_source.adtf.cid |
sctp_sink.streaming_services.adtf.cid | sctp_sender.streaming_sink.adtf.cid |
sctp_source.streaming_services.adtf.cid | sctp_receiver.streaming_source.adtf.cid |
tcp_sink.streaming_services.adtf.cid | tcp_sender.streaming_sink.adtf.cid |
tcp_source.streaming_services.adtf.cid | tcp_receiver.streaming_source.adtf.cid |
udp_sink.streaming_services.adtf.cid | udp_sender.streaming_sink.adtf.cid |
udp_source.streaming_services.adtf.cid | udp_receiver.streaming_source.adtf.cid |
udp_multicast_sink.streaming_services.adtf.cid | udp_multicast_sender.streaming_sink.adtf.cid |
udp_multicast_source.streaming_services.adtf.cid | udp_multicast_receiver.streaming_source.adtf.cid |
demo_legacy_data_filter.demo.adtf.cid | demo_legacy_data_trigger.filter.adtf.cid |
demo_signal_provider_filter.demo.adtf.cid | demo_signal_provider.filter.adtf.cid |
demo_legacy_udp_receiver.demo.adtf.cid | demo_legacy_udp_receiver.streaming_source.adtf.cid |
demo_legacy_udp_sender.demo.adtf.cid | demo_legacy_udp_sender.streaming_sink.adtf.cid |
demo_legacy_virtual_clock.demo.adtf.cid | demo_legacy_virtual_clock_input.streaming_source.adtf.cid |
demo_sample_data_reference.demo.adtf.cid | demo_sample_data_reference_generator.streaming_source.adtf.cid |
demo_virtual_clock.demo.adtf.cid | demo_virtual_clock_input.streaming_source.adtf.cid |
demo_player_control_view.ui.adtf.cid | demo_qt_player_control_view.ui_service.adtf.cid |
demo_recorder_control_view.ui.adtf.cid | demo_qt_recorder_control_view.ui_service.adtf.cid |
demo_sdl_application_service.demo.adft | demo_sdl_application.service.adtf.cid |
calculator_rpc_client.demo.adft | demo_calculator_rpc_client.service.adtf.cid |
calculator_rpc_server.demo.adft | demo_calculator_rpc_server.service.adtf.cid |
demo_signal_listener.demo.adft | demo_signal_listener.service.adtf.cid |
rpc_object_registry.services.adtf.cid | rpc_object_registry.service.adtf.cid |
adtf_xsystem.service.adtf.cid | qt_xsystem.ui_service.adtf.cid |
signal_registry.services.adtf.cid | signal_registry.service.adtf.cid |
default_sample_stream_in_port.ant.streaming.adtf.cid | default_sample_stream_in_port.streaming.adtf.cid |
default_sample_stream_out_port.ant.streaming.adtf.cid | default_sample_stream_out_port.streaming.adtf.cid |
binding_type.ant.streaming.adtf.cid | binding_type.streaming.adtf.cid |
sample.ant.streaming.adtf.cid | sample.streaming.adtf.cid |
sample_pool.services.adtf.cid | sample_pool.service.adtf.cid |
memory_allocator.services.adtf.cid | memory_allocator.service.adtf.cid |
session_manager.services.adtf.cid | session_manager.service.adtf.cid |
adtf2_support.services.adtf.cid | adtf_file_support.service.adtf.cid |
clock_synchronization.services.adtf.cid | clock_synchronization.service.adtf.cid |
logging_rpc.services.adtf.cid | logging_rpc.service.adtf.cid |
playback.services.adtf.cid | playback.service.adtf.cid |
sample_stream_tracer.services.adtf.cid | sample_stream_tracer.service.adtf.cid |
recording.service.adtf.cid | adtfdat_file_recorder.streaming_sink.adtf.cid |
system_status.streaming_services.adtf.cid | system_status_input.streaming_source.adtf.cid |
log_view.ui.adtf.cid | log_view.ui_service.adtf.cid |
sample_stream_trace_view_ui.services.adtf.cid | sample_stream_trace_view.ui_service.adtf.cid |
adtf_file_support.services.adtf.cid | adtf_file_support.service.adtf.cid |
foreign_udp_source.demo.adtf.cid | demo_foreign_application_udp_receiver.streaming_source.adtf.cid |
foreign_udp_sink.demo.adtf.cid | demo_foreign_application_udp_sender.streaming_sink.adtf.cid |
Q: ADTF GUI Control does not start on Ubuntu 16.4 with a NVIDIA grafic card¶
This is a well-known bug with nVidia drivers on Ubuntu.
This is not an ADTF problem, it is a well-known bug with nVidia drivers on Ubuntu, and can be resolved by following the instructions given here:
https://github.com/Ultimaker/Cura/pull/131
https://github.com/Ultimaker/Cura/pull/131#issuecomment-176088664
The Ubuntu bug report which gives more detail and alternative fixes is here:
https://bugs.launchpad.net/ubuntu/+source/python-qt4/+bug/941826
Q: The ADTF Configuration Editor starts but the window content is either black or corrupted.¶
This can happen when the system's OpenGL configuration is faulty or not supported by QtQuick.)
To work around this issue, try setting the environment variable QT_QUICK_BACKEND=software
to enable software rendering.
Q: The ADTF Configuration Editor window can not be selected from the Windows Taskbar¶
This can happen when you have closed the ADTF Configuration Editor on a secondary screen, disconnected it and tried to start ADTF Configuration Editor again.
To resolve this scenario, ADTF Configuration Editor can be started with -r or --reset as parameter.
This will delete all user specific entries, including faulty window positions
WARNING: This will reset all your UI setings for ADTF Configuration for used ADTF 3.x version
See alsoQ: Can I use ADTF in VM's (VirtualBox, Hyperv)¶
Maybe there are some restrictions in visualization, rendering and device support, but it should work except for problems with video drivers.
If you have problems with viewing ADTF Tool, please see the questions above.
Q: After migrating to ADTF >= 3.8 my session could be launched without errors but seems that functionality is missing ?¶
In ADTF 3.8.0 the connection establishment has been corrected to between adtf::streaming::ant::cFilterLevelmachine::StageNormal and adtf::streaming::ant::cFilterLevelmachine::StageGraphReady.
Usually you will get an error, if not - e.g. in case interface binding are implemented wrong - it could not be detected in some cases (e.g. using cutom or delivered Drawer from Display Toolbox <= 3.5.0, see also Q: Content of Drawers are missing since upgrading to ADTF >= 3.8 ?Please correct it and compile your adtfplugin with at least ADTF >= 3.8 (and/or Display Toolbox >= 3.6, depends on your use case).
Workaround:
- You can change back to the old behaviour of the ADTF Session Manager by setting the
ADTF_CONNECTION_CREATION_STATE
environment variable to '2' (either in the System Editor or via your environment) - This must be done e.g. for 2D OpenGL Display and its Drawers and Sessions in ADTF Display Toolbox <= 3.5.0 and all other components using incorrect "old" behaviour
- See also adtf::filter::hollow::cFilter::Init
Q: ADTF3 Generating plugindescription fails with "Result code '-38 '(ERR_FAILED) - unknown exception"¶
One common known problem for this Error is the usage of not allowed characters in the property descriptions (e.g. µ).
Q: If I have too many graph tabs open, they get out of the visible area in the CE. How can I still access it?¶
There is already a product ticket opened to change/fix this behaviour in a future ADTF version.In the meantime there is a workaround:
- Select one of the graph tabs
- switch to the session editor
- switch back to the filter graph editor
- press the tab key
- now you should be able to scroll through the tabs with the arrow keys.
Q: Can files which are generated during runtime be set as attachments?¶
Yes. If you set the "cache_attachment_archive" property to False on the recorder, the attachment extension is only regenerated when a file is closed.
Q: Playing ADTF2 dat files with compressed_video streams inside crashes in ADTF3 during initialization.
Is there a way to still use such ADTF2 dat files, even if the compressed streams are not needed?¶
Yes, this is possible.You can disable streams for which you do not have a deserializer.
For that, the Playback Service has a property ignore_unknown_classes, see
- https://support.digitalwerk.net/adtf/v3/adtf_html/page_playback_plugin.html#section_playback_service
If you require the playback in future, just add the deserializer service for compressed video data, see Background:
In ADTF 3.x all streams are selfcontained and can be played back.
The Player also supports playback of dat files recorded with ADTF 2.x.
This works out of the box for base types, for all additional types you require additional deserializer based on ADTF File Library to extend the reader functionality.
These adtffileplugins can be used within ADTF File Libary and its tool and be loaded within deserializer services.
We provide such implementations within the related toolboxes:
- CAN, Flexray within Device TB
- XCP within Calibration TB
We also provide the source code to show customers how they can add their own class from ADTF 2.x if required.
Q: Is it possible to give different description files different namespaces?¶
To use different namespaces in the cmake adtf_add_filter macro (The macro uses the last of them for all of the descriptions) results in Debug Errors.
Unfortunately it doesn't work with the provided macro - it has to be done over an add_custom_command with adtf::mdgen.
add_custom_command(OUTPUT "my_types1.h" "my_types1.cpp" COMMAND adtf::mdgen --namespaces "namespace1" --md-sample-data --header "my_types1.h" --source "my_types1.cpp" my_types1.description DEPENDS "my_types1.description" adtf::mdgen WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Generating description header and source from my_types1.description")
For my_types2 has to be done the same way. On your target you have to specify my_types1.cpp and my_types2.cpp as your source.
Q: How to generate dynamic properties¶
To generate dynamic elements like pins and properties you have to use the QML filter editor. I.e. you have to reference a Qml file in your filter code of the constructor relative to the plugindescription (look at SetEditor).
Then your filter gets a context menu entry and a Qml code is executed. Have a look at https://support.digitalwerk.net/adtf/v3/adtf_html/page_filter_editor.html
looking at an API and Example. The player uses e.g. this mechanism to create pins for streams from the adtfdat file, the qml file can also be found in the delivery.
A property variable offers you a reference to a static variable, of course, that doesn't work with dynamic properties.
You can work directly on the property if it is not a static one.
Here is a snippet for e.g. creating a property myFilename from type cFilename:
// get all properties
object_ptr<const IProperties> pProperties;
RETURN_IF_FAILED(this->GetProperties(pProperties));
// get the specific property
adtf::base::ant::property<cFilename> oProp;
RETURN_IF_FAILED(pProperties->GetProperty("myFilename", oProp));
// do something, e.g. print
cString strValue;
oProp.GetValue()->ToString(adtf_string_intf(strValue));
LOG_INFO(strValue.GetPtr());
Instead of the Snippet you can use the elegant function "template":
auto strFilename = adtf::base::get_property<cFilename>(*this, "myFilename");
The best way to read out sub-properties is also:
auto strFilename = adtf::base::get_property_by_path<cFilename>(*this, "parent/child/myFilename");
To complete it. You can also use property_variable <> for "dynamic" properties, but these have to be registered elsewhere in order not to end up in the plugin description:
// a member for safekeeping
std::vector<std::unique_ptr<property_variable<tInt32>>> m_oProperties;
// then in the init or somewhere else
for (tSize nPropertyIndex = 0; nPropertyIndex < 10; ++nPropertyIndex)
{
m_oProperties.push_back(std::make_unique<property_variable<tInt32>>());
RegisterPropertyVariable(("value" + std::to_string(nPropertyIndex)).c_str(), *m_oProperties.back());
}
Recommended is the simplified template way to read in and a QML filter editor to create in the CE.
Q: How to create dynamic pins based on the dynamic filter properties¶
You just create your Pins in your Init(StageNormal) call based on a dynamic property value, i.e.:
class cDynFilter: public adtf::filter::cFilter
{
public:
tResult Init(tInitStage eStage)
{
RETURN_IF_FAILED(cFilter::Init(eStage));
if (eStage == StageNormal)
{
const auto nPinCount = adtf::base::get_property<tUInt32>(*this, "my_dyn_count_property", 0);
for (tUInt32 nPinIndex; nPinIndex < nPinCount; ++nPinIndex)
{
CreateInputPin(adtf::util::cString::Format("input_%u", nPinIndex));
}
}
RETURN_NOERROR;
}
};
You can also create a filter editor compareable to the snippets in https://support.digitalwerk.net/adtf/v3/adtf_html/page_filter_editor.html, there is a link for the entire qml filter editor api in your link:
There you will find the required calls:
- https://support.digitalwerk.net/adtf/v3/adtf_html/class_editor_plugin_1_1_editor_plugin_base.html#af7c303a886a8a1ddd6dfe93249134f9e
- https://support.digitalwerk.net/adtf/v3/adtf_html/class_editor_plugin_1_1_editor_plugin_base.html#a8bf0893eefcfbaff976e6dba182d27d4
- $(ADTF_DIR)/bin/adtf_ddl_mapping_filter.qml
- $(ADTF_DIR)/bin/adtf_javascript_filter_editor.qml
- $(ADTF_DIR)/bin/adtf_playback_input_filtereditor.qml
- $(ADTF_DIR)/bin/thread_mapper_create_pins.qml
Within, you will find also different methods and intentions, e.g. creating pins from a json response (adtf_playback_input_filtereditor).
I guess the most fitting use case you will be thread_mapper_create_pins, which creates pins from properties.
Q: If I start the ADTF Configuration Editor via an Windows Remote Desktop session I get a "LoadLibrary failed" error.¶
This is not an ADTF error! This error comes from Windows related with the Remote Desktop session.
You will not get the error if you are on the PC itself without Remote Desktop session.
Search for "LoadLibrary failed with error 87 - on Remote Desktop Session" and you will find several information.
The problem is related with the graphic driver on the PC.
In most cases, an update of the (correct) driver will solve the problem.
Q: Launch within QML Filter Editor does not escape qutotation marks since ADTF 3.11.¶
This will be fixed in upcoming versions.
As a workaround, just add the prefix modelmanager
and use this comparable function call:
modelmanager.Launch(QString strQPath, QString strQArguments, QString strQWorkspace, bool bModal = tTrue)
Q: How to use a trigger runner in a test¶
Just use trigger_runner() (https://support.digitalwerk.net/adtf/v3/adtf_html/namespaceadtf_1_1streaming_1_1testing_1_1hollow.html#a7ab7163c15d9d1f130fa4e5fcc3d0fa0).
Or you connecting a timer runner within your filter. For more complex issues you can choose cSessionTestSystem where you can load and start an adtf session.
An example for trigger_runner()
class cTestFilter: public cFilter
{
public:
cTestFilter()
{
CreateRunner("do_something");
}
tResult Process(tNanoSeconds /*tmTrigger*/, IRunner* /*pRunner*/) override
{
LOG_INFO("triggered");
RETURN_NOERROR;
}
};
void test_function()
{
cTestFilter oFilter;
trigger_runner(oFilter, "do_something");
}
Q: How can I access the recorder interface from my Filter¶
To do so create an interface_client<adtf::services::ant::IRecorder>
member in your Filter. Please see CreateInterfaceClient
in the SDK Documentation (https://support.digitalwerk.net/adtf/v3/adtf_html/classadtf_1_1filter_1_1flash_1_1c_graph_object.html#a5f772d2b875957550b2d1992892317f6)
If you need functionality from newer IRecorder interfaces use an ucom_cast<adtf::services::devil::IRecorder*>(...)
on the clients Get() Method.
Q: How can I acces all recorders within a ADTF Service¶
To create a Recorder Control Service aa example is provided via ADTF Delivery:
This examples include the additional plugin interface from SDK directory (under pkg/plugins):
#include <adtf_systemsdk.h> #include <plugins/recorder_intf.h>
Since ADTF 3 it is possible to use more than one Recorder within the Filtergraph/Streaminggraph.
To get all possible instances a convenience function is provided: get_recorders
This function will iterate the whole Streaminggraph/Filtergraph for the IRecorder interface.
- Start Recording - IRecorder::Start (within ADTF 2 this was the KernelEvent StartRecording)
- Stop Recording - IRecorder::Stop (within ADTF 2 this was the KernelEvent StopRecording)
- Split Recording - IRecorder::Split (within ADTF 2 this was the KernelEvent SplitRecording)
Additional you may want to get informed about a Finished Recording via KernelSignal. To do so, register to the Kernel via ISignalHandler
class cRecorderSignalHandler: public IKernel::ISignalHandler { public: cRecorderSignalHandler() { object_ptr<IKernel> pKernel; REQUIRE_OK(_runtime->GetObject(pKernel)); REQUIRE_OK(pKernel->SignalRegister(*this)); } virtual ~cRecorderSignalHandler() noexcept(false) { object_ptr<IKernel> pKernel; REQUIRE_OK(_runtime->GetObject(pKernel)); REQUIRE_OK(pKernel->SignalUnregister(*this)); } tResult HandleKernelSignal(const adtf::ucom::iobject_ptr<IKernel::ISignal>& pSignal) override { object_ptr<IRecordingSignal> pRecordingSignal = pSignal; if (pRecordingSignal) { if (pRecordingSignal->GetCode() == IRecordingSignal::PreFileClosed) { //get the current recorder name cString strRecorderName; pRecordingSignal->GetRecorderName(adtf_string_intf(strRecorderName))); //get the current file name cString strFileName; pRecordingSignal->GetFileName(adtf_string_intf(strFileName))); //do something on the current file to be closed object_ptr<IRecordingFile> pFile; REQUIRE_OK(pRecordingSignal->GetObject(pFile)); } RETURN_NOERROR; } };
MIND: Do never forget to unregister!
Following Events are possible: Recorder Events
Q: Does ADTF 3.x works with VS2019 Compiler?¶
Current ADTF is compiled and tested with VS2017 VC141:
https://support.digitalwerk.net/adtf/v3/adtf_html/page_system_requirements.html#section_windows_x64_requirements
There is currently no ADTF delivery for VS2019 VC142 available but planned until the following months to change to this toolchain.
Q: Where ist the "reset_recording_time_offset" property of the Player? How are timestamps handled during playback?¶
The player in ADTF3 no longer provides this property as it will never manipulate the stream time nor the sample timestamps in any way.
So "reset_recording_time_offset = false" is the only and default option in ADTF3.
Q: How do I prevent corrupted recordings due to e.g. insufficient disk space?¶
After recording is finished, the adtfdat file is fitted with an index for how to interpret the files data.
If a recording gets interrupted, the index can not be written into the file, thus corrupting the file beyond repair. If the file is not readable, there is no way to restore the adtfdat recording.
Best practice for longer sessions is to split the recording into multiple files, instead of heaving one large file. If one of the parts is not readable, not all data is lost.
Furthermore, the recorder has a property "diskspace_check_size" (see https://support.digitalwerk.net/adtf/v3/adtf_html/page_recorder_plugin.html). If the recording destination is falling below the specified limit, the recording will be stopped and the adtfdat file can be finalized correctly.
Q: Trying to build a filter with Linux fails with the Error: GCC 5.4 Linker Error: cannot fill debug link section `<Filter>.adtfplugin.dbg': No such file or directory¶
The problem is probably not that your compiler cannot find a dbg from us, but that the one you created does not seem to exist.
Please have a look at the "Release Notes": https://support.digitalwerk.net/adtf/v3/adtf_html/page_release_notes_3_13_0.html / Newsletter
We now separate the debug symbols on Linux similar to Windows pdbs on Linux in dbgs in order to save package sizes. The debug packages are then separate.
Your components will also try to do this, but it will fail.
Possibly it is due to a bug (https://lists.gnu.org/archive/html/bug-binutils/2015-02/msg00235.html) or to your CMake (Install Step).
What should help (without knowing your CMakefile):
Step 1: check for the reason
Check and update binutils on Linux ... see https://lists.gnu.org/archive/html/bug-binutils/2015-02/msg00235.html
OR
Step 2: Deactivate the option
set (ADTF_EXTRACT_DEBUG_INFO OFF)
Q: How can I dump all properties of a Filter/Service or Stream Type?¶
Use the following helper function with the given Properties object:
void dump_properties(const adtf::base::IProperties& oProperties)
{
std::function<tVoid(const adtf::base::IProperty& oProperty, std::string strPrefix)> fnVisitor;
fnVisitor = [&](const adtf::base::IProperty& oProperty, std::string strPrefix)
{
std::string strName;
oProperty.GetName(adtf_string_intf(strName));
strName = strPrefix + strName;
adtf::base::property_value<std::string> oValue;
oValue.Set(*oProperty.GetValue());
LOG_INFO(" property: %s = %s", strName.c_str(), oValue.GetValue().c_str());
adtf::base::visit_sub_properties(oProperty, std::bind(fnVisitor, std::placeholders::_1, strName + "/"));
};
adtf::base::visit_properties(oProperties, std::bind(fnVisitor, std::placeholders::_1, ""));
}
Tools¶
Q: Creating plugin modules for CE does not work anymore since ADTF 3.11¶
We had to remove the SDK package ce_utils and move the CMake macro adtf_add_ce_plugin to SDK package ui.
If you change you dependencies from ce_utils to ui, it will work again.
Calibration TB¶
Device TB¶
Q: Which class ids (CID) are changed in ADTF Device Toolbox 3.0.0 (BETA 4)¶
- Note: We implement a small tool to update your class ids
OLD | NEW |
can_support.services.adtf.cid | can_support.service.adtf_devtb.cid |
can_config_encoder.devicetb.adtf.cid | can_config_encoder.filter.adtf_devtb.cid |
can_config_decoder.devicetb.adtf.cid | can_config_decoder.filter.adtf_devtb.cid |
can_signal_provider.services.adtf.cid | can_signal_provider.service.adtf_devtb.cid |
vector_can_xl_source.streaming_services.adtf.cid | vector_can_device_receiver.streaming_source.adtf_devtb.cid |
vector_can_xl_sink.streaming_services.adtf.cid | vector_can_device_transmitter.streaming_sink.adtf_devtb.cid |
random_can_generator.demo.adtf.cid | demo_can_random_data_generator.streaming_source.adtf_devtb.cid |
demo_can_encoder_filter.demo.adtf.cid | demo_can_encoder.filter.adtf_devtb.cid |
demo_can_decoder_filter.demo.adtf.cid | demo_can_decoder.filter.adtf_devtb.cid |
flexray_support.services.adtf.cid | flexray_support.service.adtf_devtb.cid |
flexray_config_encoder.devicetb.adtf.cid | flexray_config_encoder.filter.adtf_devtb.cid |
flexray_config_decoder.devicetb.adtf.cid | flexray_config_decoder.filter.adtf_devtb.cid |
flexray_signal_provider.services.adtf.cid | flexray_signal_provider.service.adtf_devtb.cid |
vector_flexray_source.streaming_services.adtf.cid | vector_flexray_device_receiver.streaming_source.adtf_devtb.cid |
vector_flexray_sink.streaming_services.adtf.cid | vector_flexray_device_transmitter.streaming_sink.adtf_devtb.cid |
flexray_generator_streaming_source.demo.adtf.cid | demo_flexray_random_data_generator.streaming_source.adtf_devtb.cid |
demo_flexray_decoder_filter.demo.adtf.cid | demo_flexray_decoder.filter.adtf_devtb.cid |
demo_direct_show_capture_source.demo.adft.cid | demo_direct_show_video_device.streaming_source.adtf_devtb.cid |
demo_video4linux_capture_source.demo.adtf.cid | demo_video4linux_capture_device.streaming_source.adtf_devtb.cid |
Q: Which interface ids (IID) are changed in ADTF Device Toolbox 3.0.0 (BETA 4)¶
- Note: We implement a small tool which also updates the IIDs
OLD | NEW |
icansupport.devicetb.iid | can.service.adtf_devtb.iid |
cancoder.services.adtf.iid | cancoder.service.adtf_devtb.iid |
candatabase.services.adtf.iid | candatabase.service.adtf_devtb.iid |
candatabaselist.services.adtf.iid | candatabaselist.service.adtf_devtb.iid |
flexraysupport.adtf_devicetb.iid | flexray.service.adtf_devtb.iid |
flexraycoder.services.adtf.iid | flexraycoder.service.adtf_devtb.iid |
flexraydatabase.services.adtf.iid | flexraydatabase.service.adtf_devtb.iid |
Q: Losing samples when using FlexRay Streaming Source (VN7600)¶
If you are receiving error messages in this case like:
Queue overflow... mediasamples are lost
please increase the value of the property Queuesize
Q: Within the SOMEIP trace view, is it possible to exclude irrelevant parts of the payload from the display in some way?¶
No. Partial display / writing of the payload is not provided in the TraceView.
Unfortunately, only the full description of the payload works here.
There is already a feature request in discussion about this.
Q: Failed to find configured Direct Show Capture Device at runtime on same machine¶
Are these steps even similar to your situation ?- Drag and drop an Direct Show Capture Device Streaming Source to the Filter Graph
- Right click for context menu and select Configure Camera
- Select the device and set resolution and framerate
- Everything works and values will be stored within the Streaming Source property
- Runtime fails (Could not find/open device or similar)
A possible problem could be special characters (e.g. registered trademarks) within in the Device Display Name which can be handled by Qt/QML within the Filter Editor but not within the property strings.
A possible workaround is to address the device within the device property of the Streaming Source by syntax device:<ID> (e.g. device:1)
Q: Which Vector devices are compatible with ADTF 3.x?¶
All Vectorboxes using the Vector XL Driver Library are compatible devices.
See also the information in the Device TB doygen "Bus Devices"https://support.digitalwerk.net/adtf_addons/adtf-device-toolbox/v3/devicetoolbox_html/page_businterfaces.html e.g. Vector CAN FD Device Plugin
---
h2. Display TB
Q: Which class ids (CID) are changed in ADTF Display Toolbox 3.1.0¶
- Note: We implement a small tool to update your class ids
OLD | NEW |
signal_tree_view_srv.ui.displaytb.adtf.cid | signal_tree_view.ui_service.adtf_disptb.cid |
signal_table_view_srv.ui.displaytb.adtf.cid | signal_table_view.ui_service.adtf_disptb.cid |
signal_scope_view_srv.ui.displaytb.adtf.cid | signal_scope_view.ui_service.adtf_disptb.cid |
Q: Content of Drawers are missing since upgrading to ADTF >= 3.8 ?¶
In ADTF 3.8.0 the connection establishment has been corrected and must be corrected with upcoming Display Toolbox 3.6.0
Workaround for Display Toolbox <= 3.5.0
- You can change back to the old behaviour of the ADTF Session Manager by setting the
ADTF_CONNECTION_CREATION_STATE
environment variable to '2' (either in the System Editor or via your environment) - This must be done e.g. for 2D OpenGL Display and its Drawers and Sessions in ADTF Display Toolbox <= 3.5.0 and all other components using incorrect "old" behaviour
- See also adtf::filter::hollow::cFilter::Init
Q: Self created Plugin based on an example from the Display TB is not recognized by CE¶
This can be a problem if there are already plugins with the same filenames (e.g. "objectmixin.plugindescription").
If you choose/change to a new/other filename the plugin will be recognized by the CE.
There is already a product ticket opened to change this behaviour in a future ADTF version.
ADTF Libraries¶
ADTF File Library / IFHD¶
Q: What is the base reference and format of the timestamp ?¶
{{collapse(A: The timestamp is in microseconds and the base is Julian Day)
The timestamp is used in DateTime::ToTimeStamp
and DateTime::Set
.
As base reference zero point please refer to Julian Day.
To convert the value to e.g. unix timestamp please substract the unix value based on Julian timestamp.
For more details please have a look at #1424.
Streaming Library¶
ADTF 2.x¶
Core¶
Q: Will there still be licenses for ADTF 2.x after EOL ?¶
Yes. ADTF 2.x discontinuation at 2021-12-31 will only effect updates/maintainance/bugfixes or support BUT NOT license handling - it will still be possible to use ADTF 2.x after 2021
Q: Can I compile ADTF Filters with Visual Studio 2010 Express¶
Yes but we don't know any conditions to this different developer environment which is and will neither be tested nor supported
It might be possible to set up an environment for ADTF 2.x on Win64 with Visual Studio 2010 SP1 Express or Visual Studio Express 2008 SP1 for ADTF 2.x 32Bit.
But we can not support this setup because the environment is not the same as for Visual Studio 2010 SP1 Professional.
- Installation of VisualStudio Express, WindowsSDK, ServicePack or Patches might fail
- Building of ADTF Filter fails
- ADTF doesn't start (e.g. in debug)
- ...
The same conditions regarding support and recommendations take place in all other products, e.g. ADTF 3.x.
Each product comes with an overwiew and dependencies and requirements regarding your developer environment.
For more information, please have a look in the relative documentation, see Access_to_ADTF_Documentation.
Q: ADTF does not start, I get a license error¶
- No license file loaded:
Use the load license mechanism to load your license file.
If you don't have a license file yet, please contact the support.
- Some services could not be loaded
You are using some components (toolboxes), usually in your addons directory, which are under license.
These license flags are missing in your current license file.
Please contact the support for the following progress.
- Your license file does not match to host
Usually this error occures if the MAC address of the license file does not match to your machine.
The ADTF license should base on standard ethernet adapter of your machine.
Make sure that adapter with the ADTF MAC address is set on top (see advanced adapter settings).
Another reason could be that you are working with several network adapters (physical and virtual).
Please deactivate all adapters except the one with the ADTF license MAC address and restart.
If everything starts, you can reactivate your adapters and everything should now work as expected.
Q: ADTF does not start (or starts and quits immediately)¶
Usually there is problem regarding python
Since ADTF 2.13 we do not provide Python within the ADTF installer.
So please keep in mind that you download the right Python Version according to your ADTF System.
First of all, open a shell and type in
python
What is the result ? There should be the correct python version on the correct OS be shown.
Possible Solutions are (verify step by step):- Check your Python Version -> We use Python 2.7.6 (we only support this version!)
- It must be the same as your ADTF System (32Bit/64Bit)
- Sometimes it is useful to install it here: C:\Python27
- Provide the path to the python.exe and python27.dll in your PATH Environment Variable
- On some machines it is necessary to copy the python27.dll to C:\Windows\System32
- On some machines it is necessary to set additional PYTHONHOME as new Environment Variable to your Python installation directory
- Check your manifest file of ADTF according to the Python Entries
- If you do not need Python Support, you can delete/comment out the Python Support Service and its provided classes within the used .manifest file
- Set PYTHONPATH
- Win32: PYTHONPATH=<python_folder>\Lib;<python_folder>\PCbuild;<python_folder>\Lib\lib-tk.
- Win64: PYTHONPATH=<python_folder>\Lib;<python_folder>\PCbuild\amd64;<python_folder>\Lib\lib-tk
If this won't work for you, you can set a Python Logging:
open a shell and type in following two steps:
set PYTHONVERBOSE=1 %ADTF_DIR%\bin\adtf_devenv.exe -stdout
Alternative way: you can pipe the output into a log file:
set PYTHONVERBOSE=1 %ADTF_DIR%\bin\adtf_devenv.exe -logfile=log.txt
You will get a log.txt and log_stderr.txt for possible hints.
Q: ADTF does not start on Ubuntu 18.04 or higher¶
Errors like Unable to load library "/path/to/adtf/bin/libQtGui.so" appear.
ADTF 2.x uses QT 4.7.1. The QtGui Library depends on libpng12, which is no longer provided by Ubuntu 18.04
To make it run, please follow this instructions
NOTE: ADTF 2.x is not developed or tested on Ubuntu 18.04, we recommend to use the supported Ubunut 14.04 version.
Q: What do I need to build ADTF 2.x PLB-files¶
To be able to build ADTF 2.x PLB-files you have to make sure that the following packages are installed on your system:
gcc / g++ compiler
Qt 4.7.1
make
CMake 2.8.10 (this is the official supported version to generate Makefile projects)
libxrender1
libfontconfig1
libfontconfig1-dev
libglu1-mesa-dev
To develop and debug your filters you can use the QtCreator IDE.
Please make sure that the Qt Development-Kit configuration of the IDE points to the Qt 4.7.1 toolset!
Q: How can I use debug plugins using Qt¶
I use ADTF 2.11 on Windows 7 64Bit with Visual Studio 2010 Professional.
I'm working on a Filter using QT to do some GUI stuff.
If I build the filter in Release or RelWithDebInfo I can load the .plb in ADTF without any problems.
If I build it in Debug-mode ADTF tells me "Could not register Plugin "...plb"!".
I guess it has something to do with missing linked libraries, but I can't track down the problem.I generate the Visual Studio solution with CMake:
project(myTestProject) find_package(ADTF REQUIRED) adtf_use_qt(QtCore QtGui) adtf_add_moc(myTestProject src/myQtWidget.h) adtf_add_filter(myTestProject src/stdafx.cpp src/stdafx.h src/myQtWidgetFilter.h src/myQtWidgetFilter.cpp src/myQtWidget.h src/myQtWidget.cpp)If I check both PLBs with the dependency walker, the Debug plb seems to be fine. The release PLB generates some error messages (s. attached picture).
Any ideas on what I am missing here?
You have to use RelWithDebInfo plugins within <ADTF_DIR>\bin\adtf_devenv and Debug plugins within \adtf\bin\debug\adtf_devenv)
Usually it is possible to mix up debug and release libraries/plugins.
But if they have no dependencies to 3rd Party libraries, like Qt, who uses also release and debug libraries (e.g. QtCored4 instead of QtCore4).
Q: How to react on a defined keyboard input¶
I neeed a filter, which gives me a certain output, if a certain key was pressed (e.g. if 'w' was pressed send ...).
Does anyone now what kind of function I need to use for this?I wrote a similar filter back in 2010, where I used something like
tResult cReadKeyboardInput::OnEvent( tEventInfo* psEventInfo ) { if(adtf::IEvent::EC_KeyPressed == psEventInfo->i32EventCode) { LOG_INFO("KEY PRESSED"); } RETURN_NOERROR }in combination with this function
tResult cReadKeyboardInput::QueryInterface( tGUID riid, tVoid** ppvObject ) { tResult eResult = cBaseFilter::QueryInterface( riid, ppvObject); if ( IS_FAILED( eResult ) && ( IID_ADTF_EVENT_SINK == riid ) && ( ppvObject != 0 ) ) { // zusätzlich unterstütztes Interface: adtf::IEventSink AddRef(); ppvObject[0] = static_cast<adtf::IEventSink*>( this ); RETURN_NOERROR; } else { return( eResult ); } }But as a lot of things changed since 2010, QueryInterface is not a meber of cFilter anymore.
Does anyone has any suggestions?
The IKeyEventHandler will solve your use case
Please have a look at IKeyEventHandler Class Reference in teh ADTF SDK Documentation.
Here you have to overwrite OnKeyEvent
.
Q: How can I use legacy or deprecated components¶
Just use some CMake Flags to enable legacy/deprecated code
Note: Best way is to exchange/update your code and don't use legacy or deprecated code.
Also that this code will not be supported anymore.
Please keep in mind that some parts of ADTF (in its libraries) could become legacy code or macros. E.g. if you get compiler errors like these:
error C3861: 'A_UTIL_ASSERT': identifier not found
In case you need time or anything else to update your code, you can enable/disable
legacy flags- ADTF_USE_A_UTILS_LEGACY_NAMES
- ADTF_USE_LEGACY_CONSTANTS_MACROS
- ADTF_USE_LEGACY_TEST_MACROS
- ADTF_ENABLE_DEPRECATED_SDK
- ADTF_ENABLE_DEPRECATED_UCOM
- ADTF_ENABLE_DEPRECATED_UTILS
in CMake.
Q: How to build ADTF 2.x Qt-Filters on a newly installed Linux Ubuntu 12.04 system¶
Here is a step-by-step instructions
This howto describes initial steps to be able to build ADTF 2 Qt-Filters on an Ubuntu 12.04 LTS system, which was newly installed.
1) Installation of needed basic packages
Before the Qt 4.7.1 sources can be built, several basic packages must be installed previously:- cmake
- cmake-gui
- libglu1-mesa-dev
- mesa-common-dev
- libxext-dev
- libfontconfig1-dev
- libasound2-dev
- imagemagick
sudo apt-get install <Paket(e)>
2) Build an install Qt 4.7.1 environment
Please make sure, that all basic packages (see above) were installed properly.
a) Download Qt 4.7.1 source tar ball
https://download.qt.io/archive/qt/4.7/qt-everywhere-opensource-src-4.7.1.tar.gz
b) Extract the tar ball
tar xf qt-everywhere-opensource-src-4.7.1.tar.gz
c) Configuration (for example the installation directory is: "/opt/qt-4.7.1" --> Check your access rights!)
./configure -prefix /opt/qt-4.7.1 -debug-and-release -no-qt3support -no-phonon -no-phonon-backend -opensource -no-webkit -developer-build -fast
d) Build it
make -j8 ("-j8" gives the availability to trigger parallel builds on an 8 processor machine)
e) Installation
make install
After the installation was successful, the "cmake-gui" configuration can be started to generate the "ADTF-Examples" project/solution.
During the configuration navigate to /opt/qt-4.7.1/bin/qmake for setting up the Qt environment.
On Linux also check if the CMAKE_BUILD_TYPE property is set to either "Debug" or "RelWithDebInfo".
Q: How to get the name of the playbacked DAT file¶
Just use CMD_HDS_GET_FILENAME as command
You can work with Harddisk Player Events and Script Commands.
For detailed overview have a look at the ADTF SDK Documentation, page Harddisk Player - Events received and emitted
Here you find a snippet which solves exactly your use case.
On the page in die SDK-Documentation there is another UseCase described with ISampleStream::GetUrl
Just follow the links for this solution.
Also interesting: Harddisk Recorder - Events received and emitted
Q: Is there a way to define a range of allowed values (Min/Max) for a Float or Int Property¶
Yes you have to use the subproperty mechanism
After defining a property, you can add some Sub Properties like adding a description or setting the property read-only.
This also works for min and max ranges, e.g.
SetPropertyFloat("MyValue", 1.0); SetPropertyFloat("MyValue" NSSUBPROP_MIN, 0.0); SetPropertyFloat("MyValue" NSSUBPROP_MAX, 1.0); SetPropertyStr ("MyValue" NSSUBPROP_DESCRIPTION, "Foo... Bar...");
The PropertyBrowser shows this range as a tooltip and configures the QT SpinBox to accept only values within this range.
For an complete overview please visit adtf_constants.h File Reference
Q: How can I retrieve the signal value from ISignalRegistryExtended¶
You have to register to the Signal Registry and and wait for the event RUN_SIGNAL_REGISTRY_EVENT
Snippet:
RETURN_IF_FAILED(_runtime->GetObject(OID_ADTF_SIGNAL_REGISTRY, IID_ADTF_SIGNAL_REGISTRY_EXTENDED, (tVoid**) &m_pSignalRegistry)); RETURN_IF_FAILED(m_pSignalRegistry->GetSignalList(&m_pSignalDescription, &m_nSignalCount)); RETURN_IF_POINTER_NULL(m_pSignalDescription); cString signalName; tSignalHandle hSignalHandle; for (size_t i = 0; i < m_nSignalCount; ++i) { signalName = m_pSignalDescription[i].strName; if (signalName.Find("Gesuchtes_Signal") != -1) { RETURN_IF_FAILED(m_pSignalRegistry->RegisterSignalListener(signalName, dynamic_cast<adtf::IRunnable*>(this), &hSignalHandle)); break; } }
tResult MyFilter::Run(tInt nActivationCode, const tVoid *pvUserData, tInt szUserDataSize, __exception)
{
if (nActivationCode == RUN_SIGNAL_REGISTRY_EVENT && pvUserData != nullptr) {
tSignalRegistryEvent const* pEvent = static_cast<tSignalRegistryEvent const*>(pvUserData);
tInt nEventCount = szUserDataSize / sizeof(tSignalRegistryEvent);
__synchronized_obj(m_oSignalInUse);
LOG_INFO(cString::Format("Something clever should be displayed %f", pEvent->pValue->f64Value));
}
return cBaseQtFilter::Run(nActivationCode, pvUserData, szUserDataSize, __exception_ptr);
}
Q: How to communicate between ADTF and dSpace Autobox¶
Using dSPACE ADTF Interface Blockset
More information please follow: https://www.dspace.com/de/gmb/home/products/sw/impsw/adtf_blockset.cfm- This contains the ADTF Message Bus Implementation and DDL Support for dSpace Autobox
See also #8080
Q: What can be the reason for ADTF Message Bus UDP Network - message echos?¶
The Messagebus UDP Network describes a simple portocol to exchange UDP Datagrams containing userdata (see also https://support.digitalwerk.net/adtf/v2/adtf_sdk_html_docs/page__a_d_t_f_udp_network.html).
If the sender of these messages is a "UDP client" sending a "subscribe" message, the implementation of ADTF "stores" the ip-address:port pair to identify this client. Each data message MUST be sent via this address and port! Otherwise the server will try to send all "other" registered clients the same message, and so it will send back it to the sender.
- The sending system must send the "subscribe" message via the same port as the data "_raw" messages.
- The sending system must NOT send the "subscribe" message, so the server does not know the client!
- Configure ADTF to be the client by using "udp://localhost:5000{forceclient=true}" and the sending system must send its message to the "5001" port (or other port-pair is possible)
Q: If ADTF has trouble with terminating cleanly at the end of a playlist.datpls (Segmentation fault)¶
If ADTF has trouble terminating cleanly at the end of a playlist.datpls and runs into a Segmentation fault:
If you find a note within the Error message about "IConsole" this is a known problem.
Workaround for this problem is to deactivate the two services "ucom.core.console.device" and "adtf.core.console_logger" in the used manifest files.
The log messages will be still available via stdout.
Q: How can Filters share Property Values¶
ADTF 2 has so called "Referenced Configuration Properties". These are mapped onto Properties of one or more Filters. Please have a look at https://support.digitalwerk.net/adtf/v2/adtf_sdk_html_docs/page_referenced_configuration_properties.html.
Autosar TB¶
Calibration TB¶
Q: Demo ECU Processor could not be loaded - Interface not supported¶
The Header must be adapted
If you getting this error:
The class 'adtf.ecu_processor.demo' can not be loaded : Interface not supported
The header of the example must be adapted and recompiled, following export interface is missing:
UCOM_EXPORT_INTERFACE_CAST(IID_ADTF_ECU_PROCESSOR, IEcuProcessor)
So it will look as follows:
UCOM_OBJECT_BEGIN(OID_DEMO_PROCESSOR, "Demo Processor")
UCOM_EXPORT_INTERFACE_CAST(IID_ADTF_ECU_PROCESSOR, IEcuProcessor)
UCOM_EXPORT_INTERFACE(IID_ADTF_ECU_PROCESSOR, IEcuProcessor)
UCOM_EXPORT_INTERFACE(IID_ADTF_CONFIGURATION, IConfiguration)
UCOM_OBJECT_END()
Otherwise the IObject Interface will not be exported and the runtime could not create a instance.
Q: Could not use Calibration Toolbox within own projects - could not find compat file¶
This is a bug, please use following workaround
find_package(ADTF_COMPRESSION_TOOLBOX PATHS "${ADTF_DIR}/addons/adtf-compression-toolbox" REQUIRED)
leads to an error (could not find compat file).
Workaround:
set(CMAKE_MODULE_PATH ${ADTF_COMPRESSION_TOOLBOX_DIR}) find_package(ADTF_COMPRESSION_TOOLBOX)
Device TB¶
Q: Import of ASC Files leads to invalid media type in *.dat.description file (tCANMessage instead of tCANData)¶
It's a bug ADEVTB-1417 and you must adapt the *.dat.description file after generating
Workaround:
1) Work without description file (ADTF knows the tCANData) or
2) Exchange struct and stream in *.dat.description file (example shows a tCANData stream called rawcan
)
(can be found at <DEV_TB_DIR>\description\adtf_device_toolbox.description)
<struct alignment="1" name="tCANData" version="1">
<element alignment="1" arraysize="1" byteorder="LE" bytepos="0" name="ui8Tag" type="eMessageTag" />
<element alignment="1" arraysize="1" byteorder="LE" bytepos="1" name="ui8Channel" type="tUInt8" />
<element alignment="1" arraysize="1" byteorder="LE" bytepos="2" name="tmTimeStamp" type="tUInt64" />
<element alignment="1" arraysize="1" byteorder="LE" bytepos="10" name="ui32Id" type="tUInt32" />
<element alignment="1" arraysize="1" byteorder="LE" bytepos="14" name="ui8Length" type="tUInt8" />
<element alignment="1" arraysize="1" byteorder="LE" bytepos="15" name="ui8Reserved" type="tUInt8" />
<element alignment="1" arraysize="1" byteorder="LE" bytepos="16" name="ui16Flags" type="eDataFlags" />
<element alignment="1" arraysize="1" byteorder="LE" bytepos="18" name="ui16Reserved" type="tUInt16" />
<element alignment="1" arraysize="1" byteorder="LE" bytepos="20" name="ui32Reserved" type="tUInt32" />
<element alignment="1" arraysize="8" byteorder="LE" bytepos="24" name="aui8Data" type="tUInt8" />
</struct>
<stream description="can" name="rawcan" type="adtf.core.media_type">
<struct bytepos="0" name="tCANData" type="tCANData" />
</stream>
Display TB¶
Q: Unequal scales in Signal view's scope view¶
I observed a strange (and annoying behavior) in the scope view of ADTF's Signal View Filter (ADTF: 2.11.0, Display Toolbox: 2.0.0):
The scales of the different signals differs after auto-zoom, even if only one scale is shown!
- The first screenshot shows normal behavior after adding the different signals.
- The second screenshot shows the same data, with one scale BEFORE pressing the auto-zoom button
- The third screenshot shows the same data AFTER hitting the auto-zoom button
- The forth screenshot is taken after switching to multiple scales again
The main problem is, that you cannot get any useful meanings out of the third screenshot, but even worse you get a total wrong impression about the data. For example (in the third screenshot) it looks like the blue values are above the green ones, which is totaly wrong (as green is the sum of the other ones :))!
Is this a already known bug and/or is it already fixed in newer versions?
Solved with Display TB 2.1.0
Please have a look at Display Toolbox 2.1.0 (Download / [[Access_to_ADTF_Documentation]]).
There have been some changes/bug fixes in Signal View considering the scales of signals
Video Compression TB¶
Q: Could not export compressed video streams on Linux in shell (GUI works fine)¶
Known Problem: ffmpeg could not be found - please use the additional service 'ffmpeg_enabler.srv'
Exporting compressed videos works fine in GUI (ADTF Devenv) ?
But you receiving problems while using adtf_datexporter ?
info 0x00000000: Could not deduce output format from file extension: using MPEG.
error 0x00000000: Could not find suitable output format
This means for some reasons why the ffmpeg could not be found and the initialization of the codec fails.
For that please extend your call by using attachment:ffmpeg_enabler.srv (please also have a look at the sources attachment:ffmpeg_enabler.zip)
So your call looks something like this now:
LD_LIBRARY_PATH=/path/to/ffmpeg/lib ./adtf_datexporter -verbose -export video -sinkid adtf.export.ffmpeg -output /path/to/exported/video.avi -property codec=mpeg4 -service <ADTF_DIR>/addons/adtf-compression-toolbox/bin/video_compression_ffmpeg_support.srv -service <ADTF_DIR>/addons/adtf-compression-toolbox/bin/ffmpeg_enabler.srv <ADTF_DIR>/bin/templates/example_test_file.dat
VTD TB¶
Q: Where can i find/download the ADTF VTD Toolbox¶
The VTD Toolbox is not provided by Digitalwerk. It is provided by AEV-25.
In order to have access or download the VTD TB an AUDI CIP Account is necessary.
More information about how to get access to CIP can be found here: AUDI CIP ACCOUNT
With active AUDI CIP Account the VTD TB can be found in the Artifactory
More Information can be found in the AUDI CIP e.g. in the FAQs.
(AUDI CIP Account required)
FAQ - ADTF VTD Toolbox
FAQ - FEP Interface VTD
Support Portal¶
Q: How can I scale embedded images within my support request ?¶
To embed an image, use the Redmine wiki syntax '!image_file!' or refer to the attachment by 'attachment:image_file'.
In case of embedding, you can also scale the image, e.g. '!{width:50%}image_file!'