00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
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 ¶m);
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 ¶mOut);
00268
00270
00276 AREXPORT virtual bool setParameter(const char *cameraName,
00277 const ArConfigArg ¶m);
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 };
00366
00367
00369 struct ParamInfo {
00370
00372 ArCameraParameterSource *mySource;
00374 ArConfigArg myParam;
00375
00377 ParamInfo();
00379 ~ParamInfo();
00380
00381 };
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 };
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 };
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 };
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 ¶mOut) = 0;
00497
00499 AREXPORT virtual bool setParameter(const ArConfigArg ¶m) = 0;
00500
00501 };
00502
00503
00504 #endif // ARCAMERACOLLECTION_H