orca-robotics


INTRODUCTION
Overview
Download and Install
Quick Start
Documentation
Publications

REPOSITORY
Interfaces
Components
Libraries
Utilities
Software Map

DEVELOPER
Tutorials
Examples
Dev Guide
Dashboard
Wiki
login/pass: orca/orca

PEOPLE
Contributors
Users

SourceForge.net Logo
Project
Download
Mailing lists

 

         

autologgers.h

00001 #ifndef ORCALOGFACTORY_AUTOLOGGERS_H
00002 #define ORCALOGFACTORY_AUTOLOGGERS_H
00003 
00004 #include <orcalog/autologger.h>
00005 #include <orcalogfactory/logwriters.h>
00006 #include <orcaice/connectutils.h>
00007 #include <orcaice/icestormutils.h>
00008 #include <orcaice/timeutils.h>
00009 
00010 namespace orcalogfactory {
00011 
00012     //
00013     // A set of AutoLoggers: ie loggers which run continuously as soon as they're
00014     //                       initialised
00015     //
00016 
00018 
00023     template<class DataType,
00024              class ConsumerType,
00025              class ConsumerPrxType,
00026              class PrxType,
00027              class LogWriterType>
00028     class GenericAutoLogger : public ConsumerType, public orcalog::AutoLogger
00029     {
00030     public:
00031 
00032         virtual ~GenericAutoLogger() {}
00033 
00034         // Assumes the ConsumerType's method is called setData
00035         virtual void setData(const DataType& data, const Ice::Current&)
00036             { logWriter_->write(data,orcaice::getNow()); }
00037 
00038         // Inherited from orcalog::AutoLogger
00039         virtual void init( const orcalog::LogWriterInfo &logWriterInfo,
00040                            orcalog::MasterFileWriter    &masterFileWriter )
00041             {
00042                 logWriter_.reset( new LogWriterType );
00043                 logWriter_->checkFormat( logWriterInfo.format );
00044                 logWriter_->init( logWriterInfo, masterFileWriter );
00045             }
00046 
00047         virtual void startLogging()
00048             {
00049                 // may throw
00050                 PrxType objectPrx;
00051                 orcaice::connectToInterfaceWithTag<PrxType>( logWriter_->logWriterInfo().context,
00052                                                              objectPrx,
00053                                                              logWriter_->logWriterInfo().interfaceTag );
00054 
00055                 // Allow derived classes to do something special (like get description)
00056                 setup(objectPrx,*logWriter_);
00057     
00058                 Ice::ObjectPtr consumer = this;
00059                 ConsumerPrxType callbackPrx = 
00060                     orcaice::createConsumerInterface<ConsumerPrxType>( logWriter_->logWriterInfo().context,
00061                                                                        consumer );
00062 
00063                 objectPrx->subscribe( callbackPrx );
00064             }
00065 
00066     protected:
00067 
00068         // Called during initialisation
00069         virtual void setup( PrxType &objectPrx, LogWriterType &logWriter ) {}
00070 
00071     private:
00072 
00073         std::auto_ptr<LogWriterType> logWriter_;
00074     };
00075 
00077 
00078     typedef GenericAutoLogger<orca::CpuData,
00079                               orca::CpuConsumer,
00080                               orca::CpuConsumerPrx,
00081                               orca::CpuPrx,
00082                               CpuLogWriter> CpuAutoLogger;
00083 
00085 
00086     class DriveBicycleAutoLogger : public GenericAutoLogger<orca::DriveBicycleData,
00087                                                             orca::DriveBicycleConsumer,
00088                                                             orca::DriveBicycleConsumerPrx,
00089                                                             orca::DriveBicyclePrx,
00090                                                             DriveBicycleLogWriter>
00091     {
00092     private:
00093         void setup( orca::DriveBicyclePrx &objectPrx, DriveBicycleLogWriter &logWriter )
00094             {
00095                 logWriter.write( objectPrx->getDescription() );
00096             }
00097     };
00098 
00100 
00101     typedef GenericAutoLogger<orca::ImuData,
00102                               orca::ImuConsumer,
00103                               orca::ImuConsumerPrx,
00104                               orca::ImuPrx,
00105                               ImuLogWriter> ImuAutoLogger;
00106 
00108 
00109     class LaserScanner2dAutoLogger : public orca::RangeScanner2dConsumer, public orcalog::AutoLogger
00110     {
00111     public:
00112         virtual ~LaserScanner2dAutoLogger() {}
00113 
00114         virtual void setData(const orca::RangeScanner2dDataPtr& data, const Ice::Current&)
00115             { 
00116                 // special case: do not copy to other loggers!
00117                 // we assume that the data is really LaserScanner2dDataPtr but it has to be cast
00118                 // @todo: what if it's not the right type?
00119                 orca::LaserScanner2dDataPtr laserData = orca::LaserScanner2dDataPtr::dynamicCast( data );
00120                 logWriter_->write(laserData,orcaice::getNow());
00121             }
00122 
00123         virtual void init( const orcalog::LogWriterInfo &logWriterInfo, 
00124                            orcalog::MasterFileWriter    &masterFileWriter )
00125             {
00126                 logWriter_.reset( new LaserScanner2dLogWriter );
00127                 logWriter_->checkFormat( logWriterInfo.format );
00128                 logWriter_->init( logWriterInfo, masterFileWriter );
00129             }
00130 
00131         virtual void startLogging()
00132             {
00133                 orca::LaserScanner2dPrx objectPrx;
00134                 orcaice::connectToInterfaceWithTag( logWriter_->logWriterInfo().context,
00135                                                     objectPrx,
00136                                                     logWriter_->logWriterInfo().interfaceTag );
00137 
00138                 orca::RangeScanner2dDescription descr = objectPrx->getDescription();
00139                 logWriter_->write( descr );
00140     
00141                 Ice::ObjectPtr consumer = this;
00142                 orca::RangeScanner2dConsumerPrx callbackPrx = 
00143                     orcaice::createConsumerInterface<orca::RangeScanner2dConsumerPrx>( logWriter_->logWriterInfo().context,
00144                                                                                        consumer );
00145 
00146                 objectPrx->subscribe( callbackPrx );
00147             }
00148     private:
00149         std::auto_ptr<LaserScanner2dLogWriter> logWriter_;
00150     };
00151 
00153 
00154     class Localise2dAutoLogger : public GenericAutoLogger<orca::Localise2dData,
00155                                                           orca::Localise2dConsumer,
00156                                                           orca::Localise2dConsumerPrx,
00157                                                           orca::Localise2dPrx,
00158                                                           Localise2dLogWriter>
00159     {
00160     private:
00161         void setup( orca::Localise2dPrx &objectPrx, Localise2dLogWriter &logWriter )
00162             {
00163                 logWriter.write( objectPrx->getDescription() );
00164             }
00165     };
00166 
00168 
00169     class Localise3dAutoLogger : public GenericAutoLogger<orca::Localise3dData,
00170                                                             orca::Localise3dConsumer,
00171                                                             orca::Localise3dConsumerPrx,
00172                                                             orca::Localise3dPrx,
00173                                                             Localise3dLogWriter>
00174     {
00175     private:
00176         void setup( orca::Localise3dPrx &objectPrx, Localise3dLogWriter &logWriter )
00177             {
00178                 logWriter.write( objectPrx->getDescription() );
00179             }
00180     };
00181 
00183 
00184     class Odometry2dAutoLogger : public GenericAutoLogger<orca::Odometry2dData,
00185                                                             orca::Odometry2dConsumer,
00186                                                             orca::Odometry2dConsumerPrx,
00187                                                             orca::Odometry2dPrx,
00188                                                             Odometry2dLogWriter>
00189     {
00190     private:
00191         void setup( orca::Odometry2dPrx &objectPrx, Odometry2dLogWriter &logWriter )
00192             {
00193                 logWriter.write( objectPrx->getDescription() );
00194             }
00195     };
00196 
00198 
00199     class Odometry3dAutoLogger : public GenericAutoLogger<orca::Odometry3dData,
00200                                                             orca::Odometry3dConsumer,
00201                                                             orca::Odometry3dConsumerPrx,
00202                                                             orca::Odometry3dPrx,
00203                                                             Odometry3dLogWriter>
00204     {
00205     private:
00206         void setup( orca::Odometry3dPrx &objectPrx, Odometry3dLogWriter &logWriter )
00207             {
00208                 logWriter.write( objectPrx->getDescription() );
00209             }
00210     };
00211 
00213 
00214     typedef GenericAutoLogger<orca::PolarFeature2dData,
00215                               orca::PolarFeature2dConsumer,
00216                               orca::PolarFeature2dConsumerPrx,
00217                               orca::PolarFeature2dPrx,
00218                               PolarFeature2dLogWriter> PolarFeature2dAutoLogger;
00219 
00221     
00222     typedef GenericAutoLogger<orca::PowerData,
00223                               orca::PowerConsumer,
00224                               orca::PowerConsumerPrx,
00225                               orca::PowerPrx,
00226                               PowerLogWriter> PowerAutoLogger;
00227 
00229 
00230     typedef GenericAutoLogger<orca::WifiData,
00231                               orca::WifiConsumer,
00232                               orca::WifiConsumerPrx,
00233                               orca::WifiPrx,
00234                               WifiLogWriter> WifiAutoLogger;
00235 
00237 
00238     class GpsAutoLogger : public GenericAutoLogger<orca::GpsData,
00239                                                             orca::GpsConsumer,
00240                                                             orca::GpsConsumerPrx,
00241                                                             orca::GpsPrx,
00242                                                             GpsLogWriter>
00243     {
00244     private:
00245         void setup( orca::GpsPrx &objectPrx, GpsLogWriter &logWriter )
00246             {
00247                 logWriter.write( objectPrx->getDescription() );
00248             }
00249     };
00250 
00252 
00253     class ImageAutoLogger : public GenericAutoLogger<orca::ImageDataPtr,
00254                                                             orca::ImageConsumer,
00255                                                             orca::ImageConsumerPrx,
00256                                                             orca::ImagePrx,
00257                                                             ImageLogWriter>
00258     {
00259     private:
00260         void setup( orca::ImagePrx &objectPrx, ImageLogWriter &logWriter )
00261             {
00262                 logWriter.write( objectPrx->getDescription() );
00263             }
00264     };
00265 
00267 
00268     class CameraAutoLogger : public orca::ImageConsumer, public orcalog::AutoLogger
00269     {
00270     public:
00271         virtual ~CameraAutoLogger() {}
00272 
00273         virtual void setData(const orca::ImageDataPtr& data, const Ice::Current&)
00274             { 
00275                 // we assume that the data is really CameraDataPtr but it has to be cast
00276                 orca::ImageDataPtr cameraData = orca::ImageDataPtr::dynamicCast( data );
00277                 logWriter_->write(cameraData,orcaice::getNow());
00278             }
00279 
00280         virtual void init( const orcalog::LogWriterInfo &logWriterInfo, 
00281                            orcalog::MasterFileWriter    &masterFileWriter )
00282             {
00283                 logWriter_.reset( new CameraLogWriter );
00284                 logWriter_->checkFormat( logWriterInfo.format );
00285                 logWriter_->init( logWriterInfo, masterFileWriter );
00286             }
00287 
00288         virtual void startLogging()
00289             {
00290                 orca::CameraPrx objectPrx;
00291                 orcaice::connectToInterfaceWithTag( logWriter_->logWriterInfo().context,
00292                                                     objectPrx,
00293                                                     logWriter_->logWriterInfo().interfaceTag );
00294 
00295                 orca::CameraDescriptionPtr descr = orca::CameraDescriptionPtr::dynamicCast( objectPrx->getDescription());;
00296                 logWriter_->write( descr );
00297     
00298                 Ice::ObjectPtr consumer = this;
00299                 orca::ImageConsumerPrx callbackPrx = 
00300                     orcaice::createConsumerInterface<orca::ImageConsumerPrx>( logWriter_->logWriterInfo().context,consumer );
00301 
00302                 objectPrx->subscribe( callbackPrx );
00303             }
00304     private:
00305         std::auto_ptr<CameraLogWriter> logWriter_;
00306     };
00307 
00308 }
00309 
00310 #endif
 

Webmaster: Tobias Kaupp (tobasco at users.sourceforge.net)


Generated for Orca Robotics by  doxygen 1.4.5