Open Inventor Reference
SoSensorManager.h
Go to the documentation of this file.
1 /*
2  *
3  * Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved.
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * Further, this software is distributed without any warranty that it is
16  * free of the rightful claim of any third person regarding infringement
17  * or the like. Any license provided herein, whether implied or
18  * otherwise, applies only to this software file. Patent licenses, if
19  * any, provided herein do not apply to combinations of this program with
20  * other software, or any other product whatsoever.
21  *
22  * You should have received a copy of the GNU Lesser General Public
23  * License along with this library; if not, write to the Free Software
24  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25  *
26  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
27  * Mountain View, CA 94043, or:
28  *
29  * http://www.sgi.com
30  *
31  * For further information regarding this notice, see:
32  *
33  * http://oss.sgi.com/projects/GenInfo/NoticeExplan/
34  *
35  */
36 
37 
38 /*
39  * Copyright (C) 1990,91 Silicon Graphics, Inc.
40  *
41  _______________________________________________________________________
42  ______________ S I L I C O N G R A P H I C S I N C . ____________
43  |
44  | $Revision: 1.1.1.1 $
45  |
46  | Description:
47  | Manager for scheduling and triggering sensors. The manager
48  | maintains a queue of delay sensors (derived from SoDelayQueueSensor)
49  | and timer sensors (derived from SoTimerQueueSensor).
50  |
51  | Classes
52  | SoSensorManager
53  |
54  | Author(s) : Nick Thompson, Gavin Bell
55  |
56  ______________ S I L I C O N G R A P H I C S I N C . ____________
57  _______________________________________________________________________
58  */
59 
60 #ifndef _SO_SENSOR_MANAGER_
61 #define _SO_SENSOR_MANAGER_
62 
63 #include <Inventor/misc/SoBasic.h>
64 #include <Inventor/SbTime.h>
65 
66 class SoSensor;
67 class SoDelayQueueSensor;
68 class SoTimerQueueSensor;
69 class SoTimerSensor;
70 class SoAlarmSensor;
71 
73  public:
74 
78 
81  void setChangedCallback(void (*funcArg)(void *), void *data)
82  { changedFunc = funcArg; changedFuncData = data; }
83 
89 
94 
98  void setDelaySensorTimeout(const SbTime &t);
100 
105  void processDelayQueue(bool isIdle);
106 
109 
112 
115  { return (delayQueue != NULL); }
116 
121 
124  int doSelect(int nfds, fd_set *readfds, fd_set *writefds,
125  fd_set *exceptfds,
126  struct timeval *userTimeOut);
127  private:
128  SoSensor *delayQueue;
129  SoSensor *timerQueue;
130  SoSensor *rescheduleQueue;
131 
134  SbTime delayQTimeout;
135  SoAlarmSensor *delayQTimeoutSensor;
136  static void delayQTimeoutCB(void *, SoSensor *);
137 
143  int processingQueue;
144 
145  uint32_t delayQCount;
146 
148  void insert(SoSensor *s, SoSensor *&head);
149  void remove(SoSensor *s, SoSensor *&head);
150 
152  void (*changedFunc)(void *);
153  void *changedFuncData;
154 
156  void notifyChanged();
157 };
158 
159 #endif /* _SO_SENSOR_MANAGER_ */
#define SoINTERNAL
Definition: SbBasic.h:155
#define INVENTOR_API
Disable some annoying warnings on MSVC 6.
Definition: SbSystem.h:81
unsigned int uint32_t
Definition: SbTypeDefs.h:44
Class for representation of a time.
Definition: SbTime.h:89
Triggers a callback once sometime in the future.
Definition: SoAlarmSensor.h:80
Abstract base class for sensors not dependent on time.
void setDelaySensorTimeout(const SbTime &t)
Set/get delay queue sensors (OneShot, Node, Path, etc) timeout value.
void removeDelaySensor(SoDelayQueueSensor *s)
void removeRescheduledTimer(SoTimerQueueSensor *s)
bool isDelaySensorPending()
Returns TRUE if there is at least one sensor in the delay queue.
int doSelect(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *userTimeOut)
Just like UNIX select() call, but checks sensor queues while waiting for events.
bool isTimerSensorPending(SbTime &tm)
Returns TRUE if there is at least one sensor in the timer queue.
void processDelayQueue(bool isIdle)
Process all sensors in the delay queue.
void insertDelaySensor(SoDelayQueueSensor *s)
Insert/remove an delay or timer event into/from the appropriate queue.
void rescheduleTimer(SoTimerSensor *s)
Timers are all rescheduled at the same time, after they have been triggered.
void setChangedCallback(void(*funcArg)(void *), void *data)
Set up a function to call when either queue has a sensor added or removed.
void insertTimerSensor(SoTimerQueueSensor *s)
const SbTime & getDelaySensorTimeout()
void removeTimerSensor(SoTimerQueueSensor *s)
void processTimerQueue()
Process appropriate sensors in the timer queue based on current time.
void processImmediateQueue()
Process all immediate (priority 0) sensors in the delay queue.
SoSensorManager()
Constructor, destructor.
Abstract base class for Inventor sensors.
Definition: SoSensor.h:108
Abstract base class for sensors dependent on time.
Sensor that triggers callback repeatedly at regular intervals.