RENEWLab  1.1.0
RENEW project
hdf5_reader.h
Go to the documentation of this file.
1 /*
2  Copyright (c) 2018-2020
3  RENEW OPEN SOURCE LICENSE: http://renew-wireless.org/license
4 
5 ----------------------------------------------------------------------
6 Event based message queue thread class for the recorder worker
7 ---------------------------------------------------------------------
8 */
9 #ifndef SOUNDER_HDF5_READER_H_
10 #define SOUNDER_HDF5_READER_H_
11 
12 #include <condition_variable>
13 #include <mutex>
14 #include <vector>
15 
16 #include "config.h"
17 #include "macros.h"
18 #include "receiver.h"
19 
20 namespace Sounder {
21 class Hdf5Reader {
22  public:
23  // enum RecordEventType { kThreadTermination, kTaskRecord };
24  //
25  // struct RecordEvent_data {
26  // RecordEventType event_type;
27  // int data;
28  // SampleBuffer* rx_buffer;
29  // size_t rx_buff_size;
30  // };
31 
32  Hdf5Reader(Config* in_cfg, moodycamel::ConcurrentQueue<Event_data>& msg_queue,
33  SampleBuffer* tx_buffer, size_t thread_id, int core,
34  size_t queue_size, bool wait_signal = true);
35  ~Hdf5Reader();
36 
37  void Start(void);
38  void Stop(void);
39  bool DispatchWork(Event_data event);
41 
42  private:
43  /*Main threading loop */
44  void DoReading(void);
45  void Finalize();
46 
47  //1 - Producer (dispatcher), 1 - Consumer
48  moodycamel::ConcurrentQueue<Event_data>& msg_queue_;
49  moodycamel::ConcurrentQueue<Event_data> event_queue_;
50  moodycamel::ProducerToken producer_token_;
53  std::thread thread_;
54 
55  size_t id_;
57 
58  /* >= 0 to assign a core to the thread
59  * <0 to disable thread core assignment */
61 
62  /* Synchronization for startup and sleeping */
63  /* Setting wait signal to false will disable the thread waiting on new message
64  * may cause excessive CPU load for infrequent messages.
65  * However, when the message processing time ~= queue posting time the mutex could
66  * become unnecessary work
67  */
70  std::condition_variable condition_;
71  bool running_;
72  std::vector<FILE*> fp;
73 };
74 }; // namespace Sounder
75 
76 #endif /* SOUNDER_HDF5_READER_H_ */
Sounder::Hdf5Reader::ReadFrame
Event_data ReadFrame(Event_data event, int *offset)
Definition: hdf5_reader.cc:88
Sounder::Hdf5Reader::Hdf5Reader
Hdf5Reader(Config *in_cfg, moodycamel::ConcurrentQueue< Event_data > &msg_queue, SampleBuffer *tx_buffer, size_t thread_id, int core, size_t queue_size, bool wait_signal=true)
Definition: hdf5_reader.cc:18
Sounder::Hdf5Reader::core_alloc_
int core_alloc_
Definition: hdf5_reader.h:60
Event_data
Definition: macros.h:62
Sounder::Hdf5Reader::Start
void Start(void)
Definition: hdf5_reader.cc:39
macros.h
Sounder::Hdf5Reader::DoReading
void DoReading(void)
Definition: hdf5_reader.cc:135
Sounder::Hdf5Reader::id_
size_t id_
Definition: hdf5_reader.h:55
Sounder::Hdf5Reader::~Hdf5Reader
~Hdf5Reader()
Definition: hdf5_reader.cc:35
mutex
pthread_mutex_t mutex
Definition: receiver.cc:24
Sounder::Hdf5Reader::thread_
std::thread thread_
Definition: hdf5_reader.h:53
Sounder::Hdf5Reader::DispatchWork
bool DispatchWork(Event_data event)
Definition: hdf5_reader.cc:68
Sounder::Hdf5Reader::config_
Config * config_
Definition: hdf5_reader.h:52
Sounder::Hdf5Reader::packet_data_length_
size_t packet_data_length_
Definition: hdf5_reader.h:56
Sounder::Hdf5Reader::event_queue_
moodycamel::ConcurrentQueue< Event_data > event_queue_
Definition: hdf5_reader.h:49
Sounder::Hdf5Reader::tx_buffer_
SampleBuffer * tx_buffer_
Definition: hdf5_reader.h:51
Sounder::Hdf5Reader::fp
std::vector< FILE * > fp
Definition: hdf5_reader.h:72
Sounder::Hdf5Reader::producer_token_
moodycamel::ProducerToken producer_token_
Definition: hdf5_reader.h:50
Sounder::Hdf5Reader::msg_queue_
moodycamel::ConcurrentQueue< Event_data > & msg_queue_
Definition: hdf5_reader.h:48
Sounder
Definition: hdf5_lib.cc:20
Sounder::Hdf5Reader::condition_
std::condition_variable condition_
Definition: hdf5_reader.h:70
Config
Definition: config.h:20
Sounder::Hdf5Reader::running_
bool running_
Definition: hdf5_reader.h:71
receiver.h
Sounder::Hdf5Reader::Finalize
void Finalize()
Definition: hdf5_reader.cc:57
Sounder::Hdf5Reader::sync_
std::mutex sync_
Definition: hdf5_reader.h:69
config.h
SampleBuffer
Definition: macros.h:47
Sounder::Hdf5Reader
Definition: hdf5_reader.h:21
Sounder::Hdf5Reader::wait_signal_
bool wait_signal_
Definition: hdf5_reader.h:68
Sounder::Hdf5Reader::Stop
void Stop(void)
Definition: hdf5_reader.cc:51