p_driver.h

Go to the documentation of this file.
00001 #ifndef _STAGE_PLAYER_DRIVER_H
00002 #define _STAGE_PLAYER_DRIVER_H
00003 
00004 #include <unistd.h>
00005 #include <string.h>
00006 #include <math.h>
00007 
00008 #include <libplayercore/playercore.h>
00009 
00010 #include "stage_internal.h"
00011 #include "stg_time.h"
00012 
00013 #define DRIVER_ERROR(X) printf( "Stage driver error: %s\n", X )
00014 
00015 // foward declare;
00016 class Interface;
00017 
00018 class StgDriver : public Driver
00019 {
00020  public:
00021   // Constructor; need that
00022   StgDriver(ConfigFile* cf, int section);
00023   
00024   // Destructor
00025   ~StgDriver(void);
00026   
00027   // Must implement the following methods.
00028   virtual int Setup();
00029   virtual int Shutdown();
00030   virtual int ProcessMessage(MessageQueue* resp_queue, 
00031                              player_msghdr * hdr, 
00032                              void * data);
00033   virtual int Subscribe(player_devaddr_t addr);
00034   virtual int Unsubscribe(player_devaddr_t addr);
00035     
00038   virtual void Update();
00039 
00041   static stg_world_t* world;
00042   
00044   Interface* LookupDevice( player_devaddr_t addr );
00045   
00046   stg_model_t* LocateModel( char* basename, 
00047                             player_devaddr_t* addr,
00048                             stg_model_initializer_t init );
00049   
00050  protected: 
00051   
00053   GPtrArray* devices;  
00054 };
00055 
00056 
00057 class Interface
00058 {
00059  public:
00060   Interface(player_devaddr_t addr,  
00061             StgDriver* driver,
00062             ConfigFile* cf, 
00063             int section );
00064   
00065   virtual ~Interface( void ){ /* TODO: clean up*/ };
00066 
00067   player_devaddr_t addr;
00068   stg_model_t* mod;
00069   double last_publish_time;
00070   
00071   StgDriver* driver; // the driver instance that created this device
00072   
00073   virtual int ProcessMessage(MessageQueue* resp_queue,
00074                              player_msghdr_t* hdr,
00075                              void* data) { return(-1); } // empty implementation
00076   virtual void Publish( void ){}; // empty implementation
00077 };
00078 
00079 
00080 class InterfaceSimulation : public Interface
00081 {
00082  public: 
00083   InterfaceSimulation( player_devaddr_t addr,  StgDriver* driver,ConfigFile* cf, int section );
00084   virtual ~InterfaceSimulation( void ){ /* TODO: clean up*/ };
00085   virtual int ProcessMessage(MessageQueue* resp_queue,
00086                              player_msghdr_t* hdr,
00087                              void* data);
00088 };
00089 
00090 
00091 class InterfaceModel : public Interface
00092 {
00093  public: 
00094   InterfaceModel( player_devaddr_t addr,  
00095                   StgDriver* driver,
00096                   ConfigFile* cf, 
00097                   int section, 
00098                   stg_model_initializer_t init );
00099   
00100   virtual ~InterfaceModel( void ){ /* TODO: clean up*/ };
00101 };
00102 
00103 class InterfacePosition : public InterfaceModel
00104 {
00105  public: 
00106   InterfacePosition( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00107   virtual ~InterfacePosition( void ){ /* TODO: clean up*/ };
00108   virtual void Publish( void );
00109   virtual int ProcessMessage(MessageQueue* resp_queue,
00110                              player_msghdr_t* hdr,
00111                              void* data);
00112 };
00113  
00114 class InterfaceGripper : public InterfaceModel
00115 {
00116  public: 
00117   InterfaceGripper( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00118   virtual ~InterfaceGripper( void ){ /* TODO: clean up*/ };
00119   virtual int ProcessMessage(MessageQueue* resp_queue,
00120                              player_msghdr_t* hdr,
00121                              void* data);
00122   virtual void Publish( void );
00123 };
00124 
00125 class InterfaceLaser : public InterfaceModel
00126 {
00127   private:
00128     int scan_id;
00129  public: 
00130   InterfaceLaser( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00131   virtual ~InterfaceLaser( void ){ /* TODO: clean up*/ };
00132   virtual int ProcessMessage(MessageQueue* resp_queue,
00133                               player_msghdr_t* hdr,
00134                               void* data);
00135   virtual void Publish( void );
00136 };
00137 
00138 class InterfacePower : public InterfaceModel
00139 {
00140  public: 
00141   InterfacePower( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00142   virtual ~InterfacePower( void ){ /* TODO: clean up*/ };
00143   
00144   virtual int ProcessMessage( MessageQueue* resp_queue, 
00145                               player_msghdr * hdr, 
00146                               void * data );
00147   
00148   virtual void Publish( void );
00149 };
00150 
00151 class InterfaceFiducial : public InterfaceModel
00152 {
00153  public: 
00154   InterfaceFiducial( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00155   virtual ~InterfaceFiducial( void ){ /* TODO: clean up*/ };
00156 
00157   virtual void Publish( void );
00158   virtual int ProcessMessage(MessageQueue* resp_queue,
00159                              player_msghdr_t* hdr,
00160                              void* data);
00161 };
00162 
00163  
00164 class InterfaceBlobfinder : public InterfaceModel
00165 {
00166  public: 
00167   InterfaceBlobfinder( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00168   virtual ~InterfaceBlobfinder( void ){ /* TODO: clean up*/ };
00169   
00170   virtual int ProcessMessage( MessageQueue* resp_queue, 
00171                               player_msghdr * hdr, 
00172                               void * data );
00173   virtual void Publish( void );
00174 };
00175 
00176 class InterfacePtz : public InterfaceModel
00177 {
00178  public: 
00179   InterfacePtz( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00180   virtual ~InterfacePtz( void ){ /* TODO: clean up*/ };
00181   
00182   virtual int ProcessMessage( MessageQueue* resp_queue, 
00183                               player_msghdr * hdr, 
00184                               void * data );
00185   virtual void Publish( void );
00186 };
00187 
00188 class InterfaceSonar : public InterfaceModel
00189 {
00190  public: 
00191   InterfaceSonar( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00192   virtual ~InterfaceSonar( void ){ /* TODO: clean up*/ };
00193   
00194   virtual int ProcessMessage( MessageQueue* resp_queue, 
00195                               player_msghdr * hdr, 
00196                               void * data );
00197   virtual void Publish( void );
00198 };
00199 
00200 class InterfaceLocalize : public InterfaceModel
00201 {
00202  public: 
00203   InterfaceLocalize( player_devaddr_t addr, 
00204                      StgDriver* driver, 
00205                      ConfigFile* cf, 
00206                      int section );
00207 
00208   virtual ~InterfaceLocalize( void ){ /* TODO: clean up*/ };
00209 
00210   virtual void Publish( void );
00211   virtual int ProcessMessage(MessageQueue* resp_queue,
00212                              player_msghdr_t* hdr,
00213                              void* data);
00214 };
00215 
00216 class InterfaceMap : public InterfaceModel
00217 {
00218  public: 
00219   InterfaceMap( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00220   virtual ~InterfaceMap( void ){ /* TODO: clean up*/ };
00221   
00222   virtual int ProcessMessage( MessageQueue* resp_queue, 
00223                               player_msghdr * hdr, 
00224                               void * data );
00225   //virtual void Publish( void );
00226   
00227   // called by ProcessMessage to handle individual messages
00228 
00229   int HandleMsgReqInfo( MessageQueue* resp_queue, 
00230                         player_msghdr * hdr, 
00231                         void * data );
00232   int HandleMsgReqData( MessageQueue* resp_queue, 
00233                         player_msghdr * hdr, 
00234                         void * data );
00235 };
00236 
00237 class InterfaceGraphics2d : public InterfaceModel
00238 {
00239  public: 
00240   InterfaceGraphics2d( player_devaddr_t addr, StgDriver* driver, ConfigFile* cf, int section );
00241   virtual ~InterfaceGraphics2d( void );
00242   
00243   virtual int ProcessMessage( MessageQueue* resp_queue, 
00244                               player_msghdr * hdr, 
00245                               void * data );
00246  private:
00247   stg_rtk_fig_t* fig; // a figure we can draw in
00248 };
00249 
00250 
00251 
00252 #endif

Generated on Mon Feb 27 23:30:51 2006 for Stage by  doxygen 1.4.4