Jump to content
OpenSplice DDS Forum

All Activity

This stream auto-updates     

  1. Last week
  2. Christopher Thompson

    IDL Module Interoperability

    We are currently evaluating both OpenSplice and RTI for our DDS platform. One of our main goals is to have interoperability between different platforms if necessary. With that in mind, we had issues getting both OpenSplice and RTI talking to each other until I stumbled across this thread: I was wondering if there's been any movement or progress on this subject such that module support is planned to work across platforms? We are using OpenSplice Community v6.7. Chris
  3. Earlier
  4. bdavis

    DDS Durability Service Linux

    Hi Harrold, I think you will find that the durability server is no longer included in the opensplice community distribution. % find $OSPL_HOME -name libdurability.so finds nothing. regards, Bud Davis
  5. jimmyb

    Running Example Hello World

    Was an issue with my zsh initialization. Thanks -- Jimmy
  6. Hi I am trying to run the hello world example application. I have set the OSPL_HOME, OSPL_URI, OSPL_TMP_PATH etc. I am running the 6.7 community edition of the software. I also verified the URI has SingleProcess set to true " <SingleProcess>true</SingleProcess>" in the xml file. I get the following error when I try to run the pub or the sub jimmy@dingo:./sacpp_helloworld_sub Error in DDS::DomainParticipantFactory::create_participant: Creation failed: invalid handle Here is the contents of the ospl-error.log file ======================================================================================== Context : DDS::DomainParticipantFactory::create_participant Date : Mon Sep 10 14:28:50 PDT 2018 Node : dingo Process : sacpp_helloworld_sub <26242> Thread : main thread 7fbe6b4f8740 Internals : DomainParticipantFactory.cpp/273/6.7.180404OSS/de8c6f4/de8c6f4/-1 ---------------------------------------------------------------------------------------- Report : Failure to open the domain, domain id = 2147483647 and URI="<NULL>" The most common cause of this error is that OpenSpliceDDS is not running (when using shared memory mode). Please make sure to start OpenSplice before creating a DomainParticipant. Internals : u_participantNew/u_participant.c/232/773/1536614930.531459915 ---------------------------------------------------------------------------------------- Report : os_sharedMemoryAttach failed for domainId (0) and domainName (The default Domain) Internals : user::u_domain::u_domainOpen/u_domain.c/1384/773/1536614930.531476677 Any suggestions. Thanks -- Jimmy
  7. Pepijn

    Video streaming over WiFi

    I'm trying to stream video using RTP over DDS connected via WiFi. This works great for a single subscriber, but breaks when two people try to watch the stream. When there are multiple subscribers, OpenSplice switches to multicast. As explained on wikipedia, mulitcast over WiFi causes more packet loss and a lower datarate. What would be the best way to allow multiple subscribers to work properly? I tried to set AllowMulticast to false, but this caused the entire node to not be discoverable. I assume this is because it uses multicast for discovery? I have not yet found how to disable it for data only. [edit] AllowMulticast changed from a boolean to a list of values, setting it to spdp allows sending data as unicast. The question that remains is if multicast can be used effectively over WiFi I also tried to connect the subscribers over wired LAN, hoping that there would be less conflicts in the multicast traffic. But even though IGMP snooping is enabled, the video is still broadcast over WiFi. I assume because the publisher is subscribed to the multicast group that it writes to. Is there a way to set up multicast such that traffic is not re-broabcast on the WiFi interface?
  8. bdavis

    difference between 6.4 and 6.7

    hello all, just a note to share my experience upgrading from 6.4 to 6.7. I had a bunch of unit test that use the 'no-network.ospl' file. They are run via a test framework (boost / ctest) and each executable would make a partiticipant, publishers, subscribers, etc. for each test. Tests using sequences started failing. But only the 2nd and following tests, the first test in the executable always passed. The assert that was firing was in the idlpp created code. A quick look at it showed the caching of a value that cannot be initialized correctly the second time everything was destroyed and re-created. Below is the cmake line that I used to 'fix' this, where 'fix' means give me back the behavior I had before. # This removes an optimization from the idlpp generated code that I think is wrong # and causes us ctest failures. this code is made in ospl version 6.7, and not in # previous versions. What the future holds is unknown COMMAND sed ARGS -i "s/static c_type type0/c_type type0/" ${CMAKE_CURRENT_BINARY_DIR}/include/${BASENAME}SplDcps.c\ Using static variables is always tricky, I think it is wrong but what do I know Just thought I would post this so others who experience the same kind of issue could perhaps save a bit of time. regards, Bud Davis
  9. Eugene

    OpenWRT runs OpenSplice

    Dear Community, I've managed to build OpenSplice for OpenWrt and run a home-made example on LinkIt Smart 7688 IoT platform. LinkIt Smart 7688 is built on MediaTek MT7688AN - a MIPS little-endian SOC with 128 MB RAM. Forked opensplice sources are available at https://github.com/hutorny/opensplice Required changes to OpenSplice sources were really minimal. Another platform, which can be built with in this fork is MIPS OpenWRT. Build completes well, but the application fails to start on AR9331 which I have. It has 64MB RAM and only 24 MB available for applications. While on LinkIt a minimal isocpp2 example consumes 20 MB of RAM. Are there any options that may reduce memory consumption?
  10. gidi_gal@persistent.co.in

    Community edition older versions ?

    Hello bud, Thanks for your reply, is there a link where I can check the supported Visual-Studio versions for OSPL DDS 5.4.1 ? Thanks, Gidi
  11. bdavis

    Community edition older versions ?

    my experience in moving code from OSPL-5.X to OSPL-6.X is that there is one api call that has changed; the compiler will lead you by the nose to it very quickly. the only downside is the freely available version of OSPL-5 has the shared memory deployment model. i would not hesitate to just upgrade to the latest release. in all likely hood it will 'just work' with minimal effort. regards, bud davis
  12. gidi_gal@persistent.co.in

    Community edition older versions ?

    Hello to the forum members, I am looking for a link to older versions of the community edition. I have some legacy code which supports OpenSplice DDS community edition 5.4.1 and VS2008. I was asked whether this version of OpenSplice DDS supports VS2010. My zipped installation says "32 bit " and "VS2008". Thanks, Gidi
  13. I'm writing a desktop application that controls and monitors a DDS network (so I don't think standalone/single-proccess applies), and currently before starting the executable, you have to source the DDS environment. If you just click the executable, it crashes. I tried moving the shared libraries into the application, but then it still fails to start a domain participant. Is there a way to bundle OpenSplice with the executable, so that users can just click the app, rather than running commands in a terminal?
  14. I solved it in the end. It turns out that a DLL needs all its dependencies linked, while a SO is happy to find them at runtime. So after adding the DDS libraries as a dependency to the DLL in cmake, it worked. Well, kinda, you also need to export all the symbols.
  15. I have a CMake project that generates a shared library based on a IDL file. On linux this works great, and installs a .so file in /usr/local. But now I'm trying to compile the same project on Windows. I have downloaded DDS Community Edition Version 6.x for Windows (64-bit) Host and Target, Visual Studio 2015, x64 chipset, and have installed Visual Studio 2015. CMake successfully generates an Visual Studio Solution file, but when I open this file in Visual Studio 2015 and build it, I get the following errors: Severity Code Description Project File Line Suppression State Error LNK1120 3 unresolved externals Operator C:\Users\rove\Documents\GitHub\rove_msgs\build\Debug\Operator.dll 1 Error LNK2019 unresolved external symbol __imp__c_stringNew_s referenced in function "unsigned char __cdecl __Operator_Control__copyIn(struct c_base_s *,class Operator::Control const *,struct _Operator_Control *)" (?__Operator_Control__copyIn@@YAEPAUc_base_s@@PBVControl@Operator@@PAU_Operator_Control@@@Z) Operator C:\Users\rove\Documents\GitHub\rove_msgs\build\OperatorSplDcps.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) unsigned char __cdecl __DDS_Time_t__copyIn(struct c_base_s *,class dds::core::Time const *,struct _DDS_Time_t *)" (__imp_?__DDS_Time_t__copyIn@@YAEPAUc_base_s@@PBVTime@core@dds@@PAU_DDS_Time_t@@@Z) referenced in function "unsigned char __cdecl __Operator_Control__copyIn(struct c_base_s *,class Operator::Control const *,struct _Operator_Control *)" (?__Operator_Control__copyIn@@YAEPAUc_base_s@@PBVControl@Operator@@PAU_Operator_Control@@@Z) Operator C:\Users\rove\Documents\GitHub\rove_msgs\build\OperatorSplDcps.obj 1 Error LNK2019 unresolved external symbol "__declspec(dllimport) void __cdecl __DDS_Time_t__copyOut(void const *,void *)" (__imp_?__DDS_Time_t__copyOut@@YAXPBXPAX@Z) referenced in function "void __cdecl __Operator_Control__copyOut(void const *,void *)" (?__Operator_Control__copyOut@@YAXPBXPAX@Z) Operator C:\Users\rove\Documents\GitHub\rove_msgs\build\OperatorSplDcps.obj 1 I have also tried to run it in a shell with the env activated, with the same result. >C:\dds\HDE\x86_64.win64\release.bat >devenv /build Release RoVe.sln I even tried rebuilding using these instructions. So now I'm out of ideas.
  16. My goal is to avoid any memory allocation during runtime (no "malloc", no "new"). In order to be able to do it, at initialization I know in both side (writer & reader) the sample keys and topic field sizes. What I have in mind is to use the sample instance mechanism. As far as I know, it allocates memory at initialization and then only update sample fields. Thus, on the data writing part I can do an instance registration. But on the data reading part, I cannot find the same mechanism as there is no instance registration capabilities. It seems that instances are created only when the first sample with a new key is received, so during runtime. Is there something I am missing ? Next to this, is there another way to do it ? Is there any other mechanism that is doing memory allocation during runtime ? Thanks, P.S. I am using the RTPS/C/SAC API.
  17. Pepijn

    Crash in take() in on_data_available()

    To my future self, and others seeing really weird errors: Make sure all your code is compiled with the same compiler. For some reason the Raspi binaries are compiled with GCC 4.9, and if you compile anything with anything else, you will suffer. On a related note, you may need to recompile stuff for C++11 to work.
  18. Hi, I have a problem with upgrading my application from Community Version 6.4 to 6.8. I use this application within a tool that uses LoadLibrary and FreeLibrary, so I can down Strip my problem to this entry on GitHub: https://github.com/ADLINK-IST/opensplice/issues/56 I also tried the evaluation version 6.9 and the behavior is the same. Can someone help me solving this issue? Sadly, I can't avoid the usage of LoadLibrary/FreeLibrary. Thanks in advance for your help. Best regards Urs
  19. My program crashes with the following backtrace. The error seems to happen deep inside the take() method. I can try to make a smaller reproducible test case if needed, but I'm just not really sure what's going on. It seems to be trying to free a string property on the message. Why is it trying to free something, when this is the first message that comes in? Does it think there is a previous message that it needs to free? *** Error in `/home/pi/rove_ws/control/EyeDriveRPI': free(): invalid pointer: 0x76ca56ec *** Thread 29 "ListenerDispatc" received signal SIGABRT, Aborted. [Switching to Thread 0x75743450 (LWP 17120)] __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 51 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory. (gdb) bt #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 #1 0x7699f824 in __GI_abort () at abort.c:89 #2 0x769d8f78 in __libc_message (do_abort=do_abort@entry=2, fmt=<optimized out>) at ../sysdeps/posix/libc_fatal.c:175 #3 0x769dfad4 in malloc_printerr (action=<optimized out>, str=0x76a92040 "free(): invalid pointer", ptr=<optimized out>, ar_ptr=<optimized out>) at malloc.c:5049 #4 0x769e0514 in _int_free (av=0x76aae794 <main_arena>, p=0x76ca56e4 <std::string::_Rep::_S_empty_rep_storage+4>, have_lock=<optimized out>) at malloc.c:3905 #5 0x76c638b0 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_assign(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 #6 0x76c63ba4 in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::operator=(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () from /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 #7 0x76ca9c58 in Operator::Control::id(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) () from /usr/local/lib/libOperator.so #8 0x76ca97c4 in __Operator_Control__copyOut(void const*, void*) () from /usr/local/lib/libOperator.so #9 0x76f59a84 in org::opensplice::sub::AnyDataReaderDelegate::flush_action(void*, cmn_sampleInfo_s*, void*) () from /usr/local/include/HDE/armv7l.linux/lib/libdcpsisocpp2.so #10 0x76e144cc in cmn_samplesList_flush () from /usr/local/include/HDE/armv7l.linux/lib/libddskernel.so #11 0x76f58078 in org::opensplice::sub::AnyDataReaderDelegate::take(u_dataReader_s*, dds::sub::status::DataState const&, dds::sub::detail::SamplesHolder&, unsigned int) () from /usr/local/include/HDE/armv7l.linux/lib/libdcpsisocpp2.so #12 0x0001d96c in dds::sub::detail::DataReader<Operator::Control>::take (this=<optimized out>, this=<optimized out>) at /usr/local/include/HDE/armv7l.linux/include/dcps/C++/isocpp2/dds/sub/detail/TDataReaderImpl.hpp:686 #13 dds::sub::DataReader<Operator::Control, dds::sub::detail::DataReader>::take (this=<optimized out>) at /usr/local/include/HDE/armv7l.linux/include/dcps/C++/isocpp2/dds/sub/detail/TDataReaderImpl.hpp:423 #14 0x0001dadc in RobotControlReaderListener::on_data_available (this=0x7efff2ec, dr=...) at /usr/local/include/RobotControlReaderListener.hpp:14 #15 0x0001f6e0 in dds::sub::detail::DataReader<Operator::Control>::listener_notify (this=<optimized out>, source=..., triggerMask=4096, eventData=0x764018a8, l=0x7efff2ec) at /usr/local/include/HDE/armv7l.linux/include/dcps/C++/isocpp2/dds/sub/detail/TDataReaderImpl.hpp:853 #16 0x76f24b2c in org::opensplice::core::EntityDelegate::listener_entity_notify(std::shared_ptr<org::opensplice::core::ObjectDelegate>, unsigned int, void*) () from /usr/local/include/HDE/armv7l.linux/lib/libdcpsisocpp2.so #17 0x76f22b28 in org::opensplice::core::ListenerDispatcher::eventHandler(v_listenerEvent_s*) () from /usr/local/include/HDE/armv7l.linux/lib/libdcpsisocpp2.so #18 0x76f23030 in org::opensplice::core::ListenerDispatcher::processEvents() () from /usr/local/include/HDE/armv7l.linux/lib/libdcpsisocpp2.so #19 0x76f23114 in org::opensplice::core::ListenerDispatcher::thread() () from /usr/local/include/HDE/armv7l.linux/lib/libdcpsisocpp2.so #20 0x76f23160 in org::opensplice::core::ListenerDispatcher::threadWrapper(void*) () from /usr/local/include/HDE/armv7l.linux/lib/libdcpsisocpp2.so #21 0x76d30440 in os_startRoutineWrapper () from /usr/local/include/HDE/armv7l.linux/lib/libddskernel.so #22 0x76cc1fc4 in start_thread (arg=0x75743450) at pthread_create.c:335 #23 0x76a43bc8 in ?? () at ../sysdeps/unix/sysv/linux/arm/clone.S:76 from /lib/arm-linux-gnueabihf/libc.so.6 Backtrace stopped: previous frame identical to this frame (corrupt stack?)
  20. Emmanuel Prunet

    register_instance vs lookup_instance

    Hi, I understand register_instance usage, that was not my question. What I want to know is : Should I store the instance_handle I get via register_instance call in an internal collection. Or is it just pointless because register_instance already does that internally and lookup_instance is an accessor to the instance_handle stored internally. Another question concerning instance handle : If two Topics shares the same key fields, can I use the instance handle I get from one Topic to write to the another Topic? Regards
  21. You may experience timeouts from some dds threads when you are stopped in gdb. Provided you gdb is semi recent, 'non stop debugging' can be very helpful. gdb > set pageination off gdb >set non-stop on gdb> run This allows you to break and let the other threads continue to run. regards, Bud Davis
  22. I am having issues where data is only being sent if writer are being kept alive for unknown periods of time e.g. the following does not work. { Data data; dds::pub::DataWriter<Data> writer = ... create the writer ... writer << data; } If the writer is let to persist for longer then the data is sent but in the case where the writer is destroyed "shortly" after the data is written no data is sent. Is that expected behavior or a bug. I would expect any data to be sent independent of when the writer is destructed. Thanks, Harald
  23. I'm using idlpp (isocpp2) to generate from a large union. Compilation error C1061 occur in generated header files. Methods " bool operator==( ...)" raise this error because of the use of if / else if instead of a switch.
  24. Hans van 't Hag

    How to detect DDSi2 service has not started?

    Hi Joffrey, Sorry for the delayed response, we had issues with the domain-registration of this forum and have been offline for over a month .. W.r.t. your question for a programmatic way to detect certain errors/warnings, we have a feature called a 'reportPlugin' which is documented in the deployment manual and which allows for a user-library to be plugged-in and that can access any info/warning/error message that (normally/also) goes to the ospl_info and ospl_error log(s). Perhaps that would help you creating the awareness that something went wrong w.r.t. service-configuration and/or interfaces not being available. Regards, Hans
  25. I'd check out "Eclipse Cyclone DDS" (https://projects.eclipse.org/projects/iot.cyclonedds) which we recently donated to the Eclipse foundation and which is a low-footprint implementation of DDS. Don't think its been ported to arduino yet though .. but we of course invite the community to participate in this (new) project. Cheers, Hans
  26. Hans van 't Hag

    register_instance vs lookup_instance

    Hi, When writing the same instance (i.e. key-value) repeatedly (but with different non-key field values), its fine to utilize the same handle. The handle is a local-concept (so can't be shared between participants) and can improve performance when writing specific instances from large (key-)sets. Note also that its not mandatory to use the register_instance, if you don't explicitly register the instance, it will be done implicitly yet costs a little time to locate the 'right instance' based on the value of the key-fields in the provided sample. Note also that an error will be raised when the key-fields of any provided sample in a write doesn't match with the instance-handle (if provided) Hope this helps, -Hans
  27. Hans van 't Hag

    Number / Last Participant

    Hi, Another option is to exploit the notion of 'built-in-topics' in DDS that allow you to 'discover' any participant/publisher/subscriber/topic in the system by simply reading this meta-data from these pre-defined topics. In the OpenSplice examples-section I believe there is an example on how to do that .. Regards, Hans
  1. Load more activity