/* No listener is needed; we poll readers in this function*/ void poll_data(orderedDataReader *ordered_reader[], int numreaders) { struct DDS_SampleInfoSeq info_seq; struct orderedSeq data_seq = DDS_SEQUENCE_INITIALIZER; DDS_ReturnCode_t retcode = DDS_RETCODE_OK; int r, i, ident; for (r = 0; r < numreaders; ++r) { retcode = orderedDataReader_take(ordered_reader[r], &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) { /* Not an error */ continue; } else if (retcode != DDS_RETCODE_OK) { /* Is an error */ printf("take error: %d\n", retcode); return; } for (i = 0; i < orderedSeq_get_length(&data_seq); ++i) { ordered* data; if (DDS_SampleInfoSeq_get_reference(&info_seq, i)->valid_data) { data = orderedSeq_get_reference(&data_seq, i); /* Make things a bit easier to read. */ ident = r; while (ident--) { printf("\t"); } printf("Reader %d: Instance%d->value = %d\n", r, data->id, data->value); } } retcode = orderedDataReader_return_loan(ordered_reader[r], &data_seq, &info_seq); if (retcode != DDS_RETCODE_OK) { printf("return loan error %d\n", retcode); } DDS_SampleInfoSeq_set_maximum(&info_seq, 0); orderedSeq_set_maximum(&data_seq, 0); } }
void FidCt_StatCallback(void* listener_data, DDS_DataReader* reader) { FidCt_Stat *FidCtIssue; struct DDS_SampleInfo* info = NULL; struct DDS_SampleInfoSeq info_seq = DDS_SEQUENCE_INITIALIZER; DDS_ReturnCode_t retcode; DDS_Boolean result; long i,numIssues; struct FidCt_StatSeq data_seq = DDS_SEQUENCE_INITIALIZER; FidCt_StatDataReader *FidCt_Stat_reader = NULL; FidCt_Stat_reader = FidCt_StatDataReader_narrow(pFidCt_StatSub->pDReader); if ( FidCt_Stat_reader == NULL) { errLogRet(LOGIT,debugInfo,"FidCt_StatCallback: DataReader narrow error\n"); return; } 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 = FidCt_StatDataReader_take_next_instance( FidCt_Stat_reader, &data_seq, &info_seq, DDS_LENGTH_UNLIMITED, &DDS_HANDLE_NIL, DDS_ANY_SAMPLE_STATE, DDS_ANY_VIEW_STATE, DDS_ANY_INSTANCE_STATE); // retcode = Cntlr_CommDataReader_take(CntlrComm_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,"FidCt_StatCallback: next instance error %d\n",retcode); break; // return; } numIssues = FidCt_StatSeq_get_length(&data_seq); for (i=0; i < numIssues; i++) { info = DDS_SampleInfoSeq_get_reference(&info_seq, i); if (info->valid_data) { FidCtIssue = (FidCt_Stat *) Cntlr_CommSeq_get_reference(&data_seq,i); DPRINT2(+3,"FidCt_StatCallback(): FID=%d, Ct=%d\n", FidCtIssue->FidCt, FidCtIssue->Ct); if (pCurrentStatBlock != NULL) { if ( (pCurrentStatBlock->Acqstate == ACQ_INACTIVE) && (FidCtIssue->FidCt == 0) && (FidCtIssue->Ct == 0) ) { /* DPRINT(-5,"Set IDLE\n"); */ pCurrentStatBlock->Acqstate = ACQ_IDLE; } else if ( (pCurrentStatBlock->Acqstate == ACQ_IDLE) && (FidCtIssue->FidCt == -1) && (FidCtIssue->Ct == -1) ) { pCurrentStatBlock->Acqstate = ACQ_INACTIVE; /* DPRINT(-5,"Set INACTIVE\n"); */ } if ( (pCurrentStatBlock->Acqstate != ACQ_ACQUIRE) || FidCtIssue->FidCt || FidCtIssue->Ct ) { pCurrentStatBlock->AcqFidCnt = FidCtIssue->FidCt; pCurrentStatBlock->AcqCtCnt = FidCtIssue->Ct; sendConsoleStatus(); } } } } retcode = FidCt_StatDataReader_return_loan( FidCt_Stat_reader, &data_seq, &info_seq); DDS_SampleInfoSeq_set_maximum(&info_seq, 0); } // while return; }
/* 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; }