ifw-ccf  1.0.0
procThread.hpp
Go to the documentation of this file.
1 
5 #ifndef CCF_CONTROL_PROC_THREAD_HPP_H_
6 #define CCF_CONTROL_PROC_THREAD_HPP_H_
7 
8 #include <ccf/common/base.hpp>
12 
13 namespace ccf::control {
14 
17  public:
18 
20  static const std::string& GenId(const uint16_t proc_thread_nb);
21 
23  static void SetStatusAll(const ccf::common::ProcStatus status);
24 
26  ProcThread(const std::string& thread_id,
27  ccf::mptk::MessageBus& message_bus,
28  const double period = 0.1);
29 
30  virtual ~ProcThread();
31 
33  void Initialise();
34 
36  virtual void UserLogic();
37 
40 
43 
46 
49 
51  void SetStatus(const ccf::common::ProcStatus status);
52 
55 
56  // TODO: Remove these. Use the repository in ccf::common::RecipeBase.
57  void AddRecipe(ccf::common::RecipeBase* recipe_obj);
58  uint8_t NbOfRecipes() const;
59  const ccf::common::RecipeBase& GetRecipe(const uint16_t nb);
60 
62  uint16_t GetProcThreadNb() const;
63 
65  const std::string& GetProcThreadName() const;
66 
69 
70  protected:
71 
72  private:
73  bool _CheckMessageBus(bool& new_data_available,
74  bool& new_setup);
75  void _CopyAndReleaseFrameHandle();
76  void _ExecuteRecipes();
77  void _SubmitAndNotify();
78  void _HandleNewSetup();
79 
80  bool m_allow_frame_skippping;
81  double m_time_for_last_frame_skipping_log;
82 
83  uint16_t m_proc_thread_nb;
84 
85  std::vector<std::string> m_pub_thr_ids;
86 
87  ccf::common::ProcStatus m_proc_thread_status; // Used to avoid updating OLDB/PubSub unnecessarily.
88 
89  std::list<ccf::common::RecipeBase*> m_recipes;
90 
91  // Map to find Recipe objects easily by means of the Instance ID.
92  std::map<std::string, ccf::common::RecipeBase*> m_recipe_map;
93 
94  // Note: The queues are allocated and deleted by the ccf::control::application class.
95  ccf::common::FrameQueue* m_input_q;
96  ccf::common::FrameQueue* m_output_q;
97 
98  ccf::mptk::Message m_cur_msg; // Current thread message being handled.
99  ccf::common::DataFrame m_cur_frame; // Current data frame being handled.
100 
101  ccf::common::FrameStatistics m_frame_stat;
102 
103  bool m_proc_enabled;
104  };
105 
106 }
107 
108 #endif // CCF_CONTROL_PROC_THREAD_HPP_H_
ccf::control::ProcThread::SetStatus
void SetStatus(const ccf::common::ProcStatus status)
Set the Processing Status of this Processing Thread.
Definition: procThread.cpp:279
ccf::control::ProcThread::NbOfRecipes
uint8_t NbOfRecipes() const
Definition: procThread.cpp:324
frameQueue.hpp
ccf::control::ProcThread::GenId
static const std::string & GenId(const uint16_t proc_thread_nb)
Generate the Processing Thread ID used for the interthread communication.
Definition: procThread.cpp:13
ccf::control::ProcThread::GetStatus
ccf::common::ProcStatus GetStatus() const
Return the Processing Status of this Processing Thread.
Definition: procThread.cpp:305
ccf::control::ProcThread::SetOutputQ
void SetOutputQ(ccf::common::FrameQueue &queue)
Set reference to the Output Queue of this Processing Thread.
Definition: procThread.cpp:263
ccf::control::ProcThread::UserLogic
virtual void UserLogic()
Implements the user logic, executed periodically.
Definition: procThread.cpp:85
ccf::mptk::Thread
IFW CTD Multiprocessing Toolkit Thread base class.
Definition: thread.hpp:28
ccf::common::Base
Class to be used as parent all CCF classes.
Definition: base.hpp:93
ccf::control::ProcThread::SetInputQ
void SetInputQ(ccf::common::FrameQueue &queue)
Set reference to the Application Input Queue from which the thread gets the frames.
Definition: procThread.cpp:247
ccf::control::ProcThread::ProcThread
ProcThread(const std::string &thread_id, ccf::mptk::MessageBus &message_bus, const double period=0.1)
See ccf::mptk::Thread.
Definition: procThread.cpp:40
ccf::control::ProcThread::GetInputQ
ccf::common::FrameQueue & GetInputQ()
Get reference to the Application Input Queue from which the thread gets the frames.
Definition: procThread.cpp:255
ccf::control::ProcThread::GetProcThreadNb
uint16_t GetProcThreadNb() const
Return the number/index allocated to this Processing Thread.
Definition: procThread.cpp:339
ccf::mptk::MessageBus
IFW CTD Multiprocessing Toolkit Message Bus.
Definition: messageBus.hpp:30
ccf::control::ProcThread::GetProcThreadName
const std::string & GetProcThreadName() const
Return the name allocated in the cfg to this Processing Thread.
ccf::mptk::Message
IFW CTD Multiprocessing Toolkit Message class.
Definition: message.hpp:17
ccf::control::ProcThread::Initialise
void Initialise()
Initialise the thread object.
Definition: procThread.cpp:70
ccf::control::ProcThread::SetStatusAll
static void SetStatusAll(const ccf::common::ProcStatus status)
Set the status of all Processing Threads running.
Definition: procThread.cpp:23
ccf::common::ProcStatus
ProcStatus
Possible states for a Processing Recipe defined.
Definition: base.hpp:191
ccf::control::ProcThread::GetFrameStat
ccf::common::FrameStatistics & GetFrameStat()
Get reference to frame handling statistics.
Definition: procThread.cpp:344
ccf::common::FrameQueue
The FrameQueue class implements a queue, to manage a set of CCF DataFrame instances as a ring buffer.
Definition: frameQueue.hpp:14
ccf::control::ProcThread
Processing Thread MPTK Thread implementation (see also ccf::mptk::Thread).
Definition: procThread.hpp:16
ccf::control::ProcThread::AddRecipe
void AddRecipe(ccf::common::RecipeBase *recipe_obj)
Definition: procThread.cpp:310
base.hpp
ccf::control::ProcThread::GetOutputQ
ccf::common::FrameQueue & GetOutputQ()
Get reference to the Output Queue of this Processing Thread.
Definition: procThread.cpp:271
ccf::common::RecipeBase
Processing Recipe base class. All recipes shall be derived from this class.
Definition: recipeBase.hpp:49
ccf::common::FrameStatistics
Class used by the threads to store info for generating performance statistics.
Definition: utilities.hpp:25
recipeBase.hpp
ccf::control
Definition: acqThread.cpp:10
ccf::common::DataFrame
Frame class used to store the data and metadata for one frames received from the camera.
Definition: dataFrame.hpp:15
utilities.hpp
ccf::control::ProcThread::~ProcThread
virtual ~ProcThread()
Definition: procThread.cpp:56
ccf::control::ProcThread::GetRecipe
const ccf::common::RecipeBase & GetRecipe(const uint16_t nb)
Definition: procThread.cpp:329