p_driver.h
Go to the documentation of this file.
1 #ifndef _STAGE_PLAYER_DRIVER_H
2 #define _STAGE_PLAYER_DRIVER_H
3 
4 #include <unistd.h>
5 #include <string.h>
6 #include <math.h>
7 
8 #include <libplayercore/playercore.h>
9 
10 #include "../libstage/stage.hh"
11 
12 #define DRIVER_ERROR(X) printf("Stage driver error: %s\n", X)
13 
14 // foward declare;
15 class Interface;
16 class StgTime;
17 
18 class StgDriver : public Driver {
19 public:
20  // Constructor; need that
21  StgDriver(ConfigFile *cf, int section);
22 
23  // Destructor
24  ~StgDriver(void);
25 
26  // Must implement the following methods.
27  virtual int Setup();
28  virtual int Shutdown();
29  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
30  virtual int Subscribe(QueuePointer &queue, player_devaddr_t addr);
31  virtual int Unsubscribe(QueuePointer &queue, player_devaddr_t addr);
32 
35  virtual void Update();
36 
38  static Stg::World *world;
40  static bool usegui;
41 
43  Interface *LookupInterface(player_devaddr_t addr);
44 
45  Stg::Model *LocateModel(char *basename, player_devaddr_t *addr, const std::string &type);
46 
47 protected:
49  std::vector<Interface *> ifaces;
50 };
51 
52 class Interface {
53 public:
54  Interface(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
55 
56  virtual ~Interface(void){ /* TODO: clean up*/ };
57 
58  player_devaddr_t addr;
59 
60  StgDriver *driver; // the driver instance that created this device
61 
62  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
63  {
64  return (-1);
65  } // empty implementation
66 
67  virtual void Publish(void){}; // do nothing
68  virtual void StageSubscribe(void){}; // do nothing
69  virtual void StageUnsubscribe(void){}; // do nothing
70 
71  virtual void Subscribe(QueuePointer &queue){}; // do nothing
72  virtual void Unsubscribe(QueuePointer &queue){}; // do nothing};
73 };
74 
76 public:
77  InterfaceSimulation(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
78  virtual ~InterfaceSimulation(void){ /* TODO: clean up*/ };
79  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data);
80 };
81 
82 // base class for all interfaces that are associated with a model
84 
85  : public Interface {
86 public:
87  InterfaceModel(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section,
88  const std::string &type);
89 
90  virtual ~InterfaceModel(void) { StageUnsubscribe(); };
91  virtual void StageSubscribe(void);
92  virtual void StageUnsubscribe(void);
93 
94 protected:
96 
97 private:
98  bool subscribed;
99 };
100 
102 public:
103  InterfacePosition(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
104  virtual ~InterfacePosition(void){ /* TODO: clean up*/ };
105  virtual void Publish(void);
106  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data);
107 };
108 
110 public:
111  InterfaceGripper(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
112  virtual ~InterfaceGripper(void){ /* TODO: clean up*/ };
113  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data);
114  virtual void Publish(void);
115 };
116 
118 public:
119  InterfaceWifi(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
120  virtual ~InterfaceWifi(void){ /* TODO: clean up*/ };
121  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data);
122  virtual void Publish(void);
123 };
124 
126 public:
127  InterfaceSpeech(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
128  virtual ~InterfaceSpeech(void){ /* TODO: clean up*/ };
129  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data);
130  virtual void Publish(void);
131 };
132 
134 private:
135  int scan_id;
136 
137 public:
138  InterfaceRanger(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
139  virtual ~InterfaceRanger(void){ /* TODO: clean up*/ };
140  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data);
141  virtual void Publish(void);
142 };
143 
144 /* class InterfaceAio : public InterfaceModel */
145 /* { */
146 /* public: */
147 /* InterfaceAio( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section ); */
148 /* virtual ~InterfaceAio( void ){ /\* TODO: clean up*\/ }; */
149 /* virtual int ProcessMessage(QueuePointer & resp_queue, */
150 /* player_msghdr_t* hdr, */
151 /* void* data); */
152 /* virtual void Publish( void ); */
153 /* }; */
154 
155 /* class InterfaceDio : public InterfaceModel */
156 /* { */
157 /* public: */
158 /* InterfaceDio(player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section); */
159 /* virtual ~InterfaceDio(); */
160 /* virtual int ProcessMessage(QueuePointer & resp_queue, player_msghdr_t* hdr, void* data); */
161 /* virtual void Publish(); */
162 /* }; */
163 
165 public:
166  InterfacePower(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
167  virtual ~InterfacePower(void){ /* TODO: clean up*/ };
168 
169  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
170 
171  virtual void Publish(void);
172 };
173 
175 public:
176  InterfaceFiducial(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
177  virtual ~InterfaceFiducial(void){ /* TODO: clean up*/ };
178 
179  virtual void Publish(void);
180  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data);
181 };
182 
184 public:
185  InterfaceActArray(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
186  virtual ~InterfaceActArray(void){ /* TODO: clean up*/ };
187 
188  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
189  virtual void Publish(void);
190 };
191 
193 public:
194  InterfaceBlobfinder(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
195  virtual ~InterfaceBlobfinder(void){ /* TODO: clean up*/ };
196 
197  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
198  virtual void Publish(void);
199 };
200 
202 public:
203  InterfaceCamera(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
204  virtual ~InterfaceCamera(void){ /* TODO: clean up*/ };
205 
206  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
207  virtual void Publish(void);
208 };
209 
210 class InterfacePtz : public InterfaceModel {
211 public:
212  InterfacePtz(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
213  virtual ~InterfacePtz(void){ /* TODO: clean up*/ };
214 
215  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
216  virtual void Publish(void);
217 };
218 
220 public:
221  InterfaceBumper(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
222  virtual ~InterfaceBumper(void){ /* TODO: clean up*/ };
223 
224  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
225  virtual void Publish(void);
226 };
227 
229 public:
230  InterfaceLocalize(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
231 
232  virtual ~InterfaceLocalize(void){ /* TODO: clean up*/ };
233 
234  virtual void Publish(void);
235  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data);
236 };
237 
238 class InterfaceMap : public InterfaceModel {
239 public:
240  InterfaceMap(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
241  virtual ~InterfaceMap(void){ /* TODO: clean up*/ };
242 
243  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
244 
245  // called by ProcessMessage to handle individual messages
246 
247  int HandleMsgReqInfo(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
248  int HandleMsgReqData(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
249 };
250 
251 class PlayerGraphics2dVis;
253 public:
254  InterfaceGraphics2d(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
255  virtual ~InterfaceGraphics2d(void);
256 
257  virtual void Subscribe(QueuePointer &queue);
258  virtual void Unsubscribe(QueuePointer &queue);
259 
260  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
261 
262  PlayerGraphics2dVis *vis;
263 };
264 
265 class PlayerGraphics3dVis;
267 public:
268  InterfaceGraphics3d(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section);
269  virtual ~InterfaceGraphics3d(void);
270 
271  virtual void Subscribe(QueuePointer &queue);
272  virtual void Unsubscribe(QueuePointer &queue);
273 
274  virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data);
275 
276  PlayerGraphics3dVis *vis;
277 };
278 
280 class StTime : public PlayerTime {
281 private:
282  StgDriver *driver;
283 
284 public:
285  // Constructor
286  explicit StTime(StgDriver *driver);
287 
288  // Destructor
289  virtual ~StTime();
290 
291  // Get the simulator time
292  int GetTime(struct timeval *time);
293  int GetTimeDouble(double *time);
294 };
295 
296 #endif
Definition: p_driver.h:183
virtual void Publish(void)
Definition: p_actarray.cc:99
virtual ~InterfaceActArray(void)
Definition: p_driver.h:186
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
Definition: p_actarray.cc:51
InterfaceActArray(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_actarray.cc:43
Definition: p_driver.h:192
virtual ~InterfaceBlobfinder(void)
Definition: p_driver.h:195
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
Definition: p_blobfinder.cc:110
InterfaceBlobfinder(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_blobfinder.cc:41
virtual void Publish(void)
Definition: p_blobfinder.cc:48
Definition: p_driver.h:219
InterfaceBumper(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_bumper.cc:45
virtual ~InterfaceBumper(void)
Definition: p_driver.h:222
virtual void Publish(void)
Definition: p_bumper.cc:51
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
Definition: p_bumper.cc:77
Definition: p_driver.h:201
virtual ~InterfaceCamera(void)
Definition: p_driver.h:204
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
Definition: p_camera.cc:89
virtual void Publish(void)
Definition: p_camera.cc:46
InterfaceCamera(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_camera.cc:40
Definition: p_driver.h:174
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
Definition: p_fiducial.cc:92
virtual ~InterfaceFiducial(void)
Definition: p_driver.h:177
virtual void Publish(void)
Definition: p_fiducial.cc:56
InterfaceFiducial(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_fiducial.cc:50
Definition: p_driver.h:252
virtual void Subscribe(QueuePointer &queue)
Definition: p_graphics.cc:207
InterfaceGraphics2d(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_graphics.cc:193
virtual void Unsubscribe(QueuePointer &queue)
Definition: p_graphics.cc:212
PlayerGraphics2dVis * vis
Definition: p_driver.h:262
virtual ~InterfaceGraphics2d(void)
Definition: p_graphics.cc:201
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
Definition: p_graphics.cc:217
Definition: p_driver.h:266
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
Definition: p_graphics.cc:321
PlayerGraphics3dVis * vis
Definition: p_driver.h:276
virtual void Subscribe(QueuePointer &queue)
Definition: p_graphics.cc:311
InterfaceGraphics3d(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_graphics.cc:297
virtual void Unsubscribe(QueuePointer &queue)
Definition: p_graphics.cc:316
virtual ~InterfaceGraphics3d(void)
Definition: p_graphics.cc:305
Definition: p_driver.h:109
InterfaceGripper(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_gripper.cc:43
virtual void Publish(void)
Definition: p_gripper.cc:50
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
Definition: p_gripper.cc:74
virtual ~InterfaceGripper(void)
Definition: p_driver.h:112
Definition: p_driver.h:228
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
virtual void Publish(void)
InterfaceLocalize(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
virtual ~InterfaceLocalize(void)
Definition: p_driver.h:232
Definition: p_driver.h:238
virtual ~InterfaceMap(void)
Definition: p_driver.h:241
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
int HandleMsgReqData(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
int HandleMsgReqInfo(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
InterfaceMap(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_driver.h:85
Stg::Model * mod
Definition: p_driver.h:95
virtual void StageSubscribe(void)
Definition: p_driver.cc:259
virtual void StageUnsubscribe(void)
Definition: p_driver.cc:267
virtual ~InterfaceModel(void)
Definition: p_driver.h:90
InterfaceModel(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section, const std::string &type)
Definition: p_driver.cc:227
Definition: p_driver.h:101
InterfacePosition(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_position.cc:48
virtual void Publish(void)
Definition: p_position.cc:203
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
Definition: p_position.cc:56
virtual ~InterfacePosition(void)
Definition: p_driver.h:104
Definition: p_driver.h:164
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
virtual void Publish(void)
InterfacePower(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
virtual ~InterfacePower(void)
Definition: p_driver.h:167
Definition: p_driver.h:210
virtual ~InterfacePtz(void)
Definition: p_driver.h:213
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
InterfacePtz(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
virtual void Publish(void)
Definition: p_driver.h:133
virtual ~InterfaceRanger(void)
Definition: p_driver.h:139
virtual void Publish(void)
Definition: p_ranger.cc:51
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
Definition: p_ranger.cc:102
InterfaceRanger(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_ranger.cc:44
Definition: p_driver.h:75
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
Definition: p_simulation.cc:78
InterfaceSimulation(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_simulation.cc:70
virtual ~InterfaceSimulation(void)
Definition: p_driver.h:78
Definition: p_driver.h:125
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
Definition: p_speech.cc:64
virtual ~InterfaceSpeech(void)
Definition: p_driver.h:128
InterfaceSpeech(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_speech.cc:37
virtual void Publish(void)
Definition: p_speech.cc:45
Definition: p_driver.h:117
InterfaceWifi(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
virtual ~InterfaceWifi(void)
Definition: p_driver.h:120
virtual void Publish(void)
Definition: p_driver.h:52
virtual void Publish(void)
Definition: p_driver.h:67
player_devaddr_t addr
Definition: p_driver.h:56
StgDriver * driver
Definition: p_driver.h:60
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr_t *hdr, void *data)
Definition: p_driver.h:62
virtual ~Interface(void)
Definition: p_driver.h:56
virtual void Subscribe(QueuePointer &queue)
Definition: p_driver.h:71
virtual void StageSubscribe(void)
Definition: p_driver.h:68
virtual void Unsubscribe(QueuePointer &queue)
Definition: p_driver.h:72
virtual void StageUnsubscribe(void)
Definition: p_driver.h:69
Interface(player_devaddr_t addr, StgDriver *driver, ConfigFile *cf, int section)
Definition: p_driver.cc:215
Definition: p_driver.h:280
virtual ~StTime()
Definition: stg_time.cc:43
int GetTimeDouble(double *time)
Definition: stg_time.cc:66
StTime(StgDriver *driver)
Definition: stg_time.cc:35
int GetTime(struct timeval *time)
Definition: stg_time.cc:49
Definition: p_driver.h:18
Interface * LookupInterface(player_devaddr_t addr)
find the device record with this Player id
Definition: p_driver.cc:510
StgDriver(ConfigFile *cf, int section)
Definition: p_driver.cc:282
Stg::Model * LocateModel(char *basename, player_devaddr_t *addr, const std::string &type)
Definition: p_driver.cc:473
virtual int Subscribe(QueuePointer &queue, player_devaddr_t addr)
Definition: p_driver.cc:524
static StgDriver * master_driver
Definition: p_driver.h:39
static Stg::World * world
all player devices share the same Stage world (for now)
Definition: p_driver.h:38
std::vector< Interface * > ifaces
an array of pointers to Interface objects, defined below
Definition: p_driver.h:49
~StgDriver(void)
Definition: p_driver.cc:557
static bool usegui
Definition: p_driver.h:40
virtual int Setup()
Definition: p_driver.cc:501
virtual int ProcessMessage(QueuePointer &resp_queue, player_msghdr *hdr, void *data)
Definition: p_driver.cc:579
virtual int Unsubscribe(QueuePointer &queue, player_devaddr_t addr)
Definition: p_driver.cc:542
virtual int Shutdown()
Definition: p_driver.cc:565
virtual void Update()
Definition: p_driver.cc:592
Model class
Definition: stage.hh:1651
World class
Definition: stage.hh:764