OpenRTM-aist 2.0.2
Loading...
Searching...
No Matches
PublisherPeriodic.h
Go to the documentation of this file.
1// -*- C++ -*-
20#ifndef RTC_PUBLISHERPERIODIC_H
21#define RTC_PUBLISHERPERIODIC_H
22
23#include <coil/Task.h>
24#include <condition_variable>
25#include <coil/PeriodicTask.h>
26
27#include <rtm/RTC.h>
28#include <rtm/PublisherBase.h>
29#include <rtm/CdrBufferBase.h>
30#include <rtm/SystemLogger.h>
31#include <rtm/ConnectorBase.h>
33
34namespace coil
35{
36 class Properties;
37} // namespace coil
38
39namespace RTC
40{
41 class InPortConsumer;
64 : public PublisherBase
65 {
66 public:
67
78
93
155 DataPortStatus init(coil::Properties& prop) override;
156
183
210
245 ConnectorListenersBase* listeners) override;
320 std::chrono::nanoseconds timeout) override;
348 bool isActive() override;
349
376
403
417 virtual int svc();
418
419 protected:
427
435 void setPushPolicy(const coil::Properties& prop);
436
444 bool createTask(const coil::Properties& prop);
445
450
455
460
465
522 ByteData& data);
523
524
543 ByteData& data);
544
554 inline void onBufferWrite(ByteData& data)
555 {
557 m_profile, data);
558 }
559
569 inline void onBufferFull(ByteData& data)
570 {
571 m_listeners->notifyOut(
573 }
574
585 {
586 m_listeners->notifyOut(
588 }
589
599 inline void onBufferRead(ByteData& data)
600 {
601 m_listeners->notifyOut(ConnectorDataListenerType::ON_BUFFER_READ, m_profile, data);
602 }
603
613 inline void onSend(ByteData& data)
614 {
615 m_listeners->notifyOut(ConnectorDataListenerType::ON_SEND, m_profile, data);
616 }
617
627 inline void onReceived(ByteData& data)
628 {
629 m_listeners->notifyOut(ConnectorDataListenerType::ON_RECEIVED, m_profile, data);
630 }
631
641 inline void onReceiverFull(ByteData& data)
642 {
643 m_listeners->notifyOut(ConnectorDataListenerType::ON_RECEIVER_FULL, m_profile, data);
644 }
645
655 inline void onReceiverTimeout(ByteData& data)
656 {
657 m_listeners->notifyOut(ConnectorDataListenerType::ON_RECEIVER_TIMEOUT, m_profile, data);
658 }
659
669 inline void onReceiverError(ByteData& data)
670 {
671 m_listeners->notifyOut(ConnectorDataListenerType::ON_RECEIVER_ERROR, m_profile, data);
672 }
673
681 inline void onBufferEmpty()
682 {
683 m_listeners->notify(ConnectorListenerType::ON_BUFFER_EMPTY, m_profile);
684 }
685
693 inline void onSenderEmpty()
694 {
695 m_listeners->notify(ConnectorListenerType::ON_SENDER_EMPTY, m_profile);
696 }
697
705 inline void onSenderError()
706 {
707 m_listeners->notify(ConnectorListenerType::ON_SENDER_ERROR, m_profile);
708 }
709
710
711 private:
712 bool bufferIsEmpty()
713 {
714 if (m_buffer->empty() && !m_readback)
715 {
716 RTC_DEBUG(("buffer empty"));
719 return true;
720 }
721 return false;
722 }
723
724 Logger rtclog{"PublisherPeriodic"};
725 InPortConsumer* m_consumer{nullptr};
726 CdrBufferBase* m_buffer{nullptr};
727 ConnectorInfo m_profile;
728 coil::PeriodicTaskBase* m_task{nullptr};
729 ConnectorListenersBase* m_listeners{nullptr};
731 std::mutex m_retmutex;
732 Policy m_pushPolicy{PUBLISHER_POLICY_NEW};
733 int m_skipn{0};
734 bool m_active{false};
735 bool m_readback{false};
736 int m_leftskip{0};
737 ByteData m_data;
738 };
739} // namespace RTC
740
741extern "C"
742{
744}
745
746#endif // RTC_PUBLISHERPERIODIC_H
Connector base class.
connector listener class
Publisher base class.
void PublisherPeriodicInit()
RTComponent header.
RT component logger class.
#define RTC_DEBUG(fmt)
Debug level log output macro.
Definition SystemLogger.h:665
DataPortStatus mixin class.
BufferBase abstract class.
Definition BufferBase.h:106
virtual bool empty() const =0
Check on whether the buffer is empty.
Definition ByteDataStreamBase.h:63
Definition ByteData.h:30
ConnectorInfo class.
Definition ConnectorBase.h:50
Definition ConnectorListener.h:1354
virtual::RTC::ConnectorListenerStatus::Enum notifyOut(ConnectorDataListenerType type, ConnectorInfo &info, ByteData &data)=0
Notify listeners. (Typed data version)
virtual::RTC::ConnectorListenerStatus::Enum notify(ConnectorListenerType type, ConnectorInfo &info)=0
Virtual Callback method.
InPortConsumer abstract class.
Definition InPortConsumer.h:78
Base class of Publisher.
Definition PublisherBase.h:66
PublisherPeriodic class.
Definition PublisherPeriodic.h:65
DataPortStatus pushAll()
push "all" policy
DataPortStatus write(ByteDataStreamBase *data, std::chrono::nanoseconds timeout) override
Write data.
void onBufferWrite(ByteData &data)
Notify an ON_BUFFER_WRITE event to listeners.
Definition PublisherPeriodic.h:554
PublisherPeriodic()
Constructor.
void onReceived(ByteData &data)
Notify an ON_RECEIVED event to listeners.
Definition PublisherPeriodic.h:627
bool createTask(const coil::Properties &prop)
Setting Task .
void onSend(ByteData &data)
Notify an ON_SEND event to listners.
Definition PublisherPeriodic.h:613
void onReceiverFull(ByteData &data)
Notify an ON_RECEIVER_FULL event to listeners.
Definition PublisherPeriodic.h:641
DataPortStatus invokeListener(DataPortStatus status, ByteData &data)
Call listeners according to the DataPortStatus.
void onBufferWriteTimeout(ByteData &data)
Notify an ON_BUFFER_WRITE_TIMEOUT event to listeners.
Definition PublisherPeriodic.h:584
DataPortStatus pushFifo()
push "fifo" policy
DataPortStatus pushNew()
push "new" policy
void onBufferEmpty()
Notify an ON_BUFFER_EMPTY event to listeners .
Definition PublisherPeriodic.h:681
void onReceiverError(ByteData &data)
Notify an ON_RECEIVER_ERROR event to listeners.
Definition PublisherPeriodic.h:669
DataPortStatus init(coil::Properties &prop) override
Initialization.
DataPortStatus convertReturn(BufferStatus status, ByteData &data)
Convertion from BufferStatus to DataPortStatus.
void onBufferFull(ByteData &data)
Notify an ON_BUFFER_FULL event to listeners.
Definition PublisherPeriodic.h:569
~PublisherPeriodic() override
Destructor.
DataPortStatus activate() override
activation
DataPortStatus setBuffer(CdrBufferBase *buffer) override
Setting buffer pointer.
void setPushPolicy(const coil::Properties &prop)
Setting PushPolicy .
void onReceiverTimeout(ByteData &data)
Notify an ON_RECEIVER_TIMEOUT event to listeners.
Definition PublisherPeriodic.h:655
DataPortStatus setConsumer(InPortConsumer *consumer) override
Store InPort consumer.
void onSenderError()
Notify an ON_SENDER_ERROR event to listeners .
Definition PublisherPeriodic.h:705
DataPortStatus pushSkip()
push "skip" policy
Policy
Definition PublisherPeriodic.h:421
@ PUBLISHER_POLICY_ALL
Definition PublisherPeriodic.h:422
@ PUBLISHER_POLICY_NEW
Definition PublisherPeriodic.h:425
@ PUBLISHER_POLICY_SKIP
Definition PublisherPeriodic.h:424
@ PUBLISHER_POLICY_FIFO
Definition PublisherPeriodic.h:423
void onSenderEmpty()
Notify an ON_SENDER_EMPTY event to listeners .
Definition PublisherPeriodic.h:693
bool isActive() override
If publisher is active state.
DataPortStatus setListener(ConnectorInfo &info, ConnectorListenersBase *listeners) override
Set the listener.
DataPortStatus deactivate() override
deactivation
void onBufferRead(ByteData &data)
Notify an ON_BUFFER_READ event to listeners.
Definition PublisherPeriodic.h:599
virtual int svc()
Thread execution function.
RT-Component.
BufferBase< ByteData > CdrBufferBase
Definition CdrBufferBase.h:31
coil::Properties Properties
Definition RTC.h:72
BufferStatus
DataPortStatus return codes.
Definition BufferStatus.h:57
Definition DefaultPeriodicTask.h:24