1 #ifndef ApplicationSupport_h
2 #define ApplicationSupport_h
5 #include "netio/netio_udp.h"
6 #include "disc_dpde/disc_dpde_discovery_plugin.h"
7 #include "disc_dpse/disc_dpse_dpsediscovery.h"
15 #define snprintf sprintf_s
23 #define APP_RETVAL_OK 0
28 #define APP_RETVAL_ERROR -1
33 #define APP_COUNT_UNLIMITED -1
36 typedef struct Application Application_t;
41 typedef int (*Application_take_data_fn)(Application_t *application);
53 typedef struct ApplicationConfig {
73 DDS_Boolean best_effort;
83 DDS_Boolean use_waitset;
94 DDS_Boolean filter_commit;
105 DDS_Boolean filter_deserialized;
113 DDS_Boolean use_dynamic_discovery;
122 DDS_Boolean use_static_interface;
131 struct NDDS_Type_Plugin *type_plugin;
142 DDS_BUILTIN_TOPIC_KEY_TYPE_NATIVE entity_id_writer;
153 DDS_BUILTIN_TOPIC_KEY_TYPE_NATIVE entity_id_reader;
162 DDS_Char part_name_writer[DDS_ENTITYNAME_QOS_NAME_MAX];
171 DDS_Char part_name_reader[DDS_ENTITYNAME_QOS_NAME_MAX];
178 DDS_Char topic_name[RTPS_PATHNAME_LEN_MAX+1];
191 DDS_Char type_name[RTPS_PATHNAME_LEN_MAX+1];
198 DDS_Char interface_loop[DDS_ENTITYNAME_QOS_NAME_MAX];
205 DDS_Char interface_udp[DDS_ENTITYNAME_QOS_NAME_MAX];
212 DDS_Char initial_peer[DDS_ENTITYNAME_QOS_NAME_MAX];
231 DDS_Long count_expected;
254 struct DDS_DomainParticipantFactoryQos qos_factory;
260 struct DDS_DomainParticipantQos qos_participant;
266 struct DDS_DataReaderQos qos_reader;
272 struct DDS_DataWriterQos qos_writer;
279 struct DDS_DataReaderListener listener_reader;
286 struct DDS_DataWriterListener listener_writer;
292 DDS_StatusMask listener_reader_mask;
298 DDS_StatusMask listener_writer_mask;
306 DDS_StatusMask waitset_mask;
313 Application_take_data_fn take_data;
321 NDDS_PluginHelper_GetKeyKindFunc get_key_kind;
329 OSAPI_LogVerbosity_T verbosity;
330 } ApplicationConfig_t;
335 #define DEFAULT_DOMAIN_ID 0
340 #define DEFAULT_ENTITY_ID_WRITER 100
345 #define DEFAULT_ENTITY_ID_READER 200
350 #define DEFAULT_PART_NAME_WRITER "HelloWorldPublisher"
355 #define DEFAULT_PART_NAME_READER "HelloWorldSubscriber"
360 #define DEFAULT_TOPIC_NAME "HelloWorldTopic"
366 #define DEFAULT_PEER "127.0.0.1"
371 #define DEFAULT_LOG_VERBOSITY OSAPI_LOG_VERBOSITY_ERROR
373 #if defined(RTI_DARWIN)
377 #define DEFAULT_UDP_INTERFACE "en1"
378 #elif defined (RTI_LINUX)
379 #define DEFAULT_UDP_INTERFACE "eth0"
380 #elif defined (RTI_VXWORKS)
381 #define DEFAULT_UDP_INTERFACE "geisc0"
382 #elif defined(RTI_WIN32)
383 #define DEFAULT_UDP_INTERFACE "Local Area Connection"
385 #define DEFAULT_UDP_INTERFACE "ce0"
388 #if defined(RTI_DARWIN)
392 #define DEFAULT_LOOP_INTERFACE "lo0"
393 #elif defined (RTI_LINUX)
394 #define DEFAULT_LOOP_INTERFACE "lo"
395 #elif defined (RTI_VXWORKS)
396 #define DEFAULT_LOOP_INTERFACE "lo0"
397 #elif defined(RTI_WIN32)
398 #define DEFAULT_LOOP_INTERFACE "Loopback Pseudo-Interface 1"
400 #define DEFAULT_LOOP_INTERFACE "lo0"
406 #define DEFAULT_SLEEP_SEC 1
412 #define DEFAULT_RUN_WINDOW_SEC (24 * 60 * 60)
418 #define ApplicationConfig_INITIALIZER \
429 DEFAULT_ENTITY_ID_WRITER,\
430 DEFAULT_ENTITY_ID_READER,\
431 DEFAULT_PART_NAME_WRITER,\
432 DEFAULT_PART_NAME_READER,\
435 DEFAULT_LOOP_INTERFACE,\
436 DEFAULT_UDP_INTERFACE,\
439 APP_COUNT_UNLIMITED,\
440 DEFAULT_RUN_WINDOW_SEC, \
441 DDS_DomainParticipantFactoryQos_INITIALIZER,\
442 DDS_DomainParticipantQos_INITIALIZER,\
443 DDS_DataReaderQos_INITIALIZER,\
444 DDS_DataWriterQos_INITIALIZER,\
445 DDS_DataReaderListener_INITIALIZER,\
446 DDS_DataWriterListener_INITIALIZER,\
447 DDS_STATUS_MASK_NONE,\
448 DDS_STATUS_MASK_NONE,\
449 DDS_STATUS_MASK_NONE,\
452 DEFAULT_LOG_VERBOSITY,\
460 ApplicationConfig_initialize(ApplicationConfig_t *config);
467 ApplicationConfig_finalize(ApplicationConfig_t *config);
474 ApplicationConfig_parse_arguments(
475 ApplicationConfig_t *config,
int argc,
char** argv);
482 ApplicationConfig_print(ApplicationConfig_t *config);
492 typedef struct Application {
496 ApplicationConfig_t config;
500 struct UDP_InterfaceFactoryProperty property_udp;
504 struct DPDE_DiscoveryPluginProperty property_dpde;
508 struct DPSE_DiscoveryPluginProperty property_dpse;
513 struct DDS_PublicationBuiltinTopicData rem_publication_data;
518 struct DDS_SubscriptionBuiltinTopicData rem_subscription_data;
522 DDS_DomainParticipant *participant;
526 DDS_Publisher *publisher;
530 DDS_Subscriber *subscriber;
538 DDS_DataReader *reader;
542 DDS_DataWriter *writer;
547 DDS_WaitSet *waitset;
551 DDS_StatusCondition *condition_dr;
556 struct DDS_ConditionSeq active_conditions;
561 DDS_Long count_processed;
569 RTI_BOOL publication_matched_called;
577 extern Application_t*
578 Application_create(ApplicationConfig_t *config);
585 Application_delete(Application_t *application);
591 Application_enable(Application_t *application);
597 Application_wait_for_data(Application_t *application);
603 Application_help(
char *appname);
609 Application_ListenerHelper_on_data_available(
611 DDS_DataReader * reader);
617 Application_ListenerHelper_on_subscription_matched(
619 DDS_DataReader * reader,
621 DDS_SubscriptionMatchedStatus *status);
627 Application_ListenerHelper_on_publication_matched(
629 DDS_DataWriter * writer,
630 const struct DDS_PublicationMatchedStatus *status);