ihedvall / mdflib

Implementation of the ASAM MDF data file.
https://ihedvall.github.io/mdflib/
MIT License
57 stars 25 forks source link

undefined reference to `MdfChannelCreateChannelComposition #68

Closed ali-ghadyali-fvt closed 5 months ago

ali-ghadyali-fvt commented 5 months ago

I am building from main and configuring using the following command cmake -S . -B build/desktop -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=pwd/opt/libs/mdflib/desktop -DMDF_BUILD_SHARED_LIB_EXAMPLE=ON -DMDF_BUILD_TOOL=ON -DMDF_BUILD_TEST=ON

I get a linker error for the above function. The functions seem to be declared using MACROS so it is a bit confusing on where I should be looking for a fix.

ihedvall commented 5 months ago

I will test your combination but set the MDF_SHARED_LIB=OFF. This disable the .NET mdflibrary build, assuming you not need the C# interface. The MDF_LIB_TOOL=OFF speed up the build time as the wxWidgets third-party library take some time to build. Note that wxWidgets currently doesn't build on Linux/MacOS. It is a VCPKG problem, so there is nothing I can do.

Can you supply me with which operating system you working with?

ihedvall commented 5 months ago

I tried and I also gets a lot of link errors that indicate that you mixing C++ and C# targets. Setting the MDF_SHARED_LIB=OFF will fix the "mixing" linkage problem but I suspect you will get some other problem with third-party library. If you running on Windows, the VCPKG solves most of the problems with third-party libraries. If you have VCPKG installed, you should add the -DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake. Expect some extra build time at first build.

ihedvall commented 5 months ago

If you not using the VCPKG, I recommend to invest in a component directory (-DCOMP_DIR=path to third-party libraries). The ihedvall/components contains script files for most third-party libraries. Little bit more manual work but works on most operating systems.

Simplxss commented 5 months ago

@ihedvall By the way, is there any example for ChannelCompositions. I will add some test for it.

ihedvall commented 5 months ago

Channel compositions are typically used for in bus logging. If you want typically bus logger files, the CSS Electronics have some logger files available. There are also some unit tests as in TEST_F(TestWrite, Mdf4MlsdCanConfig).

Hint: If you run the unit test TestWrite, it creates a lot of MDF files in the %TEMP%/test/mdf/write directory. These files will be removed the next test run.

ihedvall commented 5 months ago

Tested the above cmake setting. The same build issue still exist. Reopen the issue.

Simplxss commented 5 months ago
root@MiBookPro:~/mdflib# cmake -S . -B build/desktop -DCMAKE_BUILD_TYPE=release -DCMAKE_INSTALL_PREFIX=install -DMDF_BUILD_SHARED_LIB_EXAMPLE=ON -DMDF_BUILD_TOOL=ON -DMDF_BUILD_TEST=ON -DCMAKE_TOOLCHAIN_FILE=/root/vcpkg/scripts/buildsystems/vcpkg.cmake
-- Running vcpkg install

...
...
...

-- Running vcpkg install - done
-- The CXX compiler identification is GNU 12.3.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/g++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found ZLIB: optimized;/root/mdflib/build/desktop/vcpkg_installed/x64-linux/lib/libz.a;debug;/root/mdflib/build/desktop/vcpkg_installed/x64-linux/debug/lib/libz.a (found version "1.3.0")
-- MDF Target Includes: ../include/mdf/cryptoutil.h;../include/mdf/etag.h;../include/mdf/iattachment.h;../include/mdf/iblock.h;../include/mdf/ichannel.h;../include/mdf/ichannelarray.h;../include/mdf/ichannelconversion.h;../include/mdf/ichannelgroup.h;../include/mdf/ichannelhierarchy.h;../include/mdf/ichannelobserver.h;../include/mdf/idatagroup.h;../include/mdf/ievent.h;../include/mdf/ifilehistory.h;../include/mdf/iheader.h;../include/mdf/imetadata.h;../include/mdf/isampleobserver.h;../include/mdf/isourceinformation.h;../include/mdf/mdffactory.h;../include/mdf/mdffile.h;../include/mdf/mdfhelper.h;../include/mdf/mdflogstream.h;../include/mdf/mdfreader.h;../include/mdf/mdfwriter.h;../include/mdf/samplerecord.h;../include/mdf/zlibutil.h
-- Compiler Version 12.3.0
-- MSVC
-- MDFLibrary Target Includes: ../include/mdflibrary/MdfExport.h;../include/mdflibrary/MdfAttachment.h;../include/mdflibrary/MdfChannel.h;../include/mdflibrary/MdfChannelConversion.h;../include/mdflibrary/MdfChannelGroup.h;../include/mdflibrary/MdfChannelObserver.h;../include/mdflibrary/MdfDataGroup.h;../include/mdflibrary/MdfETag.h;../include/mdflibrary/MdfEvent.h;../include/mdflibrary/MdfFile.h;../include/mdflibrary/MdfFileHistory.h;../include/mdflibrary/MdfHeader.h;../include/mdflibrary/MdfMetaData.h;../include/mdflibrary/MdfReader.h;../include/mdflibrary/MdfSourceInformation.h;../include/mdflibrary/MdfWriter.h;../include/mdflibrary/CanMessage.h
-- Found Boost: /root/mdflib/build/desktop/vcpkg_installed/x64-linux/include (found version "1.83.0")
-- Found GTest: /root/mdflib/build/desktop/vcpkg_installed/x64-linux/share/gtest/GTestConfig.cmake (found version "1.14.0")
-- Found Boost: /root/mdflib/build/desktop/vcpkg_installed/x64-linux/include (found version "1.83.0") found components: filesystem locale
-- Configuring done (1948.4s)
-- Generating done (0.0s)
-- Build files have been written to: /root/mdflib/build/desktop

root@MiBookPro:~/mdflib# cmake --build build/desktop
[  0%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdfblock.cpp.o
[  1%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdffile.cpp.o
[  2%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/idblock.cpp.o
[  3%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/hd3block.cpp.o
[  3%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/tx3block.cpp.o
[  4%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/pr3block.cpp.o
[  5%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/tr3block.cpp.o
[  6%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/sr3block.cpp.o
[  6%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/dg3block.cpp.o
[  7%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/cg3block.cpp.o
[  8%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/cn3block.cpp.o
[  9%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/cc3block.cpp.o
[ 10%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/cd3block.cpp.o
[ 10%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ce3block.cpp.o
[ 11%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdfreader.cpp.o
[ 12%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdf3file.cpp.o
[ 13%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/hd4block.cpp.o
[ 13%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/tx4block.cpp.o
[ 14%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/md4block.cpp.o
[ 15%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/fh4block.cpp.o
[ 16%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ch4block.cpp.o
[ 16%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/at4block.cpp.o
[ 17%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ev4block.cpp.o
[ 18%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/dg4block.cpp.o
[ 19%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/cg4block.cpp.o
[ 20%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/si4block.cpp.o
[ 20%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/cn4block.cpp.o
[ 21%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/cc4block.cpp.o
[ 22%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ca4block.cpp.o
[ 23%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/dt4block.cpp.o
[ 23%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/sr4block.cpp.o
[ 24%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/rd4block.cpp.o
[ 25%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/sd4block.cpp.o
[ 26%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/dl4block.cpp.o
[ 26%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/dz4block.cpp.o
[ 27%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/hl4block.cpp.o
[ 28%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdf4file.cpp.o
[ 29%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/datablock.cpp.o
[ 30%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/datalistblock.cpp.o
[ 30%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/blockproperty.cpp.o
[ 31%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdf4timestamp.cpp.o
[ 32%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/iattachment.cpp.o
[ 33%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ichannel.cpp.o
[ 33%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/idatagroup.cpp.o
[ 34%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ichannelgroup.cpp.o
[ 35%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/channelobserver.cpp.o
[ 36%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ichannelobserver.cpp.o
[ 36%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ichannelconversion.cpp.o
[ 37%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdf3writer.cpp.o
[ 38%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/dt3block.cpp.o
[ 39%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/iheader.cpp.o
[ 40%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdf4writer.cpp.o
[ 40%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdfwriter.cpp.o
[ 41%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdffactory.cpp.o
[ 42%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ifilehistory.cpp.o
[ 43%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/imetadata.cpp.o
[ 43%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/etag.cpp.o
[ 44%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ievent.cpp.o
[ 45%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ichannelhierarchy.cpp.o
[ 46%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/isourceinformation.cpp.o
[ 46%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ichannelarray.cpp.o
[ 47%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdfhelper.cpp.o
[ 48%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/dv4block.cpp.o
[ 49%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/di4block.cpp.o
[ 50%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/rv4block.cpp.o
[ 50%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ri4block.cpp.o
[ 51%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ld4block.cpp.o
[ 52%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/cryptoutil.cpp.o
[ 53%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/zlibutil.cpp.o
[ 53%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ixmlfile.cpp.o
[ 54%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/ixmlnode.cpp.o
[ 55%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/writexml.cpp.o
[ 56%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/xmlnode.cpp.o
[ 56%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/expatxml.cpp.o
[ 57%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdflogstream.cpp.o
[ 58%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/littlebuffer.cpp.o
[ 59%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/bigbuffer.cpp.o
[ 60%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/platform.cpp.o
[ 60%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/iblock.cpp.o
[ 61%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/vlsddata.cpp.o
[ 62%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/mdfbuslogger.cpp.o
[ 63%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/canmessage.cpp.o
[ 63%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/dbchelper.cpp.o
[ 64%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/isampleobserver.cpp.o
[ 65%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/isamplereduction.cpp.o
[ 66%] Building CXX object mdflib/CMakeFiles/mdf.dir/src/readcache.cpp.o
[ 66%] Linking CXX static library libmdf.a
[ 66%] Built target mdf
[ 67%] Building CXX object mdflibrary/CMakeFiles/mdflibrary.dir/src/MdfExport.cpp.o
[ 68%] Linking CXX shared library libmdflibrary.so
[ 68%] Built target mdflibrary
[ 69%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/main.cpp.o
[ 69%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/testcrypto.cpp.o
[ 70%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/testread.cpp.o
[ 71%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/testwrite.cpp.o
[ 72%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/testmdffile.cpp.o
[ 73%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/testmetadata.cpp.o
[ 73%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/testzlib.cpp.o
[ 74%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/util/ilogger.cpp.o
[ 75%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/util/logconfig.cpp.o
[ 76%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/util/logconsole.cpp.o
[ 76%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/util/logfile.cpp.o
[ 77%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/util/logging.cpp.o
[ 78%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/util/logmessage.cpp.o
[ 79%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/util/logstream.cpp.o
[ 79%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/util/stringutil.cpp.o
[ 80%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/util/timestamp.cpp.o
[ 81%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/testhelper.cpp.o
[ 82%] Building CXX object mdflib_test/CMakeFiles/test_mdf.dir/src/testchannel.cpp.o
[ 83%] Linking CXX executable test_mdf
[ 83%] Built target test_mdf
[ 84%] Building CXX object mdflibrary_example/CMakeFiles/mdflibraryexample.dir/src/test.cpp.o
[ 85%] Linking CXX executable mdflibraryexample
[ 85%] Built target mdflibraryexample
[ 85%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/mdfviewer.cpp.o
[ 86%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/mainframe.cpp.o
[ 87%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/mdfdocument.cpp.o
[ 88%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/mdfview.cpp.o
[ 88%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/childframe.cpp.o
[ 89%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/channelobserverlistview.cpp.o
[ 90%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/channelobserverframe.cpp.o
[ 91%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/csvwriter.cpp.o
[ 91%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/ilogger.cpp.o
[ 92%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/logconfig.cpp.o
[ 93%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/logconsole.cpp.o
[ 94%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/logfile.cpp.o
[ 95%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/logging.cpp.o
[ 95%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/logmessage.cpp.o
[ 96%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/logstream.cpp.o
[ 97%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/stringutil.cpp.o
[ 98%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/util/timestamp.cpp.o
[ 98%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/samplereductionframe.cpp.o
[ 99%] Building CXX object mdfviewer/CMakeFiles/mdfview.dir/src/samplereductionlistview.cpp.o
[100%] Linking CXX executable mdfview
[100%] Built target mdfview

Ubuntu 22.04 on WSL cmake version 3.28.1 gcc version 12.3.0

ihedvall commented 5 months ago

I doesn't run without the VCPKG. You can build a shared library on the mdflib by changing the add_library(..STATIC to SHARED and add a set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON). This should eliminate the need of using the .NET interface export.cpp wrapper.

I do get some minor annoyance that I need to copy the dll to the excutable directory after build (as mdfviewer.exe).

ali-ghadyali-fvt commented 5 months ago

I tried and I also gets a lot of link errors that indicate that you mixing C++ and C# targets. Setting the MDF_SHARED_LIB=OFF will fix the "mixing" linkage problem but I suspect you will get some other problem with third-party library. If you running on Windows, the VCPKG solves most of the problems with third-party libraries. If you have VCPKG installed, you should add the -DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake. Expect some extra build time at first build.

Hi @ihedvall,

I am building on Ubuntu WSL 22.04. I am writing a pure C++ application. I use a custom toolchain file for CMake which includes the paths for wxwidgets. I can get the library to compile and build just fine. I can run the viewer and the library test application included in the project.

I am using an mf4 file generated from the css canedge for reference to setup my own program. I am logging canbus. I can send you screenshots tomorrow since I am out of office today. The problem occours when I try to use the CreateChannelComposition function. I am unsure of which option is causing just that one function to not being included in compilation. To verify that the problem is within the library itself I tried compiling with tests on and encountered the error again. If you point me in the right direction I will attempt to fix it myself and submit a PR.

ihedvall commented 5 months ago

I am impressed that you get the test_mdf and mdfviewer running. The boost and wxWidgets are little bit tricky. Both the mdfviewer and the test_mdf executable uses the static mdf.lib instead of the mdflibrary.dll. I recommend that you use the static library in your C++ projects.

The mdflibrary.dll is designed as a .NET (C++/CLI) interface and is intended to be used in C# projects. You can get this DLL running on Linux but it require an extra wrapper that is not well tested. In your case it was just an extra character. I think Simplxss have fixed the error, so just a git pull would probably solve the above problem.

If you run the test_mdf.exe, there should be a number of MDF files in the /temp/test/mdf/write directory. Well until next OS restart at least.

If you want to read CAN bus traffic, you might be interested in the DBC library instead. The MDF file normally only store the the 8 byte data, Can Id and time. You need a DBC file to convert the data bytes to signals. With the DBC Viewer you may read in a DBC file and the import MDF file afterwards thus converting the bytes to signals and samples. The ihedvall/dbclib is relative new so it might have some unknown features.

ihedvall commented 5 months ago

If you are writing a CAN bus logger i.e. creating MDF files , you might need some meeting as the writing of MDF files are little bit tricky. You may check the Google Test TestWrite, Mdf4MlsdCanConfig for guidance. Please let me know if you need some meeting.

ali-ghadyali-fvt commented 5 months ago

I am impressed that you get the test_mdf and mdfviewer running. The boost and wxWidgets are little bit tricky. Both the mdfviewer and the test_mdf executable uses the static mdf.lib instead of the mdflibrary.dll. I recommend that you use the static library in your C++ projects.

The mdflibrary.dll is designed as a .NET (C++/CLI) interface and is intended to be used in C# projects. You can get this DLL running on Linux but it require an extra wrapper that is not well tested. In your case it was just an extra character. I think Simplxss have fixed the error, so just a git pull would probably solve the above problem.

If you run the test_mdf.exe, there should be a number of MDF files in the /temp/test/mdf/write directory. Well until next OS restart at least.

If you want to read CAN bus traffic, you might be interested in the DBC library instead. The MDF file normally only store the the 8 byte data, Can Id and time. You need a DBC file to convert the data bytes to signals. With the DBC Viewer you may read in a DBC file and the import MDF file afterwards thus converting the bytes to signals and samples. The ihedvall/dbclib is relative new so it might have some unknown features.

@ihedvall The typo correction from @Simplxss fixes the issue. I was able to use the .so in a C++ application.

I have shown below what the intended file formatting should look like.

2024-01-11 13_45_01-MDF File Viewer (Ubuntu-22 04)

The image below is of my mdf file using CreateChannelComposition

2024-01-11 13_46_50-MDF File Viewer (Ubuntu-22 04)

The intended use for mdflib for my use case is to bus log files that ASASMMDF can view. Thank you for your offer for meeting. Is there a work email I can reach you at.?

ihedvall commented 5 months ago

I have sent my e-mail address through Linkedin.The MdfWriter::CreateBusLogConfiguration() function creates a standard CAN bus configuration for you but you need to add the source information (SI). There are some different ways you can store bus traffic. It might be worth looking at the mdfwriter.h and the canmessage.h.

Running bus loggers might require some MS Teams meeting.