RTXI 1.3
include/event.h
Go to the documentation of this file.
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines