Project

General

Profile

FAQ's

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
On Linux:
  • <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

Support Workflow


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.

Here is the installer for server and the related documentation:

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 also

Q: 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 Then the unknown streams are skipped.
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
Due that the Video Compression TB has been declined for ADTF 3.x, the required adtffileplugin and adtf service is part of ADTF itself.
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: Please also have a look at our delivered filter editors which creates pins this way:
  • $(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#aac7c0afdb8ece8792ba40f30457e29db)

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:

Demo Recorder Control View

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.

This example will show how to use the IRecorder interface. This enables you to:
  • 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

See ADTF 2.x Discontinuation


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.

There might be problems such as:
  • 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.

As an example please refer to:

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
and deprecated warnings
  • 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.

Resolution:
  1. The sending system must send the "subscribe" message via the same port as the data "_raw" messages.
  2. The sending system must NOT send the "subscribe" message, so the server does not know the client!
  3. 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!'