Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages | Examples

ArCameraCollection.h

00001 /*
00002 MobileRobots Advanced Robotics Interface for Applications (ARIA)
00003 Copyright (C) 2004, 2005 ActivMedia Robotics LLC
00004 Copyright (C) 2006, 2007 MobileRobots Inc.
00005 
00006      This program is free software; you can redistribute it and/or modify
00007      it under the terms of the GNU General Public License as published by
00008      the Free Software Foundation; either version 2 of the License, or
00009      (at your option) any later version.
00010 
00011      This program is distributed in the hope that it will be useful,
00012      but WITHOUT ANY WARRANTY; without even the implied warranty of
00013      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014      GNU General Public License for more details.
00015 
00016      You should have received a copy of the GNU General Public License
00017      along with this program; if not, write to the Free Software
00018      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00019 
00020 If you wish to redistribute ARIA under different terms, contact 
00021 MobileRobots for information about a commercial version of ARIA at 
00022 robots@mobilerobots.com or 
00023 MobileRobots Inc, 19 Columbia Drive, Amherst, NH 03031; 800-639-9481
00024 */
00025 
00026 #ifndef ARCAMERACOLLECTION_H
00027 #define ARCAMERACOLLECTION_H
00028 
00029 #include <list>
00030 #include <map>
00031 #include <string>
00032 
00033 #include "ArConfigArg.h"
00034 #include "ArFunctor.h"
00035 #include "ArMutex.h"
00036 
00037 class ArCameraCollectionItem;
00038 class ArCameraParameterSource;
00039 
00041 
00078 class ArCameraCollection
00079 {
00080 public:
00081     
00083   AREXPORT ArCameraCollection();
00084 
00086     AREXPORT virtual ~ArCameraCollection();
00087     
00088   // ---------------------------------------------------------------------------
00089 
00091 
00102   AREXPORT virtual bool addCamera(const char *cameraName,
00103                                   const char *cameraType,
00104                                   const char *displayName,
00105                                   const char *displayType);
00106 
00108 
00113   AREXPORT virtual bool removeCamera(const char *cameraName);
00114 
00116 
00133   AREXPORT virtual bool addCameraCommand(const char *cameraName,
00134                                          const char *command,
00135                                          const char *cameraCommandName,
00136                                          int requestInterval = -1);
00137 
00138 
00140 
00148   AREXPORT virtual bool removeCameraCommand(const char *cameraName,
00149                                             const char *command);
00150 
00151 
00153 
00165   AREXPORT virtual bool addParameter(const char *cameraName,
00166                                      ArCameraParameterSource *source,
00167                                      const ArConfigArg &param);
00168 
00169 
00171 
00178   AREXPORT virtual bool removeParameter(const char *cameraName,
00179                                         const char *paramName);
00180 
00181   // ---------------------------------------------------------------------------
00182 
00184 
00188   AREXPORT virtual void getCameraNames(std::list<std::string> &outList);
00189 
00190 
00192 
00197   AREXPORT virtual const char *getCameraType(const char *cameraName);
00198 
00200 
00205   AREXPORT virtual const char *getDisplayName(const char *cameraName);
00206 
00208 
00213   AREXPORT virtual const char *getDisplayType(const char *cameraName);
00214 
00215  // ---------------------------------------------------------------------------
00216 
00218 
00223   AREXPORT virtual void getCameraCommands(const char *cameraName,
00224                                           std::list<std::string> &outList);
00225 
00227 
00234   AREXPORT virtual const char *getCommandName(const char *cameraName,
00235                                               const char *command);
00236 
00238 
00244   AREXPORT virtual int getRequestInterval(const char *cameraName,
00245                                           const char *command);
00246 
00247   // ---------------------------------------------------------------------------
00248 
00250 
00255   AREXPORT virtual void getParameterNames(const char *cameraName,
00256                                           std::list<std::string> &outList);
00257 
00259 
00265   AREXPORT virtual bool getParameter(const char *cameraName,
00266                                      const char *parameterName,
00267                                      ArConfigArg &paramOut);
00268   
00270 
00276   AREXPORT virtual bool setParameter(const char *cameraName,
00277                                      const ArConfigArg &param);
00278  
00279   // ---------------------------------------------------------------------------
00280 
00282   AREXPORT virtual bool exists(const char *cameraName);
00283 
00285   AREXPORT virtual bool exists(const char *cameraName,
00286                                const char *command);
00287 
00289   AREXPORT virtual bool parameterExists(const char *cameraName,
00290                         const char *paramName);
00291 
00292   // ---------------------------------------------------------------------------
00293 
00295 
00302   AREXPORT virtual bool addModifiedCB(ArFunctor *functor,
00303                                       ArListPos::Pos position = ArListPos::LAST);
00304 
00306 
00310   AREXPORT virtual bool removeModifiedCB(ArFunctor *functor);
00311 
00312 
00314 
00320   AREXPORT virtual void startUpdate();
00321 
00323 
00326   AREXPORT virtual void endUpdate();
00327 
00328 
00329   // ---------------------------------------------------------------------------
00330 
00332   AREXPORT int lock() {
00333     return (myMutex.lock()); 
00334   }
00335 
00337   AREXPORT int tryLock() {
00338     return(myMutex.tryLock());
00339   }
00340 
00342   AREXPORT int unlock() {
00343     return(myMutex.unlock());
00344   }
00345 
00346 
00347 // -----------------------------------------------------------------------------
00348 protected:
00349 
00351   struct CommandInfo {
00352 
00354     std::string myCommand;
00356     std::string myCameraCommandName;
00358     int myRequestInterval;
00359 
00361     CommandInfo();
00363     ~CommandInfo();
00364 
00365   }; // end struct CommandInfo
00366 
00367 
00369   struct ParamInfo {
00370 
00372     ArCameraParameterSource *mySource;
00374     ArConfigArg myParam;
00375   
00377     ParamInfo();
00379     ~ParamInfo();
00380 
00381   }; // end struct ParamInfo
00382 
00383 
00385   struct CameraInfo {
00386 
00388     std::string myCameraName;
00390     std::string myCameraType;
00392     std::string myDisplayName;
00394     std::string myDisplayType;
00396     std::map<std::string, CommandInfo*> myCommandToInfoMap;
00398     std::map<std::string, ParamInfo*> myParamToInfoMap;
00399 
00401     CameraInfo();
00403     ~CameraInfo();
00404 
00405   }; // end struct CameraInfo
00406 
00407 
00409   CameraInfo *findCameraInfo(const char *cameraName);
00410 
00412   CommandInfo *findCommandInfo(const char *cameraName,
00413                                const char *commandName);
00414 
00416   ParamInfo *findParamInfo(const char *cameraName,
00417                            const char *paramName);
00418 
00420   void setModified();
00421 
00423   void notifyModifiedListeners();
00424 
00425 private:
00427   ArCameraCollection(const ArCameraCollection &);
00429     ArCameraCollection &operator=(const ArCameraCollection &);
00430 
00431 protected:
00432 
00434   ArMutex myMutex;
00436   std::map<std::string, CameraInfo*> myCameraToInfoMap;
00438   bool myIsUpdatesEnabled;
00440   bool myIsModified;
00442   std::list<ArFunctor *> myModifiedCBList;
00443 
00444 }; // end class ArCameraCollection
00445 
00446 // -----------------------------------------------------------------------------
00447 
00449 
00457 class ArCameraCollectionItem 
00458 {
00459 public:
00460 
00462   AREXPORT ArCameraCollectionItem() {};
00464   AREXPORT virtual ~ArCameraCollectionItem() {};
00465 
00467   AREXPORT virtual const char *getCameraName() = 0;
00468 
00470   AREXPORT virtual void addToCameraCollection(ArCameraCollection &collection) = 0;
00471 
00472 }; // end class ArCameraCollectionItem
00473 
00474 // -----------------------------------------------------------------------------
00475 
00477 
00485 class ArCameraParameterSource : public ArCameraCollectionItem
00486 {
00487 public:
00488 
00490   AREXPORT ArCameraParameterSource() {};
00492   AREXPORT ~ArCameraParameterSource() {};
00493 
00495   AREXPORT virtual bool getParameter(const char *paramName,
00496                                      ArConfigArg &paramOut) = 0;
00497 
00499   AREXPORT virtual bool setParameter(const ArConfigArg &param) = 0;
00500 
00501 }; // end class ArCameraParameterSource
00502 
00503 
00504 #endif // ARCAMERACOLLECTION_H

Generated on Tue Feb 20 10:51:39 2007 for Aria by  doxygen 1.4.0