CARMA C++
GenericMasterTaskMsg.h
Go to the documentation of this file.
1 #ifndef GENERICMASTERTASKMSG_H
2 #define GENERICMASTERTASKMSG_H
3 
13 
14 #define SIGNALTASK_HANDLER_FN(fn) void (fn)(int sigNo, void* args)
15 #define SIGNAL_NAME_LEN 10
16 
17 namespace sza {
18  namespace util {
19 
35 
36  public:
37 
42  ADD_HANDLER = GenericTaskMsg::LAST+1, // Add a signal handler
43  ENABLE_TIMER, // Enable/Disable a timer
44  INSTALL_TIMER, // Install a timer
45  INSTALL_SIGNAL, // Install a signal
46  TASK_SPECIFIC // A task-specific message
47  };
48 
52  union {
53  struct {
54  char name[SIGNAL_NAME_LEN+1];
55  int sigNo;
56  unsigned long initSec;
57  unsigned long initNsec;
58  unsigned long intervalSec;
59  unsigned long intervalNsec;
60  SIGNALTASK_HANDLER_FN(*handler);
61  } installTimer;
62 
63  struct {
64  int sigNo;
65  SIGNALTASK_HANDLER_FN(*handler);
66  void* args;
67  } installSignal;
68 
69  struct {
70  char name[SIGNAL_NAME_LEN+1];
71  bool enable;
72  } enableTimer;
73 
74  struct {
75  char name[SIGNAL_NAME_LEN+1];
76  SIGNALTASK_HANDLER_FN(*handler);
77  void* args;
78  bool add;
79  } addHandler;
80 
82 
87  inline void packInstallTimerMsg(std::string name,
88  int sigNo,
89  unsigned long initSec,
90  unsigned long initNsec,
91  unsigned long intervalSec,
92  unsigned long intervalNsec,
93  SIGNALTASK_HANDLER_FN(*handler))
94  {
96  sza::util::GenericMasterTaskMsg::INSTALL_TIMER;
97 
98  if(name.size() > SIGNAL_NAME_LEN)
99  ThrowError("name string is too long");
100 
101  strncpy(genericMasterBody.installTimer.name, name.c_str(),
102  SIGNAL_NAME_LEN);
103  genericMasterBody.installTimer.sigNo = sigNo;
104  genericMasterBody.installTimer.initSec = initSec;
105  genericMasterBody.installTimer.initNsec = initNsec;
106  genericMasterBody.installTimer.intervalSec = intervalSec;
107  genericMasterBody.installTimer.intervalNsec = intervalNsec;
108  genericMasterBody.installTimer.handler = handler;
109  }
110 
115  inline void packInstallTimerMsg(std::string name,
116  int sigNo,
117  unsigned long intervalSec,
118  unsigned long intervalNsec,
119  SIGNALTASK_HANDLER_FN(*handler))
120  {
122  sza::util::GenericMasterTaskMsg::INSTALL_TIMER;
123 
124  if(name.size() > SIGNAL_NAME_LEN)
125  ThrowError("Name string is too long");
126 
127  strncpy(genericMasterBody.installTimer.name, name.c_str(),
128  SIGNAL_NAME_LEN);
129  genericMasterBody.installTimer.sigNo = sigNo;
130  genericMasterBody.installTimer.initSec = intervalSec;
131  genericMasterBody.installTimer.initNsec = intervalNsec;
132  genericMasterBody.installTimer.intervalSec = intervalSec;
133  genericMasterBody.installTimer.intervalNsec = intervalNsec;
134  genericMasterBody.installTimer.handler = handler;
135  }
136 
140  inline void packInstallSignalMsg(int sigNo,
141  SIGNALTASK_HANDLER_FN(*handler))
142  {
144  sza::util::GenericMasterTaskMsg::INSTALL_SIGNAL;
145 
146  genericMasterBody.installSignal.sigNo = sigNo;
147  genericMasterBody.installSignal.handler = handler;
148  }
149 
153  inline void packEnableTimerMsg(std::string name,
154  bool enable)
155  {
157  sza::util::GenericMasterTaskMsg::ENABLE_TIMER;
158 
159  if(name.size() > SIGNAL_NAME_LEN)
160  ThrowError("name std::string is too long");
161 
162  strncpy(genericMasterBody.enableTimer.name, name.c_str(),
163  SIGNAL_NAME_LEN);
164 
165  genericMasterBody.enableTimer.enable = enable;
166  }
167 
171  inline void packAddHandlerMsg(std::string name,
172  SIGNALTASK_HANDLER_FN(*handler),
173  bool add)
174  {
176  sza::util::GenericMasterTaskMsg::ADD_HANDLER;
177 
178  if(name.size() > SIGNAL_NAME_LEN)
179  ThrowError("name std::string is too long");
180 
181  strncpy(genericMasterBody.addHandler.name, name.c_str(),
182  SIGNAL_NAME_LEN);
183 
184  genericMasterBody.addHandler.handler = handler;
185  genericMasterBody.addHandler.add = add;
186  }
187 
188  }; // End class GenericMasterTaskMsg
189 
190  }; // End namespace util
191 }; // End namespace sza
192 
193 #endif // End #ifndef
void packInstallSignalMsg(int sigNo, void(*handler)(int sigNo, void *args))
Pack a message to install a signal.
GenericMsgType
Enumerate supported generic message types.
void packInstallTimerMsg(std::string name, int sigNo, unsigned long initSec, unsigned long initNsec, unsigned long intervalSec, unsigned long intervalNsec, void(*handler)(int sigNo, void *args))
Pack a message to install a timer.
void packInstallTimerMsg(std::string name, int sigNo, unsigned long intervalSec, unsigned long intervalNsec, void(*handler)(int sigNo, void *args))
Pack a message to install a timer.
void packEnableTimerMsg(std::string name, bool enable)
Pack a message to enable/disable a timer.
Tagged: Fri Nov 14 12:39:34 UTC 2003.
void packAddHandlerMsg(std::string name, void(*handler)(int sigNo, void *args), bool add)
Pack a message to enable/disable a timer.
GenericMsgType genericMsgType_
A type for this message.
A class to encapsulate message types for a generic task.
Started: Sun Dec 14 07:19:50 UTC 2003.
union sza::util::GenericMasterTaskMsg::@159 genericMasterBody
A message body.
A class to encapsulate message types for a generic task.
GenericMasterMsgType
Enumerate supported generic message types.