prosilica.h
Go to the documentation of this file.
1 /*********************************************************************
2 * Software License Agreement (BSD License)
3 *
4 * Copyright (c) 2008, Willow Garage, Inc.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 *
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above
14 * copyright notice, this list of conditions and the following
15 * disclaimer in the documentation and/or other materials provided
16 * with the distribution.
17 * * Neither the name of the Willow Garage nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
20 *
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
24 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
25 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
26 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
27 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
28 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
29 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 *********************************************************************/
34 
35 #ifndef PROSILICA_H
36 #define PROSILICA_H
37 
38 #include <stdexcept>
39 #include <string>
40 #include <sstream>
41 #include <boost/function.hpp>
42 #include <boost/thread.hpp>
43 
44 // PvApi.h isn't aware of the usual detection macros
45 // these include support for i386, x86_64, and arm, on Linux and OSX
46 #define _LINUX
47 #define _x86
48 #include <prosilica_gige_sdk/PvApi.h>
49 #undef _LINUX
50 #undef _x86
51 
52 
53 template <class T>
54 inline std::string to_string (const T& t)
55 {
56  std::stringstream ss;
57  ss << t;
58  return ss.str();
59 }
60 
61 namespace prosilica {
62 
63 struct ProsilicaException : public std::runtime_error
64 {
65  tPvErr error_code;
66 
67  ProsilicaException(tPvErr code, const char* msg)
68  : std::runtime_error(msg), error_code(code)
69  {}
70 };
71 struct CameraInfo
72 {
73  std::string serial;
74  std::string name;
75  std::string guid;
76  std::string ip_address;
77  bool access;
78 };
79 
80 void init(); // initializes API
81 void fini(); // releases internal resources
82 size_t numCameras(); // number of cameras found
83 uint64_t getGuid(size_t i); // camera ids
84 std::vector<CameraInfo> listCameras(); // get list of cameras available
85 std::string getIPAddress(uint64_t guid); //get ip address data from guid
86 
90 {
97 };
98 
100 {
105 };
106 
108 {
112 };
113 
114 class Camera
115 {
116 public:
117  static const size_t DEFAULT_BUFFER_SIZE = 4;
118 
119  Camera(unsigned long guid, size_t bufferSize = DEFAULT_BUFFER_SIZE);
120  Camera(const char* ip_address, size_t bufferSize = DEFAULT_BUFFER_SIZE);
121 
122  ~Camera();
123 
125  void setFrameCallback(boost::function<void (tPvFrame*)> callback);
126  void setFrameRate(tPvFloat32 frame_rate);
127 
128  void setKillCallback(boost::function<void (unsigned long)> callback);
130  void start(FrameStartTriggerMode = Freerun, tPvFloat32 frame_rate = 30, AcquisitionMode = Continuous);
132  void stop();
134  void removeEvents();
137  tPvFrame* grab(unsigned long timeout_ms = PVINFINITE);
138 
139  void setExposure(unsigned int val, AutoSetting isauto = Manual);
140  void setGain(unsigned int val, AutoSetting isauto = Manual);
141  void setWhiteBalance(unsigned int blue, unsigned int red,
142  AutoSetting isauto = Manual);
143 
144  void setRoi(unsigned int x, unsigned int y,
145  unsigned int width, unsigned int height);
146  void setRoiToWholeFrame();
147  void setBinning(unsigned int binning_x = 1, unsigned int binning_y = 1);
148 
150  bool hasAttribute(const std::string &name);
151 
153  void getAttributeEnum(const std::string &name, std::string &value);
154  void getAttribute(const std::string &name, tPvUint32 &value);
155  void getAttribute(const std::string &name, tPvFloat32 &value);
156  void getAttribute(const std::string &name, std::string &value);
157 
158  void setAttributeEnum(const std::string &name, const std::string &value);
159  void setAttribute(const std::string &name, tPvUint32 value);
160  void setAttribute(const std::string &name, tPvFloat32 value);
161  void setAttribute(const std::string &name, const std::string &value);
162 
163  void runCommand(const std::string& name);
164 
165  unsigned long guid();
166 
167  unsigned long getMaxDataRate();
168  static const unsigned long GIGE_MAX_DATA_RATE = 115000000;
169 
171  static const size_t USER_MEMORY_SIZE = 512;
172  void writeUserMemory(const char* data, size_t size);
173  void readUserMemory(char* data, size_t size);
174 
176  tPvHandle handle();
177 
178 private:
179  tPvHandle handle_; // handle to open camera
180  tPvFrame* frames_; // array of frame buffers
181  tPvUint32 frameSize_; // bytes per frame
182  size_t bufferSize_; // number of frame buffers
185  boost::function<void (tPvFrame*)> userCallback_;
186  boost::function<void (unsigned long UniqueId)> killCallback_;
187  boost::mutex frameMutex_;
188  boost::mutex aliveMutex_;
189  size_t bufferIndex_;
190 
191  void setup();
192 
193  static void frameDone(tPvFrame* frame);
194  static void kill(void* Context,
195  tPvInterface Interface,
196  tPvLinkEvent Event,
197  unsigned long UniqueId);
198 };
199 
200 } // namespace prosilica
201 
202 #endif
203 
prosilica::Camera::DEFAULT_BUFFER_SIZE
static const size_t DEFAULT_BUFFER_SIZE
Definition: prosilica.h:117
prosilica::Camera::frameMutex_
boost::mutex frameMutex_
Definition: prosilica.h:187
prosilica::Camera::~Camera
~Camera()
Definition: prosilica.cpp:231
prosilica::Camera::setFrameRate
void setFrameRate(tPvFloat32 frame_rate)
Definition: prosilica.cpp:250
prosilica::Camera::setFrameCallback
void setFrameCallback(boost::function< void(tPvFrame *)> callback)
Must be used before calling start() in a non-triggered mode.
Definition: prosilica.cpp:246
msg
msg
prosilica::Camera::kill
static void kill(void *Context, tPvInterface Interface, tPvLinkEvent Event, unsigned long UniqueId)
Definition: prosilica.cpp:581
prosilica::Camera
Definition: prosilica.h:114
prosilica::Camera::getMaxDataRate
unsigned long getMaxDataRate()
Definition: prosilica.cpp:528
prosilica::CameraInfo::name
std::string name
Definition: prosilica.h:74
prosilica::Camera::writeUserMemory
void writeUserMemory(const char *data, size_t size)
Definition: prosilica.cpp:538
prosilica::Camera::setBinning
void setBinning(unsigned int binning_x=1, unsigned int binning_y=1)
Definition: prosilica.cpp:425
prosilica::SingleFrame
@ SingleFrame
Definition: prosilica.h:102
prosilica::getGuid
uint64_t getGuid(size_t i)
Definition: prosilica.cpp:104
prosilica::FrameStartTriggerMode
FrameStartTriggerMode
Definition: prosilica.h:89
prosilica::Camera::handle
tPvHandle handle()
Get raw PvApi camera handle.
Definition: prosilica.cpp:594
prosilica::Camera::getAttributeEnum
void getAttributeEnum(const std::string &name, std::string &value)
General get/set attribute functions.
Definition: prosilica.cpp:459
prosilica::None
@ None
Definition: prosilica.h:96
prosilica::ProsilicaException::error_code
tPvErr error_code
Definition: prosilica.h:65
prosilica::Manual
@ Manual
Definition: prosilica.h:109
prosilica::SyncIn2
@ SyncIn2
Definition: prosilica.h:93
prosilica::getIPAddress
std::string getIPAddress(uint64_t guid)
Definition: prosilica.cpp:148
prosilica::Camera::userCallback_
boost::function< void(tPvFrame *)> userCallback_
Definition: prosilica.h:185
prosilica::Camera::stop
void stop()
Stop capture.
Definition: prosilica.cpp:302
prosilica::Camera::removeEvents
void removeEvents()
remove callback
Definition: prosilica.cpp:313
prosilica::Camera::runCommand
void runCommand(const std::string &name)
Definition: prosilica.cpp:514
prosilica::Camera::setGain
void setGain(unsigned int val, AutoSetting isauto=Manual)
Definition: prosilica.cpp:357
prosilica::Camera::setRoi
void setRoi(unsigned int x, unsigned int y, unsigned int width, unsigned int height)
Definition: prosilica.cpp:395
prosilica::Camera::setWhiteBalance
void setWhiteBalance(unsigned int blue, unsigned int red, AutoSetting isauto=Manual)
Definition: prosilica.cpp:372
prosilica::Camera::handle_
tPvHandle handle_
Definition: prosilica.h:179
prosilica::Camera::setAttributeEnum
void setAttributeEnum(const std::string &name, const std::string &value)
Definition: prosilica.cpp:486
prosilica::AutoOnce
@ AutoOnce
Definition: prosilica.h:111
prosilica::Camera::frames_
tPvFrame * frames_
Definition: prosilica.h:180
prosilica::FixedRate
@ FixedRate
Definition: prosilica.h:94
prosilica::Camera::hasAttribute
bool hasAttribute(const std::string &name)
Returns true if camera supports the attribute.
Definition: prosilica.cpp:437
prosilica::Software
@ Software
Definition: prosilica.h:95
prosilica::Camera::aliveMutex_
boost::mutex aliveMutex_
Definition: prosilica.h:188
prosilica::Camera::frameSize_
tPvUint32 frameSize_
Definition: prosilica.h:181
prosilica::Camera::start
void start(FrameStartTriggerMode=Freerun, tPvFloat32 frame_rate=30, AcquisitionMode=Continuous)
Start capture.
Definition: prosilica.cpp:260
prosilica::Camera::setup
void setup()
Definition: prosilica.cpp:195
prosilica::CameraInfo::access
bool access
Definition: prosilica.h:77
prosilica::numCameras
size_t numCameras()
Definition: prosilica.cpp:98
prosilica::CameraInfo::serial
std::string serial
Definition: prosilica.h:73
prosilica::Camera::FSTmode_
FrameStartTriggerMode FSTmode_
Definition: prosilica.h:183
prosilica::Camera::readUserMemory
void readUserMemory(char *data, size_t size)
Definition: prosilica.cpp:550
prosilica::ProsilicaException
Definition: prosilica.h:63
prosilica::AcquisitionMode
AcquisitionMode
Definition: prosilica.h:99
prosilica::Camera::setRoiToWholeFrame
void setRoiToWholeFrame()
Definition: prosilica.cpp:408
prosilica::CameraInfo::ip_address
std::string ip_address
Definition: prosilica.h:76
to_string
std::string to_string(const T &t)
Definition: prosilica.h:54
prosilica::CameraInfo
Definition: prosilica.h:71
prosilica::Auto
@ Auto
Definition: prosilica.h:110
prosilica::fini
void fini()
Definition: prosilica.cpp:93
prosilica::Camera::setExposure
void setExposure(unsigned int val, AutoSetting isauto=Manual)
Definition: prosilica.cpp:347
prosilica::Recorder
@ Recorder
Definition: prosilica.h:104
prosilica::AutoSetting
AutoSetting
Definition: prosilica.h:107
prosilica::ProsilicaException::ProsilicaException
ProsilicaException(tPvErr code, const char *msg)
Definition: prosilica.h:67
std
prosilica::SyncIn1
@ SyncIn1
Definition: prosilica.h:92
prosilica::Camera::USER_MEMORY_SIZE
static const size_t USER_MEMORY_SIZE
Data must have size <= USER_MEMORY_SIZE bytes.
Definition: prosilica.h:171
prosilica
Definition: prosilica.h:61
prosilica::init
void init()
Definition: prosilica.cpp:88
prosilica::Camera::GIGE_MAX_DATA_RATE
static const unsigned long GIGE_MAX_DATA_RATE
Definition: prosilica.h:168
prosilica::Camera::setKillCallback
void setKillCallback(boost::function< void(unsigned long)> callback)
Definition: prosilica.cpp:255
prosilica::Camera::killCallback_
boost::function< void(unsigned long UniqueId)> killCallback_
Definition: prosilica.h:186
prosilica::Camera::frameDone
static void frameDone(tPvFrame *frame)
Definition: prosilica.cpp:562
prosilica::Camera::Camera
Camera(unsigned long guid, size_t bufferSize=DEFAULT_BUFFER_SIZE)
Definition: prosilica.cpp:175
prosilica::MultiFrame
@ MultiFrame
Definition: prosilica.h:103
prosilica::listCameras
std::vector< CameraInfo > listCameras()
Definition: prosilica.cpp:112
prosilica::Camera::bufferSize_
size_t bufferSize_
Definition: prosilica.h:182
prosilica::Camera::getAttribute
void getAttribute(const std::string &name, tPvUint32 &value)
Definition: prosilica.cpp:465
prosilica::Camera::guid
unsigned long guid()
Definition: prosilica.cpp:520
prosilica::Camera::Amode_
AcquisitionMode Amode_
Definition: prosilica.h:184
prosilica::Camera::grab
tPvFrame * grab(unsigned long timeout_ms=PVINFINITE)
Definition: prosilica.cpp:319
prosilica::Freerun
@ Freerun
Definition: prosilica.h:91
prosilica::Continuous
@ Continuous
Definition: prosilica.h:101
prosilica::Camera::setAttribute
void setAttribute(const std::string &name, tPvUint32 value)
Definition: prosilica.cpp:493
prosilica::CameraInfo::guid
std::string guid
Definition: prosilica.h:75
prosilica::Camera::bufferIndex_
size_t bufferIndex_
Definition: prosilica.h:189


prosilica_camera
Author(s): Maintained by William Woodall - wwoodall@willowgarage.com, Contributions by Allison Thackston - allison.thackston@nasa.gov
autogenerated on Wed Mar 2 2022 00:45:45