My Project
 All Classes Files Functions Variables Enumerations Enumerator Friends Macros Pages
GenericMasterTaskMsg.h
Go to the documentation of this file.
1 #ifndef GENERICMASTERTASKMSG_H
2 #define GENERICMASTERTASKMSG_H
3 
11 #include "gcp/util/common/GenericTaskMsg.h"
12 #include "gcp/util/common/LogStream.h"
13 
14 #include <string.h>
15 
16 #define SIGNALTASK_HANDLER_FN(fn) void (fn)(int sigNo, void* args)
17 #define SIGNAL_NAME_LEN 10
18 
19 namespace gcp {
20  namespace util {
21 
37 
38  public:
39 
44  ADD_HANDLER = GenericTaskMsg::LAST+1, // Add a signal handler
45  ENABLE_TIMER, // Enable/Disable a timer
46  INSTALL_TIMER, // Install a timer
47  INSTALL_SIGNAL, // Install a signal
48  TASK_SPECIFIC // A task-specific message
49  };
50 
54  union {
55  struct {
56  char name[SIGNAL_NAME_LEN+1];
57  int sigNo;
58  unsigned long initSec;
59  unsigned long initNsec;
60  unsigned long intervalSec;
61  unsigned long intervalNsec;
62  SIGNALTASK_HANDLER_FN(*handler);
63  } installTimer;
64 
65  struct {
66  int sigNo;
67  SIGNALTASK_HANDLER_FN(*handler);
68  void* args;
69  } installSignal;
70 
71  struct {
72  char name[SIGNAL_NAME_LEN+1];
73  bool enable;
74  } enableTimer;
75 
76  struct {
77  char name[SIGNAL_NAME_LEN+1];
78  SIGNALTASK_HANDLER_FN(*handler);
79  void* args;
80  bool add;
81  } addHandler;
82 
84 
89  inline void packInstallTimerMsg(std::string name,
90  int sigNo,
91  unsigned long initSec,
92  unsigned long initNsec,
93  unsigned long intervalSec,
94  unsigned long intervalNsec,
95  SIGNALTASK_HANDLER_FN(*handler))
96  {
98  gcp::util::GenericMasterTaskMsg::INSTALL_TIMER;
99 
100  if(name.size() > SIGNAL_NAME_LEN)
101  ThrowError("name string is too long");
102 
103  strncpy(genericMasterBody.installTimer.name, name.c_str(),
104  SIGNAL_NAME_LEN);
105  genericMasterBody.installTimer.sigNo = sigNo;
106  genericMasterBody.installTimer.initSec = initSec;
107  genericMasterBody.installTimer.initNsec = initNsec;
108  genericMasterBody.installTimer.intervalSec = intervalSec;
109  genericMasterBody.installTimer.intervalNsec = intervalNsec;
110  genericMasterBody.installTimer.handler = handler;
111  }
112 
117  inline void packInstallTimerMsg(std::string name,
118  int sigNo,
119  unsigned long intervalSec,
120  unsigned long intervalNsec,
121  SIGNALTASK_HANDLER_FN(*handler))
122  {
124  gcp::util::GenericMasterTaskMsg::INSTALL_TIMER;
125 
126  if(name.size() > SIGNAL_NAME_LEN)
127  ThrowError("Name string is too long");
128 
129  strncpy(genericMasterBody.installTimer.name, name.c_str(),
130  SIGNAL_NAME_LEN);
131  genericMasterBody.installTimer.sigNo = sigNo;
132  genericMasterBody.installTimer.initSec = intervalSec;
133  genericMasterBody.installTimer.initNsec = intervalNsec;
134  genericMasterBody.installTimer.intervalSec = intervalSec;
135  genericMasterBody.installTimer.intervalNsec = intervalNsec;
136  genericMasterBody.installTimer.handler = handler;
137  }
138 
142  inline void packInstallSignalMsg(int sigNo,
143  SIGNALTASK_HANDLER_FN(*handler))
144  {
146  gcp::util::GenericMasterTaskMsg::INSTALL_SIGNAL;
147 
148  genericMasterBody.installSignal.sigNo = sigNo;
149  genericMasterBody.installSignal.handler = handler;
150  }
151 
155  inline void packEnableTimerMsg(std::string name,
156  bool enable)
157  {
159  gcp::util::GenericMasterTaskMsg::ENABLE_TIMER;
160 
161  if(name.size() > SIGNAL_NAME_LEN)
162  ThrowError("name std::string is too long");
163 
164  strncpy(genericMasterBody.enableTimer.name, name.c_str(),
165  SIGNAL_NAME_LEN);
166 
167  genericMasterBody.enableTimer.enable = enable;
168  }
169 
173  inline void packAddHandlerMsg(std::string name,
174  SIGNALTASK_HANDLER_FN(*handler),
175  bool add)
176  {
178  gcp::util::GenericMasterTaskMsg::ADD_HANDLER;
179 
180  if(name.size() > SIGNAL_NAME_LEN)
181  ThrowError("name std::string is too long");
182 
183  strncpy(genericMasterBody.addHandler.name, name.c_str(),
184  SIGNAL_NAME_LEN);
185 
186  genericMasterBody.addHandler.handler = handler;
187  genericMasterBody.addHandler.add = add;
188  }
189 
190  }; // End class GenericMasterTaskMsg
191 
192  } // End namespace util
193 } // End namespace gcp
194 
195 
196 #endif // End #ifndef
Definition: GenericTaskMsg.h:31
void packInstallSignalMsg(int sigNo, SIGNALTASK_HANDLER_FN(*handler))
Definition: GenericMasterTaskMsg.h:142
void packEnableTimerMsg(std::string name, bool enable)
Definition: GenericMasterTaskMsg.h:155
GenericMsgType
Definition: GenericTaskMsg.h:38
Definition: GenericMasterTaskMsg.h:36
void packInstallTimerMsg(std::string name, int sigNo, unsigned long intervalSec, unsigned long intervalNsec, SIGNALTASK_HANDLER_FN(*handler))
Definition: GenericMasterTaskMsg.h:117
GenericMasterMsgType
Definition: GenericMasterTaskMsg.h:43
GenericMsgType genericMsgType_
Definition: GenericTaskMsg.h:50
void packAddHandlerMsg(std::string name, SIGNALTASK_HANDLER_FN(*handler), bool add)
Definition: GenericMasterTaskMsg.h:173
void packInstallTimerMsg(std::string name, int sigNo, unsigned long initSec, unsigned long initNsec, unsigned long intervalSec, unsigned long intervalNsec, SIGNALTASK_HANDLER_FN(*handler))
Definition: GenericMasterTaskMsg.h:89
union gcp::util::GenericMasterTaskMsg::@219 genericMasterBody