![]() |
RTXI 1.3
|
00001 /* 00002 Copyright (C) 2011 Georgia Institute of Technology, University of Utah, Weill Cornell Medical College 00003 00004 This program is free software: you can redistribute it and/or modify 00005 it under the terms of the GNU General Public License as published by 00006 the Free Software Foundation, either version 3 of the License, or 00007 (at your option) any later version. 00008 00009 This program is distributed in the hope that it will be useful, 00010 but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 GNU General Public License for more details. 00013 00014 You should have received a copy of the GNU General Public License 00015 along with this program. If not, see <http://www.gnu.org/licenses/>. 00016 00017 */ 00018 00019 #ifndef EVENT_H 00020 #define EVENT_H 00021 00022 #include <fifo.h> 00023 #include <list> 00024 #include <map> 00025 #include <pthread.h> 00026 #include <rt.h> 00027 #include <string> 00028 00030 /* 00031 * Objects contained within this namespace are responsible 00032 * for dispatching signals. 00033 */ 00034 namespace Event { 00035 00042 extern const char *RT_PERIOD_EVENT; 00049 extern const char *RT_PREPERIOD_EVENT; 00056 extern const char *RT_POSTPERIOD_EVENT; 00057 00063 extern const char *RT_THREAD_INSERT_EVENT; 00069 extern const char *RT_THREAD_REMOVE_EVENT; 00075 extern const char *RT_DEVICE_INSERT_EVENT; 00081 extern const char *RT_DEVICE_REMOVE_EVENT; 00082 00083 extern const char *IO_BLOCK_INSERT_EVENT; 00084 extern const char *IO_BLOCK_REMOVE_EVENT; 00085 00086 extern const char *IO_LINK_INSERT_EVENT; 00087 extern const char *IO_LINK_REMOVE_EVENT; 00088 00089 extern const char *WORKSPACE_PARAMETER_CHANGE_EVENT; 00090 00096 extern const char *PLUGIN_INSERT_EVENT; 00103 extern const char *PLUGIN_REMOVE_EVENT; 00104 00108 extern const char *SETTINGS_OBJECT_INSERT_EVENT; 00112 extern const char *SETTINGS_OBJECT_REMOVE_EVENT; 00113 00114 extern const char *OPEN_FILE_EVENT; 00115 extern const char *START_RECORDING_EVENT; 00116 extern const char *STOP_RECORDING_EVENT; 00117 extern const char *ASYNC_DATA_EVENT; 00118 00119 extern const char *THRESHOLD_CROSSING_EVENT; 00120 00121 class Object { 00122 00123 public: 00124 00125 Object(const char *); 00126 ~Object(void); 00127 00128 const char *getName(void) const { return name; }; 00129 00130 void *getParam(const char *) const; 00131 void setParam(const char *,void *); 00132 00133 const static size_t MAX_PARAMS = 8; 00134 00135 private: 00136 00137 const char *name; 00138 size_t nparams; 00139 struct { const char *name; void *value; } params[MAX_PARAMS]; 00140 00141 }; // class Object 00142 00143 class Handler; 00144 class RTHandler; 00145 00146 /* 00147 * Managaes the collection of all objects waiting to 00148 * receive signals from events. 00149 */ 00150 class Manager { 00151 00152 friend class Handler; 00153 friend class RTHandler; 00154 00155 public: 00156 00164 static Manager *getInstance(void); 00165 00176 void postEvent(const Object *event); 00177 00188 void postEventRT(const Object *event); 00189 00190 private: 00191 00192 Manager(void); 00193 ~Manager(void); 00194 Manager(const Manager &) {}; 00195 Manager &operator=(const Manager &) { return *getInstance(); }; 00196 00197 static Manager *instance; 00198 00199 void registerHandler(Handler *); 00200 void unregisterHandler(Handler *); 00201 00202 void registerRTHandler(RTHandler *); 00203 void unregisterRTHandler(RTHandler *); 00204 00205 Mutex mutex; 00206 std::list<Handler *> handlerList; 00207 RT::List<RTHandler> rthandlerList; 00208 00209 }; // class Manager 00210 00216 class Handler { 00217 00218 public: 00219 00220 Handler(void); 00221 virtual ~Handler(void); 00222 00232 virtual void receiveEvent(const Object *event); 00233 00234 }; // class Handler 00235 00241 class RTHandler : public RT::List<RTHandler>::Node { 00242 00243 public: 00244 00245 RTHandler(void); 00246 virtual ~RTHandler(void); 00247 00257 virtual void receiveEventRT(const Object *event); 00258 00259 }; // class RTHandler 00260 00261 }; // namespace Event 00262 00263 #endif // EVENT_H