static void test_aux (void) { DDS_DomainParticipant p; DDS_Topic t; DDS_TopicDescription td; DDS_Subscriber sub, nsub; DDS_DataReader dr; DDS_StatusCondition sc, sc2; DDS_StatusMask sm; DDS_InstanceHandle_t h, h2; DDS_Duration_t w; DDS_LivelinessChangedStatus lcs; DDS_RequestedDeadlineMissedStatus dms; DDS_RequestedIncompatibleQosStatus iqs; DDS_SampleLostStatus sls; DDS_SampleRejectedStatus srs; DDS_SubscriptionMatchedStatus sms; DDS_InstanceHandleSeq handles; DDS_ReturnCode_t r; p = DDS_DomainParticipantFactory_create_participant (0, DDS_PARTICIPANT_QOS_DEFAULT, NULL, 0); fail_unless (p != NULL); r = register_HelloWorldData_type (p); fail_unless (r == DDS_RETCODE_OK); t = DDS_DomainParticipant_create_topic (p, "HelloWorld", TYPE_NAME, DDS_TOPIC_QOS_DEFAULT, NULL, 0); fail_unless (t != NULL); td = DDS_DomainParticipant_lookup_topicdescription (p, "HelloWorld"); fail_unless (td != NULL); sub = DDS_DomainParticipant_create_subscriber (p, DDS_SUBSCRIBER_QOS_DEFAULT, NULL, 0); fail_unless (sub != NULL); v_printf (" - Test reader auxiliary functions.\r\n"); dr = DDS_Subscriber_create_datareader (sub, td, DDS_DATAREADER_QOS_DEFAULT, NULL, 0); fail_unless (dr != NULL); sc = DDS_DataReader_get_statuscondition (dr); fail_unless (sc != NULL); sc2 = DDS_Entity_get_statuscondition (dr); fail_unless (sc2 == sc); sm = DDS_DataReader_get_status_changes (dr); fail_unless (sm == 0); sm = DDS_Entity_get_status_changes (dr); fail_unless (sm == 0); h = DDS_Entity_get_instance_handle (dr); fail_unless (h != 0); h2 = DDS_DataReader_get_instance_handle (dr); fail_unless (h == h2); r = DDS_DataReader_get_liveliness_changed_status (dr, &lcs); fail_unless (r == DDS_RETCODE_OK); r = DDS_DataReader_get_requested_deadline_missed_status (dr, &dms); fail_unless (r == DDS_RETCODE_OK); r = DDS_DataReader_get_requested_incompatible_qos_status (dr, &iqs); fail_unless (r == DDS_RETCODE_OK); r = DDS_DataReader_get_sample_lost_status (dr, &sls); fail_unless (r == DDS_RETCODE_OK); r = DDS_DataReader_get_sample_rejected_status (dr, &srs); fail_unless (r == DDS_RETCODE_OK); r = DDS_DataReader_get_subscription_matched_status (dr, &sms); fail_unless (r == DDS_RETCODE_OK); td = DDS_DataReader_get_topicdescription (dr); fail_unless ((DDS_Topic) td == t); nsub = DDS_DataReader_get_subscriber (dr); fail_unless (nsub == sub); w.sec = 2; w.nanosec = 0; r = DDS_DataReader_wait_for_historical_data (dr, &w); fail_unless (r == DDS_RETCODE_OK); DDS_InstanceHandleSeq__init (&handles); r = DDS_DataReader_get_matched_publications (dr, &handles); fail_unless (r == DDS_RETCODE_OK); DDS_InstanceHandleSeq__clear (&handles); r = DDS_Subscriber_delete_datareader (sub, dr); fail_unless (r == DDS_RETCODE_OK); r = DDS_DomainParticipant_delete_subscriber (p, sub); fail_unless (r == DDS_RETCODE_OK); r = DDS_DomainParticipant_delete_topic (p, t); fail_unless (r == DDS_RETCODE_OK); unregister_HelloWorldData_type (p); r = DDS_DomainParticipantFactory_delete_participant (p); fail_unless (r == DDS_RETCODE_OK); }
/* 4x callback */ void Lock_CmdCallback(void* listener_data, DDS_DataReader* reader) { Lock_Cmd *recvIssue; DDS_ReturnCode_t retcode; DDS_Boolean result; struct DDS_SampleInfoSeq info_seq = DDS_SEQUENCE_INITIALIZER; struct Lock_CmdSeq data_seq = DDS_SEQUENCE_INITIALIZER; struct DDS_SampleInfo* info = NULL; long i,numIssues; Lock_CmdDataReader *LockCmd_reader = NULL; DDS_TopicDescription *topicDesc; LockCmd_reader = Lock_CmdDataReader_narrow(pLockCmdSubs[0]->pDReader); if ( LockCmd_reader == NULL) { errLogRet(LOGIT,debugInfo, "Lock_CmdCallback: DataReader narrow error.\n"); return; } topicDesc = DDS_DataReader_get_topicdescription(reader); DPRINT2(-1,"Lock_CmdCallback; Type: '%s', Name: '%s'\n", DDS_TopicDescription_get_type_name(topicDesc), DDS_TopicDescription_get_name(topicDesc)); while(1) { // Given DDS_HANDLE_NIL as a parameter, take_next_instance returns // a sequence containing samples from only the next (in a well-determined // but unspecified order) un-taken instance. retcode = Lock_CmdDataReader_take_next_instance( LockCmd_reader, &data_seq, &info_seq, DDS_LENGTH_UNLIMITED, &DDS_HANDLE_NIL, DDS_ANY_SAMPLE_STATE, DDS_ANY_VIEW_STATE, DDS_ANY_INSTANCE_STATE); // retcode = Lock_CmdDataReader_take(LockCmd_reader, // &data_seq, &info_seq, // DDS_LENGTH_UNLIMITED, DDS_ANY_SAMPLE_STATE, // DDS_ANY_VIEW_STATE, DDS_ANY_INSTANCE_STATE); if (retcode == DDS_RETCODE_NO_DATA) { break ; // return; } else if (retcode != DDS_RETCODE_OK) { errLogRet(LOGIT,debugInfo, "Lock_CmdCallback: next instance error %d\n",retcode); break ; // return; } numIssues = Lock_CmdSeq_get_length(&data_seq); for (i=0; i < numIssues; i++) { info = DDS_SampleInfoSeq_get_reference(&info_seq, i); if ( info->valid_data) { recvIssue = Lock_CmdSeq_get_reference(&data_seq,i); DPRINT5(-1,"Lock_Cmd CallBack: cmd: %d, arg1: %d, arg2: %d, arg3: %lf, arg4: %lf crc: 0x%lx\n", recvIssue->cmd,recvIssue->arg1, recvIssue->arg2, recvIssue->arg3, recvIssue->arg4); msgQSend(pMsgesToLockParser, (char*) recvIssue, sizeof(Lock_Cmd), NO_WAIT, MSG_PRI_NORMAL); } } retcode = Lock_CmdDataReader_return_loan( LockCmd_reader, &data_seq, &info_seq); DDS_SampleInfoSeq_set_maximum(&info_seq, 0); } // while return; }