/* 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);
    }
}
Example #2
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;
}
Example #3
0
/* 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;
}