CARMA C++
LLManagerThread.h
1 #ifndef LLMANAGERTHREAD_H
2 #define LLMANAGERTHREAD_H
3 // $Id: LLManagerThread.h,v 1.11 2013/01/07 21:35:27 iws Exp $
4 
5 #include <carma/linelength/LLWorkerBoard0Thread.h>
6 #include <carma/linelength/LLWorkerBoard1Thread.h>
7 
8 #include <carma/util/AutoPthreadQuitAndJoinGroup.h>
9 #include <carma/util/ScopedPthreadMutexLock.h>
10 
11 // forward declaration
12 namespace carma {
13 namespace monitor {
14  class LineLengthSubsystem;
15 } // namespace carma::monitor
16 } // namespace carma
17 
18 namespace carma {
19 namespace linelength {
20 
21 struct LLManagerData {
22  // constructor
23  LLManagerData();
24 
25  // per-antenna data
26  std::vector<bool> initialized;
27  std::vector<double> length;
28  std::vector<double> offsetPhase;
29  std::vector<unsigned short> synthNumber;
30 
31  // per-synthesizer data
32  std::vector<double> synthFreq;
33 };
34 
35 class LLManagerThread
36 {
37  public:
38  LLManagerThread(const std::string &ni0, const std::string &ni1, const double awdelay);
39  ~LLManagerThread();
40 
41  // CORBA methods
42  void setOffsetPhase(const unsigned short ant, const double cycles);
43  void setAntennaLORef(const unsigned short ant, const unsigned short synth);
44  void setLORefFreq(const unsigned short synth, const double freq_hz);
45  void setNominalLineLength(const unsigned short ant, const double length_ns);
46 
47  void takeBoard0Snapshot(const std::string &filename);
48  void takeBoard1Snapshot(const std::string &filename);
49 
50  // Misc Public Interface
51  void startWorkerBoard0();
52  void startWorkerBoard1();
53 
54  // Thread
55  static void thread(LLManagerThread &This) { This.run(); };
56  void run();
57 
58  private:
59  carma::util::AutoPthreadQuitAndJoinGroup _group;
60  LLWorkerBoard0Thread _ni0Worker;
61  LLWorkerBoard1Thread _ni1Worker;
62 
63  // monitor system
64  const double _awdelay;
65 
66  void writeBoard0MP(carma::monitor::LineLengthSubsystem &LLmon);
67  void writeBoard1MP(carma::monitor::LineLengthSubsystem &LLmon);
68 
69  // all data members below are protected by this mutex
70  mutable carma::util::PthreadMutex _updateGuard;
71  struct LLManagerData _managerData;
72 };
73 
74 } // namespace carma::linelength
75 } // namespace carma
76 
77 #endif // LLMANAGERTHREAD_H
78 // vim: set expandtab ts=4 sts=4 sw=4:
A simple wrapper class that makes use of ::pthread_mutex_t easier in a C++ world. ...
Definition: PthreadMutex.h:41