PVCAM 2.7 User Manual

User Manual:

Open the PDF directly: View PDF PDF.
Page Count: 168

DownloadPVCAM 2.7 User Manual
Open PDF In BrowserView PDF
4411-0094
Version 2.7.0
December 28, 2004

4411-0094

© Copyright 2003-2004 Princeton Instruments
a division of Roper Scientific, Inc.
3660 Quakerbridge Rd.
Trenton, NJ 08619
TEL: 800-874-9789 / 609-587-9797
FAX: 609-587-1970
All rights reserved. No part of this publication may be reproduced by any means without the written
permission of Princeton Instruments, a division of Roper Scientific, Inc. ("Princeton Instruments").
Printed in the United States of America.
Macintosh is a registered trademark of Apple Computer, Inc.
Roper Scientific and PVCAM are registered trademarks of Roper Scientific, Inc.
UNIX was a registered trademark of UNIX System Laboratories, Inc. and now is registered to the X/Open
Consortium.
Windows is a registered trademark of Microsoft Corporation.
The information in this publication is believed to be accurate as of the publication release date. However,
Roper Scientific, Inc. does not assume any responsibility for any consequences including any damages
resulting from the use thereof. The information contained herein is subject to change without notice.
Revision of this publication may be issued to incorporate such change.

Table of Contents
Chapter 1: SDK

1

What is the SDK? ............................................................................................................................ 1
Contact Information ......................................................................................................................... 1

Chapter 2: PVCAM, A High-Level C Library

3

Introduction...................................................................................................................................... 3
System Overview ............................................................................................................................. 3
Hardware Support ............................................................................................................................ 3
Library Classes ................................................................................................................................ 4
Documentation Style........................................................................................................................ 4
Defined Types.................................................................................................................................. 5
Naming Conventions ....................................................................................................................... 6
Include Files..................................................................................................................................... 6
Parameter Passing and const............................................................................................................ 7
CCD Coordinates Model.................................................................................................................. 7
Regions and Images................................................................................................................... 7
Binning Factors ......................................................................................................................... 8
Data Array ................................................................................................................................. 8
Display Orientation ................................................................................................................... 8
Port and Speed Choices ................................................................................................................... 8
Frame Transfer............................................................................................................................... 10
Interline.......................................................................................................................................... 10
Kinetics .......................................................................................................................................... 10
Custom Chip .................................................................................................................................. 11
Custom Timing .............................................................................................................................. 11
Image Smear .................................................................................................................................. 11
Sequences....................................................................................................................................... 12
Sequence Parameters IDs/Constants.............................................................................................. 13
Circular Buffer ............................................................................................................................... 13
Clear Modes ................................................................................................................................... 15
Exposure Modes ............................................................................................................................ 16
Exposure: TIMED_MODE ..................................................................................................... 16
Exposure: VARIABLE_TIMED_MODE ............................................................................... 16
Exposure: TRIGGER_FIRST_MODE.................................................................................... 17
Exposure: STROBED_MODE................................................................................................ 17
Exposure: BULB_MODE ....................................................................................................... 18
Exposure: FLASH_MODE ..................................................................................................... 18
Open Delay, Close Delay............................................................................................................... 19
Shutter Control............................................................................................................................... 20

iii

iv

PVCAM Manual

Version 2.7

Exposure Loops ............................................................................................................................. 20
Image Buffers ................................................................................................................................ 24
Source Code Examples .................................................................................................................. 25

Chapter 3: Camera Communications (Class 0)

27

Introduction.................................................................................................................................... 27
List of Available Class 0 Functions ............................................................................................... 27
List of Available Class 0 Parameter IDs........................................................................................ 27
Class 0 Functions ........................................................................................................................... 28
Class 0 Parameter IDs.................................................................................................................... 38

Chapter 4: Error Reporting (Class 1)

41

Introduction.................................................................................................................................... 41
Error Codes .................................................................................................................................... 42
List of Available Class 1 Functions ............................................................................................... 42
Class 1 Functions ........................................................................................................................... 43

Chapter 5: Configuration / Setup (Class 2)

45

Introduction.................................................................................................................................... 45
List of Available Class 2 Functions ............................................................................................... 46
List of Available Class 2 Parameter IDs........................................................................................ 46
Class 2 Functions ........................................................................................................................... 48
Class 2 Parameter IDs.................................................................................................................... 53

Chapter 6: Data Acquisition (Class 3)

67

Introduction.................................................................................................................................... 67
List of Available Class 3 Functions ............................................................................................... 67
List of Available Class 3 Parameter IDs........................................................................................ 67
Defining Exposures........................................................................................................................ 68
New Structures............................................................................................................................... 68
Exposure Mode Constants ............................................................................................................. 69
Class 3 Functions ........................................................................................................................... 70
Class 3 Parameter IDs.................................................................................................................... 90

Chapter 7: Buffer Manipulation (Class 4)

93

Introduction.................................................................................................................................... 93
List of Available Class 4 Functions ............................................................................................... 93
New Constants ............................................................................................................................... 94
Image Handles and Pointers........................................................................................................... 94
Class 4 Functions ........................................................................................................................... 95

Chapter 8: Code Examples

111

Example 1: pl_get_param & pl_get_enum_param ...................................................................... 111
Example 2: pl_set_param............................................................................................................. 115
Example 3: Circular Buffer.......................................................................................................... 117

Table of Contents

v

Latest Frame Mode (FOCUS) ............................................................................................... 117
Oldest Frame Mode (NFRAME)........................................................................................... 119
Example 4: Standard Mode Acquisition ...................................................................................... 121

Appendix A: Error Codes

123

Appendix B: Obsolete Functions

133

Obsolete Class 0 Functions.......................................................................................................... 136
Obsolete Class 2 Functions.......................................................................................................... 143
Obsolete Class 3 Functions.......................................................................................................... 153

Index

157

List of Tables
Table 1. New Number Types .......................................................................................................... 5
Table 2. New Pointer Types............................................................................................................ 6
Table 3. Standard Abbreviations..................................................................................................... 6
Table 4. Two Port Camera Example............................................................................................... 9
Table 5. Error Codes................................................................................................................... 123
Table 6. Obsolete Class 0 Functions and Their pl_set_param/pl_set_param Equivalents.......... 133
Table 7. Obsolete Class 2 Functions and Their pl_set_param/pl_set_param Equivalents.......... 133
Table 8. Obsolete Class 3 Functions and Their pl_set_param/pl_set_param Equivalents.......... 135

vi

PVCAM Manual

This page intentionally left blank.

Version 2.7

Chapter 1:
SDK
What is the SDK?
SDK — Roper Scientific’s Software Development Kit — allows programmers to access and use the
capabilities of PVCAM© — Programmable Virtual Camera Access Method Library. (PVCAM is
described in detail in the chapters that follow.)
Both the SDK and PVCAM are designed to be platform independent, so the functions described in this
manual work with all supported operating systems. Specific information for installing and using the
library with your particular platform (Windows©, Macintosh©, or UNIX©) is contained in the Read Me
file included on the disk that came with your SDK. Please consult this Read Me file for information on:
•

System requirements

•

Linking PVCAM to your software

•

Initializing PVCAM

•

Device drivers

•

Platform specific files

Contact Information
Princeton Instruments' manufacturing facility is located at the following address:
Roper Scientific, Inc.
3660 Quakerbridge Road
Trenton, NJ 08619 (USA)
TEL: 800-874-9789 / 609-587-9797
TEL: 609-587-1970
Customer Support E-mail: techsupport@princetoninstruments.com
For technical support and service outside the United States, see our web page at
www.princetoninstruments.com. An up-to-date list of addresses, telephone numbers, and e-mail addresses
of Princeton Instruments' overseas offices and representatives is maintained on the web page.

1

2

PVCAM Manual

This page intentionally left blank.

Version 2.7

Chapter 2:
PVCAM, A High-Level C Library
Introduction
PVCAM is an ANSI C library of camera control and data acquisition functions. This library, which is
identical across platforms and operating systems, provides an interface that allows developers to specify
the camera's setup, exposure, and data storage attributes.
Note: Many Photometrics cameras support ICL scripting language that provides detailed low-level
control of exposure and CCD readout. None of the Princeton Instruments cameras support ICL scripting.

System Overview
To use PVCAM, a system must include camera hardware and software, a host computer, and the
PVCAM library.

Host Computer
Application

PVCAM
Camera
Option
Option

Diagnostics

Device
Driver
Data
Link

Camera
Interface
Boards

Support
Software

Hardware Support
Roper Scientific produces two lines of hardware: Photometrics brand and Princeton Instruments
brand. Version 2.7 of the PVCAM library supports the following Princeton Instruments hardware:
•

PentaMAX Version 5.0

•

ST-133 Controlled Cameras (PCI and USB 2.0)

•

PIXIS

Note: Macintosh® computers are not currently supported for Princeton Instruments hardware.

3

4

PVCAM Manual

Version 2.7

Library Classes
The basic PVCAM library supports the following five classes of camera and buffer control:
0. Camera Communications

These functions establish communication paths between
the high-level application software and the device driver.
They also establish some low-level functions for
controlling the camera hardware.

1. Error Reporting

These functions monitor and report on other library
functions. When an error occurs, a function can be called
to return a unique error code.

2. Configuration/Setup

These functions initialize the library and set up the
hardware and software environments. They also control
and monitor the camera hardware, and allow the user to
set parameters such as camera gain and temperature.

3. Data Acquisition

These functions define how the image data are collected.

4. Buffer Manipulation

These functions report buffer information and control
buffer allocation and editing.

Note: Other classes are supported in optional plug-ins. Contact the factory for more information
about plug-ins for PVCAM.

Documentation Style
This manual describes the functional aspects of using PVCAM and various controls for Roper
Scientific® cameras (Chapter 2), gives reference pages for all of the function calls (Chapter 3
through Chapter 7), gives code examples (Chapter 8), provides a list of the defined error codes
(Appendix A) and lists the function calls that are obsolete but still supported in the library
(Appendix B).

Chapter 2: PVCAM, A High-Level C Library

Defined Types
In order to work effectively across platforms, the number of bytes in a variable must be consistent.
Therefore, new types have been defined for PVCAM. These typedefs are given in the header file
master.h.
Type

Explanation

rs_bool*

true (non-0) or false (0) value

int8

signed 8-bit integral value

uns8

unsigned 8-bit integral value

int16

signed 16-bit integral value

uns16

unsigned 16-bit integral value

int32

signed 32-bit integral value

uns32

unsigned 32-bit integral value

enum

treat as unsigned 32-bit integral value

flt64

64-bit floating point value

Table 1. New Number Types
*Note: The type ‘rs_bool’ has replaced the deprecated ‘boolean’ type. This is due to a size
difference of the ‘boolean’ type on the Windows platform. Namely,  defines a
‘boolean’ type of a different size. Including  in the same translation unit as
“master.h” compiles the wrong ‘boolean’ and causes subtle memory access violations. It is
strongly recommended to use the new ‘rs_bool’ type instead to avoid this potential clash.
Since Roper Scientific® camera data and analyses depend on bit depth, the new types give values
that are consistent with the size of the bit depth.
Each new type is composed of the appropriate combinations of int, short, long, or other types that
give the appropriate length for each value. The 8-bit types are the smallest type that holds 8 bits,
16-bit types are the smallest type holding 16 bits, and so forth.
The following list includes the new types defined for use in PVCAM. Additional derived types
always begin with the base name followed by _ptr or _const_ptr.
Type

Pointer

Pointer to Constant Type

rs_bool

rs_bool_ptr

rs_bool_const_ptr

char

char_ptr

char_const_ptr

int8

int8_ptr

int8_const_ptr

uns8

uns8_ptr

uns8_const_ptr

int16

int16_ptr

int16_const_ptr

uns16

uns16_ptr

uns16_const_ptr

int32

int32_ptr

int32_const_ptr

uns32

uns32_ptr

uns32_const_ptr

flt64

flt64_ptr

flt64_const_ptr

5

6

PVCAM Manual

Type

Pointer

Version 2.7

Pointer to Constant Type

rgn_type

rgn_ptr

rgn_const_ptr

export_ctrl_type

export_ctrl_ptr

export_ctrl_const_ptr

Table 2. New Pointer Types

Naming Conventions
To shorten names and improve readability, standard abbreviations are used for common words and
phrases. These abbreviations are used in function and variable names.
adc=analog-to-digital converter

dly=delay

num=number

addr=address

dup=duplicate

ofs=offset

bin=binning

err = error

par=parallel

buf=buffer

exp=exposure

pix=pixel

cam=camera

expt=export

ptr=pointer

cfg=configuration

hbuf=buffer handle

rpt=report

chan=channel

hcam=camera handle

rgn=region

clr=clear

hi=high

ser=serial

cmd=command

hrgn=region handle

shtr=shutter

comm=communication

init=initialize

spd=speed

ctr=counter

len=length

tmp=temp

ctrl=control

lo=low

totl=total

diag=diagnostics

mem=memory

xfr=transfer

Table 3. Standard Abbreviations
In PVCAM, num always means current selection number, while totl or entries is used for
total different possibilities.
A leading h usually signifies a type of handle, such as the camera handle (hcam). A handle is a
16-bit number that refers to an object.

Include Files
Any program using PVCAM must include the following files:
•

master.h

system-specific definitions and types

•

pvcam.h

constants and prototypes for all functions

master.h must be included before pvcam.h.

Chapter 2: PVCAM, A High-Level C Library

7

Parameter Passing and const
When parameters are passed in or out of functions, it may be difficult to determine which
parameters the user should set and which parameters are set by the function. This is particularly
difficult in PVCAM, because virtually all information is exchanged through parameters (the
function return value is reserved for indicating errors).
A few simple rules help resolve the confusion:
•

Pointers generally return information from a function.

•

Non-pointers always send information to a function.

In a few cases, such as structures and arrays, a pointer is passed even though the data are being sent in
to the function. This is done to reduce overhead and to speed function calls, but it conflicts with the
rules above. To solve this problem, when a structure or array (pointer) is sent as input to a function,
the _const_ptr type is used to indicate that the function will not (and can not) change the data.
Note: const_ptr (pointers to const) always sends data into a function. The data is not altered.

CCD Coordinates Model
In many cameras, the CCD orientation is fixed. This fixed position places the origin in a
predetermined location and gives each pixel an x,y location.
In Roper Scientific cameras, the CCD orientation is not only different from camera to camera, but
the orientation may also change when the application changes. Therefore, we use a serial, parallel
(s,p) coordinates system. In this system, the origin is located in the corner closest to the serial
register readout, and the coordinates increase as the locations move away from the origin. The
diagram below illustrates how the coordinates are unaffected by the CCD orientation.
Parallel Direction

(0, 0)

Serial Register

(s1, p1)

Serial Direction

(0, 0)

CCD

Serial Register

Serial Direction

(s2, p2)

Parallel Direction

(s1, p1)

(s2, p2)
CCD

Regions and Images
A region is a user-defined, rectangular exposure area on the CCD. As seen in the diagram above,
the user defines the region by selecting s1,p1 and s2,p2,the diagonal corners of the region.
An image is the data collected from a region. PVCAM reads out the image, then stores it in a buffer.

8

PVCAM Manual

Version 2.7

Binning Factors
For data collection, two other parameters are needed: the serial and parallel binning factors. A
binning of 1 in both directions reads out each pixel at full lateral resolution. A binning of 2 in both
directions combines four pixels, cutting the lateral resolution in half, but quadrupling the lightcollecting area. The number of pixels read out are determined as (s2-s1+1)/sbin in the serial
direction, and (p2-p1+1)/pbin in the parallel direction. If these equations do not produce an integer
result, the remaining pixels are ignored.
Including binning, a data collection region can be fully specified with six parameters: s1,
p1,s2,p2,sbin,pbin. Since these values are 0 indexed, the following is true:
smax = serial size -1
pmax = parallel size -1

Data Array
When pixels are read out, they are placed in the data array indicated by the pointer passed into
pl_exp_start_cont or pl_exp_start_seq . The pixels are placed into an array in the
following order:
Serial Register
1 2 3

4 5 6

7 8 9 10 11 12 13 14

Data Array

15 16 17 18
19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36

CCD

Display Orientation
Some users have expressed an interest in having the data in video coordinates. With video
coordinates, 0,0 is displayed in the upper left corner, and subsequent pixels are painted from left to
right. Although video coordinate configuration can be done in the display routine, factors such as
the optical path, the camera rotation, and which readout port is selected may cause the image to
appear in a different position.

Port and Speed Choices
The CCD in a camera will have one or more output nodes from which the analog pixel stream will
be read. These nodes are referred to as “Readout Ports”. The signal from a readout port is passed to
an analog signal processing chain and then passed to an analog to digital converter (ADC). The
ADC operates at one or more digitization rates and has a set of parameters associated with it. In
PVCAM, the choice of speed (digitization rate) and associated ADC parameters are organized into
a Speed Table. In some cameras, different readout ports will be connected to different analog
processing chains and different ADCs. The most general method for setting up the port and speed
choices is to make the speed choices dependent upon the port selection.
To view the port settings, call pl_get_param with PARAM_READOUT_PORT with the
ATTR_COUNT attribute to determine how many ports are available in your camera. Next, iterate
through each choice, calling pl_get_enum_param with PARAM_READOUT_PORT and record the
enumerated types returned for each valid port. Next, iterate through each of the enumerated valid

Chapter 2: PVCAM, A High-Level C Library

9

ports calling pl_set_param with PARAM_READOUT_PORT. For each valid port, build a speed table
that will then be associated with that port.
Camera speed is determined by CCD readout speed. Since readout speed is determined by a number
of constraints, getting consistent results depends on using the appropriate camera and hardware
settings. To maintain consistency, each camera has the appropriate readout speeds and associated
hardware controls loaded into the speed table. To build the speed table, for each valid port call
pl_get_param with PARAM_SPDTAB_INDEX with the ATTR_COUNT attribute to determine how
many speed entries are allowed on your camera. Then iterate through each choice to get the
associated information for that entry. The steps you should take in setting up the readout ports and
associated speed tables are as follows:
1. pl_get_param with PARAM_READOUT_PORT with ATTR_COUNT to get the total number
of valid ports.
2. pl_get_enum_param with PARAM_READOUT_PORT to get the enumerated port constants.
3. For each port constant, pl_set_param with PARAM_READOUT_PORT, and build a speed
table for each.
Table 4 is an example of a camera with two readout ports. Port 1 has one speed associated with it
and Port 2 has three speeds. Note that the terms "Port 1" and "Port 2" are generic and are only being
used to illustrate the example.
The user chooses the port and then the speed table entry number, and the camera is configured
accordingly. The user can then choose one of the gain settings available for that speed table entry
number. For example, the user chooses Port 2 and speed index one. This selection provides a 16-bit
camera with a pixel time of 500 nanoseconds (a 2 MHz readout rate). The CCD is reading out of
Port 2. The gain is set to 2.
Readout
Port

PORT 1

PORT 2

Bit
Depth

Pixel
Time

Current
Gain

Max
Gain

PARAM_SPDTAB_INDEX

PARAM_BIT
_DEPTH

PARAM_PIX
_TIME

PARAM_GAIN
_INDEX

PARAM_GAIN
_INDEX with ATTR_MAX

0

12

500

2

16

0

12

100

1

3

1

16

500

2

3

2

12

500

2

3

Entry

Table 4. Two Port Camera Example
It is the responsibility of the application program to remember variables associated with port and
speed selections. For example, the camera maintains one gain value. Changing this value will
change it for all port and speed choices. However, the application program may maintain gain
values for each setting and then write them to the camera when the user changes the current port or
speed. Read-only values, such as bit depth, may be read at time of open and saved in variables in
the application or may be read each time a user selection changes.
Once a selection is made, all settings remain in effect until the user resets them or until the camera
hardware is powered down or reset. If a camera has multiple speed entry numbers, you may choose
to view the settings located in the speed table. To view the speed table settings, call
pl_get_param with PARAM_SPDTAB_INDEX with the ATTR_MAX attribute to determine how
many speed entries are allowed on your camera. Then iterate through each choice to get the
associated information for that entry.

10

PVCAM Manual

Version 2.7

Frame Transfer
With a non-frame transfer CCD, the entire CCD is exposed, and the image read out before the CCD
is exposed again. A frame transfer CCD is divided into two areas: one for image collection and one
for image storage. After the CCD is exposed, the image is shifted to the storage array. A split clock
allows the CCD to expose the next frame of the image array while simultaneously reading out from
the storage array.
Since shifting an image to the storage array is many times faster than reading out the same image,
frame transfer speeds up many sequences.
In a standard frame transfer device, the storage array is usually masked and covers half the CCD.
With this standard configuration, the image in the storage array must be completely read out before
the next image is shifted into the storage array. Therefore, assuming that the exposure_time for
each image within a sequence is equal, the shortest possible exposure_time would be exactly
equal to the image readout time.
Image Array

Storage Array

Read out

Image shift to Storage Array

Interline
Interline (PMODE_INTERLINE) CCDs have a parallel register that has been subdivided into stripes so
that the opaque storage register fits between columns of pixels. The electronic image accumulates
in the exposed area of the parallel register. During CCD readout, the entire image is shifted under
the interline mask into a hidden shift register. Register readout then proceeds in normal CCD
fashion. Since the signal is transferred in microseconds, smearing will be undetectable for typical
exposures.
Read out

Storage Register
Image Array

Image shift to
Storage Registers

Kinetics
Kinetics (PMODE_KINETICS) is a special type of operation in which most of the CCD is
mechanically or optically masked, leaving a small section (window) open to light. This section is

Chapter 2: PVCAM, A High-Level C Library

11

then shifted under the mask very quickly. The defined clean cycles are used to keep charge from
accumulating on the array while it is waiting for a start exposure signal and after the data has been
readout of the array. The window size is set by PARAM_KIN_WIN_SIZE and must be at least 1 and less
than or equal to the PARAM_PAR_SIZE.
This mode of operation is available for full frame CCDs and requires a mechanical window.

Custom Chip
Normally, not all of the pixels in a CCD array are exposed and read out: a frame of “dummy” pixels
bounds the active area. These dummy pixels are usually masked and are not normally read out.
However, they could be read out by changing the chip definition. For example, in the case of the
EEV 576 × 384, the 576 active rows are preceded by one dummy row and followed by 2 dummy
rows. In addition, there are 12 dummy columns on one side of the active region and 13 dummy
columns on the other side. By changing the chip definition to increase the active area while
decreasing the dummy settings, the dummy cells would be read out. By doing so, one could
measure the dark charge with every readout. (Note that F.T. Dummies are chip-specific and are
dummy rows at the boundary of the masked and visible areas of a frame transfer device.)
It is also possible to increase image acquisition speed by reducing the size of the active area in the
definition. The result will be faster but lower resolution data acquisition. Operating in this mode
would ordinarily require that the chip be masked so that only the reduced active area is exposed. This
will prevent unwanted charge from spilling into the active area or being transferred to the shift
register.
Changing a chip definition requires that the custom chip feature is enabled via PARAM_CUSTOM_CHIP.
This allows the ATTR_ACCESS of the following parameters to change from ACC_READ_ONLY to
ACC_READ_WRITE: PARAM_PREMASK, PARAM_PRESCAN, PARAM_POSTMASK, PARAM_POSTSCAN,
PARAM_PAR_SIZE, PARAM_SER_SIZE, and PARAM_FTSCAN (for CCDS that have frame transfer
dummies between the active and the masked areas).

Custom Timing
Custom Timing (enabled via PARAM_CUSTOM_TIMING) allows you to change the parallel
(PARAM_PAR_SHIFT_TIME) and serial (PARAM_SER_SHIFT_TIME) shift rates for a CCD. Acceptable
shift times must be within the minimum value (ATTR_MIN) and the maximum value (ATTR_MAX),
and use the increment (ATTR_INCREMENT) or a multiple of the increment that falls within the
minimum and maximum values. Increments are in terms of nanoseconds.
Normally, the default timing parameter values have been determined to give the fastest possible
performance without compromising data acquisition performance.

Image Smear
If an image is shifted while the shutter is open, the charge that collects while the image is moving
makes the image look smeared. Smearing can occur in several situations: if the camera is set to read
out without closing the shutter, if the shutter is set to close too slowly, or in frame transfer
sequences where the shutter stays open while the image is shifted to the storage array.

12

PVCAM Manual

Version 2.7

In most frame transfer applications, the shutter opens before the sequence begins and closes after
the sequence ends. The charge gathered during the shift creates a smear across the image array.
Image Array

Storage Array

Image is exposed
Image Array

Storage Array

Image is shifted to storage array

Although the frame transfer time is usually only a few milliseconds, smearing cannot be eliminated
when the shutter is left open for the entire sequence. The higher the ratio of the exposure_time
to the frame transfer time, the brighter the image is in comparison to the pattern caused by
smearing. An exposure_time that is too long will saturate the pixels and cause the image to lose
all contrast.

Sequences
A sequence is a programmed series of exposures that is started by a single command. In the least
complex sequences, a setup is called, then the camera takes a series of exposures with a complete
readout between each exposure. In these simple sequences, all the variables in the setup apply to all
the exposures in the sequence. The diagram below illustrates a sequence of exposures taken as the
day passes.

Chapter 2: PVCAM, A High-Level C Library

13

In most camera modes, you must load a new setup into the camera if you want to change a variable
between sequences. PVCAM offers a few exceptions to this rule. Since several PVCAM exposure
modes ignore the setup exposure_time, an external trigger begins each sequence or each exposure in
the sequence. In one exposure mode, calling a command between sequences sets the exposure_time
for the next sequence.

Sequence Parameters IDs/Constants
When constructing a sequence, the following three items determine how the camera behaves before
reading out:
•

PARAM_CLEAR_MODE parameter id: Determines if and when the CCD is cleared of
charge.

•

BULB_MODE, FLASH_MODE, STROBED_MODE, TIMED_MODE,
TRIGGER_FIRST_MODE, or VARIABLE_ TIMED_MODE constant : Determines if a
program command or an external trigger starts and ends the exposure/nonexposure time
within a sequence.

•

PARAM_SHTR_OPEN_MODE parameter id: Determines if and when the shutter opens.

Although a single exposure may be considered a sequence of one, some options in triggering,
shuttering, and CCD clearing only apply to multiple image sequences.

Circular Buffer
Data

From Camera

Note: Because some cameras do not support circular buffer, use the
parameter id PARAM_CIRC_BUFFER with pl_get_param to see if the
system can perform circular buffer operations.

Data
Data
Data

1 Oldest
2
3
4 Latest
5
6
7
8

Circular buffers are a special case of sequences. In a sequence, you specify
the number of frames to acquire and allocate a buffer large enough to hold all
of the frames. Using a circular buffer allows you to acquire a continuous
sequence; the camera will continue to acquire frames until you decide to stop
it, rather than acquiring a specified number of frames. For a circular buffer,
Assumes 1 Mb frames
you allocate a buffer to hold a certain number of frames, and the data from
the camera is stored in the buffer sequentially until the end of the buffer is
reached. When the end is reached, the data is stored starting at the beginning of the buffer again,
and so on as shown in the above figure.
The image buffer used for a circular buffer is passed to pl_exp_start_cont. The buffer is either
allocated by your application or obtained from the driver as a preallocated contiguous block of
physical memory. The driver buffer pointer is retrieved using the pl_exp_get_driver_buffer
function. Data read out of the camera is stored in the designated circular buffer until it is retrieved by
the user's data processing routine, it is overwritten, or the buffer is filled. The selected circular buffer
mode determines whether or not buffer data can be overwritten before being retrieved by the
application.
When a circular buffer is running in CIRC_OVERWRITE mode, the frames in the buffer are filled as
data becomes available, regardless of whether the application has retrieved the data. This allows for
the fastest possible data display (on the host computer monitor) and is equivalent to the Princeton
Instruments Focus mode. If all frames in the buffer are filled before the application retrieves the
data, the oldest frame will be overwritten with new data. By fetching and displaying the most

14

PVCAM Manual

Version 2.7

recently stored frame, image data display can be virtually real-time. Briefly, this mode of circular
buffer is set up and runs as follows:
•
•
•
•
•
•
•
•

pl_exp_init_seq (): The camera is prepared to acquire and readout data.
pl_exp_setup_cont (circ_overwrite): The circular buffer mode is selected.
pl_exp_start_cont (): Continuous data acquisition is started.
Frames begin arriving in the buffer.
pl_exp_check_cont_status (): The status of the buffer is checked.
pl_exp_get_latest_frame (): If there are one or more frames of data, the most
recently stored frame is read out.
Data is processed (for example, the data is displayed).
The loop is repeated until continuous data acquisition is stopped with pl_exp_stop_cont (),
pl_exp_finish_seq (),and pl_exp_uninit_seq ().

When a circular buffer is running in CIRC_NO_OVERWRITE mode, the frames in the buffer are
filled as data becomes available until all frames are filled. This mode allows for the fastest possible
frame rate (with regard to data storage) with no skipping of frames and is equivalent to the
Princeton Instruments Nframe mode. If all frames in the buffer are filled before the application
retrieves the data, the latest frame will be lost because the oldest frame will not be overwritten.
Therefore, the user's routine must be able to read the data out of the buffer faster than the camera
can fill the buffer. Briefly, this mode of circular buffer is set up and runs as follows:
•
•
•
•
•
•
•
•
•

pl_exp_init_seq (): The camera is prepared to acquire and readout data.
pl_exp_setup_cont (circ_no_overwrite): The circular buffer mode is selected.
pl_exp_start_cont (): Continuous data acquisition is started.
Frames begin arriving in the buffer.
pl_exp_check_cont_status (): The status of the buffer is checked.
pl_exp_get_oldest_frame (): If there are one or more frames of data, the oldest frame is
read out.
Data is processed (for example, stored elsewhere).
pl_exp_unlock_oldest_frame (): The oldest frame is unlocked so it becomes
available for data storage.
The loop is repeated until the buffer fills up or continuous data acquisition is stopped with
pl_exp_stop_cont (), pl_exp_finish_seq (),and pl_exp_uninit_seq ().

Refer to Example 3: Circular Buffer in Chapter 8 for two examples of code for circular buffer
operation.

Chapter 2: PVCAM, A High-Level C Library

15

Clear Modes
Clearing removes charge from the CCD by clocking the charge to the serial register then directly to
ground. This process is much faster than a readout, because the charge does not go through the
readout node or the amplifier. Note that not all clearing modes are available for all cameras. Be
sure to check availability of a mode before attempting to set it.
The clear modes are described below:
•

CLEAR_NEVER: Don't ever clear the CCD. Useful for performing a readout after an
exposure has been aborted.

•

CLEAR_PRE_EXPOSURE: Before each exposure, clears the CCD the number of times

specified by the clear_cycles variable. This mode can be used in a sequence. It is most useful
when there is a considerable amount of time between exposures.
•

CLEAR_PRE_SEQUENCE: Before each sequence, clears the CCD the number of times
specified by the clear_cycles variable. If no sequence is set up, this mode behaves as if the
sequence has one exposure. The result is the same as using CLEAR_PRE_EXPOSURE.

•

CLEAR_POST_SEQUENCE: Clears continuously after the sequence ends. The camera
continues clearing until a new exposure is set up or started, the abort command is sent, the
speed entry number is changed, or the camera is reset.

•

CLEAR_PRE_POST_SEQUENCE: Clears clear_cycles times before each sequence and clears
continuously after the sequence ends. The camera continues clearing until a new exposure is
set up or started, the abort command is sent, the speed entry number is changed, or the
camera is reset.

•

CLEAR_PRE_EXPOSURE_POST_SEQ: Clears clear_cycles times before each exposure and
clears continuously after the sequence ends. The camera continues clearing until a new
exposure is set up or started, the abort command is sent, the speed entry number is changed,
or the camera is reset.

Normally during the idle period, the Camera Control Subsystem (CCS) parallel and serial clock
drivers revert to a low power state that saves both power and heat. When CLEAR_..._POST options are
used, the continuous clearing prevents these systems from entering low-power mode. This state
generates a small amount of additional heat in the electronics unit and the camera head.
The pl_exp_abort() function stops the data acquisition and the camera goes into the clean cycle.
Again, the CCD chip is continuously being cleaned.
Clear Modes decide when to clean the CCD arrays. However, since PI cameras always clean the
CCDs at idle times, Clear Modes do not apply to PI cameras and therefore the feature is not
available for PI cameras.

16

PVCAM Manual

Version 2.7

Exposure Modes
During sequences, the exposure mode determines how and when each exposure begins and ends:
TIMED_MODE

STROBED_MODE

VARIABLE_ TIMED_MODE

BULB_MODE

TRIGGER_FIRST_MODE

FLASH_MODE

In general, the settings in pl_exp_setup_seq apply to each exposure within a sequence. They
also apply to every sequence until the setup is reset. The only exceptions are in
VARIABLE_TIMED_MODE and BULB_MODE. These two modes ignore the exposure_time
parameter in setup, and rely on a function or trigger to determine the exposure time.
Every sequence has alternating periods of exposure and nonexposure time. During the time the CCD
is not exposing, the camera could be in several states, such as waiting for pl_exp_start_seq,
reading out, or performing continuous clearing. In the diagrams that follow, each exposure mode
shows the exposure time in white and the time between exposures in gray.

Exposure: TIMED_MODE
In TIMED_MODE, all settings are read from the setup parameters, making the duration of each
exposure time constant and the interval times between exposures constant. In this mode, every
sequence has the same settings.
The diagram below represents a sequence in TIMED_MODE.

Time in ms
0

50

100

150

200

Nonexposure Time

250

300

350

400

Exposure Time

Exposure: VARIABLE_TIMED_MODE
Use VARIABLE_TIMED_MODE when you want to change the exposure_time between sequences.
In VARIABLE_TIMED_MODE, all settings except exposure_time are read from the setup
parameters. The exposure_time must be set with parameter id PARAM_EXP_TIME. If you do not
call PARAM_EXP_TIME before the first sequence, a random time will be assigned. The camera will
not read the first exposure time from the exposure_time in setup, because this mode ignores the
exposure_time parameter.
Application example: A filter wheel is used to change the filter color between sequences. The
exposure time needed for the darkest filter saturates the pixels when lighter filters are used. The
diagram on the next page shows two sample sequences from this example.

Chapter 2: PVCAM, A High-Level C Library

Time in ms
0

50

100

150

200

250

Nonexposure Time

300

17

350

400

Exposure Time

The first sequence runs with a filter that uses exposure and nonexposure times that are equal. In the
second sequence, the exposure time is longer, but the time between exposures remains the same as
in the first sequence.

Exposure: TRIGGER_FIRST_MODE
Use TRIGGER_FIRST_MODE when you want an external trigger to signal the start of the sequence.

Time in ms
0

50

100

150

Nonexposure Time

200

250

300

350

400

Trigger Signal

Exposure Time

In TRIGGER_FIRST_MODE, pl_exp_start_seq starts the camera, which enters the clear mode
while it waits for a trigger signal. The black line in the diagram illustrates a trigger signal coming
from an external trigger source.
Once the outside event triggers the camera to start exposing, the sequence follows the conditions
generated in pl_exp_setup_seq. Note that all exposure times are equal, and the time intervals
between exposures are equal.
You must have an external trigger signal connected to your camera for TRIGGER_FIRST_MODE to
function. If your equipment fails to send a trigger signal, you can stop the sequence by calling
pl_exp_abort.
Note: If you do not use one of the CLEAR_PRE_EXPOSURE modes, the CCD will begin exposing
immediately after pl_exp_start_seq is called. Once the trigger is received, the CCD will
continue to expose for the exposure_time specified in pl_exp_setup_seq. In other words, the
first exposure in your sequence may have a longer exposure time than the subsequent exposures.

Exposure: STROBED_MODE
Use STROBED_MODE when you want an external trigger to start each exposure in the sequence.

Time in ms
0

50

100

Nonexposure Time

150

200

250

Exposure Time

300

350

400

Trigger Signal

18

PVCAM Manual

Version 2.7

In STROBED_MODE, pl_exp_start_seq starts the camera. The camera enters clear mode
while it waits for the first trigger signal to start the first exposure. As shown in the diagram above,
each new exposure waits for an external trigger signal. Notice that the intervals between exposures
can vary greatly, but the exposure times are constant.
You must have an external trigger signal connected to your camera for this mode to function. If your
equipment fails to send a trigger signal, you can stop the sequence by calling pl_exp_abort.
Application example: In a nature study of birds passing through a restricted area, the motion of
each bird sends a trigger signal to the camera. The camera exposes, reads out, and waits for the next
trigger signal. The result is an image of each bird as it crosses the camera's field of view.
Note: If you do not use one of the CLEAR_PRE_EXPOSURE modes, the CCD will begin exposing
immediately after pl_exp_start_seq is called. Once the trigger is received, the CCD will
continue to expose for the exposure_time specified in pl_exp_setup_seq. In other words, the
first exposure in your sequence may have a longer exposure time than the subsequent exposures.

Exposure: BULB_MODE
Use BULB_MODE, when you want an external trigger signal to control the beginning and end of
each exposure.

Time in ms
0

50

100

Nonexposure Time

150

200

250

Exposure Time

300

350

400

450

Trigger Signal

In BULB_MODE, pl_exp_start_seq calls the setup. The camera enters clear mode while it
waits for a true external trigger signal to start each exposure. The CCD continues to expose until a
false trigger signal ends the exposure. In the diagram above, the trigger signal line moves up to
represent a true trigger and down to represent a false trigger.
Notice that the exposure times and the intervals between exposures vary greatly. Since the true and
false signals determine exposure time, the exposure_time set in pl_exp_setup_seq is ignored.
You must have an external trigger signal connected to your camera for BULB_MODE to function. If
your equipment fails to send a trigger signal, you can stop the sequence by calling pl_exp_abort.
Note: If you do not use one of the CLEAR_PRE_EXPOSURE modes, the CCD exposes until
receiving a false trigger signal, then reads out. After reading out, the CCD exposes again without
clearing and waits for the true trigger. Once the external event causes a true trigger, the CCD
continues to expose until receiving a false trigger, then reads out. In other words, the CCD will
expose from the end of readout until the next false trigger.

Exposure: FLASH_MODE
Some PVCAM cameras include a flash port—several outside pins with a software-controllable
signal. Photometrics uses these pins to drive factory test fixturing. However, the signal can be used
to drive other equipment. Aside from the signal on the pins, FLASH_MODE is identical to
TIMED_MODE. Consult your camera hardware documentation to see flash port availability and
electrical specifications.

Chapter 2: PVCAM, A High-Level C Library

19

Open Delay, Close Delay
In order to ensure that the entire CCD is exposed for the specified exposure_time, the
mechanical limitations of the shutter must be considered. Open delay
(PARAM_SHTR_OPEN_DELAY), close delay (PARAM_SHTR_CLOSE_DELAY), and time units
(PARAM_SHTR_CLOSE_DELAY_UNIT)account for the time necessary for the shutter to open and
close. Remember that the camera is exposing while the shutter is opening and closing, so some
pixels are exposed longer than others.
Iris Shutter

An Iris shutter opens in an expanding circular pattern.
Barn Door Shutter

A Barn Door shutter slides across the exposure area.
If the shutter is still closing when the image shifts for a frame transfer or readout, the image will
smear. (See the section "Image Smear", page 11, for a more complete explanation on smearing.)
PARAM_SHTR_CLOSE_DELAY allows time for the shutter to close before the image shifts.
The default open and close delay values will vary depending on the brand of camera and the shutter
used. Open delay may be up to 15 milliseconds with a close delay of up to 30 milliseconds. Change
the default values only if you are using a shutter other than the shutter shipped with your camera. If
you are using a standard Photometrics or Princeton Instruments shutter, changing
PARAM_SHTR_OPEN_DELAY/CLOSE_DELAY default values will not increase the frame transfer
rate.

20

PVCAM Manual

Version 2.7

Shutter Control
The shutter open modes determine how the shutter in a camera behaves when a single exposure is
taken or when a sequence is run. Remember that the camera is exposing while the shutter is
opening. Because not all supported cameras have programmable shutter control, remember to
check for availability of a particular mode.
•

OPEN_PRE_EXPOSURE: Opens the shutter before every exposure, then closes the shutter
after the exposure is finished.

•

OPEN_PRE_SEQUENCE: Opens the shutter before the sequence begins, then closes the shutter
after the sequence is finished.

•

OPEN_PRE_TRIGGER: Opens the shutter, then clears or exposes (set in clear mode) until a
trigger signal starts the exposure.

•

OPEN_NEVER: Keeps shutter closed during the exposure. Used for dark exposures.

•

OPEN_NO_CHANGE: Sends no signals to open or close the shutter.

Exposure Loops
Within an exposure loop, the interaction of the exposure, clear, and shutter open modes determines
how the camera behaves during a sequence. In the following pages, sample command sequences
show how each exposure mode acts in combination with each clear and shutter open mode. As
mentioned above in "Shutter Control", not all supported cameras have programmable shutter
control, remember to check for availability of a particular mode.

Key

Description

ClearN

Clear CCD N times as specified in clear_cycles

OS

Open shutter and perform PARAM_SHTR_OPEN_DELAY

CS

Close shutter and perform PARAM_SHTR_CLOSE_DELAY

EXP

Expose CCD for exposure_time

I->S

Transfer image array to storage array (frame transfer)

Readout

Readout CCD (readout storage array for frame transfer)

WaitT

Wait until trigger

EXP Until notT

Expose CCD until trigger end (BULB_MODE)

Items in ITALICS repeat M times for a sequence of M exposures.
Items in BOLD are outside of the sequence loop.

EXPOSURE: TIMED_MODE

Chapter 2: PVCAM, A High-Level C Library

21

EXPOSURE: TIMED_MODE

Clear Mode
CLEAR_PRE_EXPOSURE

CLEAR_PRE_SEQUENCE

CLEAR_NEVER

Shutter Mode

Command Sequence

OPEN_PRE_EXPOSURE

ClearN, OS, EXP, CS, I->S, Readout

OPEN_PRE_SEQUENCE

OS , ClearN, EXP, I->S, Readout, CS

OPEN_PRE_TRIGGER

ClearN, OS, EXP, CS, I->S, Readout

OPEN_NO_CHANGE

ClearN, EXP, I->S, Readout

OPEN_NEVER

CS, ClearN, EXP, I->S, Readout

OPEN_PRE_EXPOSURE

ClearN,OS, EXP, CS, I->S, Readout

OPEN_PRE_SEQUENCE

OS, ClearN, EXP, I->S, Readout, CS

OPEN_PRE_TRIGGER

ClearN, OS, EXP, CS, I->S, Readout

OPEN_NO_CHANGE

ClearN, EXP, I->S, Readout

OPEN_NEVER

CS, ClearN, EXP, I->S, Readout

OPEN_PRE_EXPOSURE

OS, EXP, CS, I->S, Readout

OPEN_PRE_SEQUENCE

OS, EXP, I->S, Readout, CS

OPEN_PRE_TRIGGER

OS, EXP, CS, I->S, Readout

OPEN_NO_CHANGE

EXP, I->S, Readout

OPEN_NEVER

CS, EXP, I->S, Readout

Notes
Photometrics
only

Photometrics
only

EXPOSURE: TRIGGER_FIRST_MODE

Clear Mode
CLEAR_PRE_EXPOSURE

CLEAR_PRE_SEQUENCE

CLEAR_NEVER

Shutter Mode

Command Sequence

OPEN_PRE_EXPOSURE

EXP+WaitT, ClearN, OS, EXP, CS,
I->S, Readout

OPEN_PRE_SEQUENCE

OS, EXP+WaitT, ClearN, EXP, I->S,
Readout, CS

OPEN_PRE_TRIGGER

EXP+WaitT, OS, ClearN, EXP, CS,
I->S, Readout

OPEN_NO_CHANGE

EXP+WaitT, ClearN, EXP, I->S,
Readout

OPEN_NEVER

CS, EXP+WaitT, ClearN, EXP, I->S,
Readout

OPEN_PRE_EXPOSURE

Clear+WaitT, ClearN, OS, EXP, CS,
I->S, Readout

OPEN_PRE_SEQUENCE

OS, Clear+WaitT, EXP, I->S,
Readout, CS

OPEN_PRE_TRIGGER

Clear+WaitT, OS, EXP, CS, I->S,
Readout

OPEN_NO_CHANGE

Clear+WaitT, EXP, I->S, Readout

OPEN_NEVER

CS, Clear+WaitT, EXP, I->S, Readout

OPEN_PRE_EXPOSURE

EXP+WaitT, ClearN, OS, EXP, CS,
I->S, Readout

OPEN_PRE_SEQUENCE

OS, EXP+WaitT, EXP, I->S, Readout,
CS

Notes
Photometrics
only

Photometrics
only

22

PVCAM Manual

Version 2.7

EXPOSURE: TRIGGER_FIRST_MODE

Clear Mode

Shutter Mode

Command Sequence

OPEN_PRE_TRIGGER

EXP+WaitT, OS, EXP, CS, I->S,
Readout

OPEN_NO_CHANGE

EXP+WaitT, EXP, I->S, Readout

OPEN_NEVER

CS, EXP+WaitT, EXP, I->S, Readout

Notes

EXPOSURE: STROBED_MODE

Clear Mode
CLEAR_PRE_EXPOSURE

CLEAR_PRE_SEQUENCE

CLEAR_NEVER

Shutter Mode

Command Sequence

OPEN_PRE_EXPOSURE

Clear+WaitT, OS, EXP, CS, I->S,
Readout

OPEN_PRE_SEQUENCE

OS, Clear+WaitT, EXP, I->S, Readout,
CS

OPEN_PRE_TRIGGER

OS, Clear+WaitT, EXP, CS, I->S,
Readout

OPEN_NO_CHANGE

Clear+WaitT, EXP, I->S, Readout

OPEN_NEVER

CS, Clear+WaitT, EXP, I->S, Readout

OPEN_PRE_EXPOSURE

ClearN, EXP+WaitT, OS, EXP, CS,
I->S, Readout

OPEN_PRE_SEQUENCE

OS, ClearN, EXP+WaitT, EXP, I->S,
Readout, CS

OPEN_PRE_TRIGGER

ClearN, OS, EXP+WaitT, EXP, CS,
I->S, Readout

OPEN_NO_CHANGE

ClearN, EXP+WaitT, EXP, I->S,
Readout

OPEN_NEVER

CS, ClearN, EXP+WaitT, EXP, I->S,
Readout

OPEN_PRE_EXPOSURE

EXP+WaitT, OS, EXP, CS, I->S,
Readout

OPEN_PRE_SEQUENCE

OS, EXP+WaitT, EXP, I->S, Readout,
CS

OPEN_PRE_TRIGGER

OS, EXP+WaitT, EXP, CS, I->S,
Readout

OPEN_NO_CHANGE

EXP+WaitT, EXP, I->S, Readout

OPEN_NEVER

CS, EXP+WaitT, EXP, I->S, Readout

Notes

Uses
Continuous
Cleans

Photometrics
only

Chapter 2: PVCAM, A High-Level C Library

23

EXPOSURE: BULB_MODE

Clear Mode
CLEAR_PRE_EXPOSURE

CLEAR_PRE_SEQUENCE

CLEAR_NEVER

Shutter Mode

Command Sequence

OPEN_PRE_EXPOSURE

Clear+WaitT, OS, EXP Until notT,
CS, I->S, Readout

OPEN_PRE_SEQUENCE

OS, Clear+WaitT, EXP Until notT,
I->S, Readout, CS

OPEN_PRE_TRIGGER

OS, Clear+WaitT, EXP Until notT,
CS, I->S, Readout

OPEN_NO_CHANGE

Clear+WaitT, EXP Until notT, I->S,
Readout

OPEN_NEVER

CS, Clear+WaitT, EXP Until notT,
I->S, Readout

OPEN_PRE_EXPOSURE

ClearN, EXP+WaitT, OS, EXP Until
notT, CS, I->S, Readout

OPEN_PRE_SEQUENCE

OS, ClearN, EXP+WaitT, EXP Until
notT,
I->S, Readout, CS

OPEN_PRE_TRIGGER

ClearN, OS, EXP+WaitT, EXP Until
notT, CS, I->S, Readout

OPEN_NO_CHANGE

ClearN, EXP+WaitT, EXP Until notT, I>S, Readout

OPEN_NEVER

CS, ClearN, EXP+WaitT, EXP Until
notT, I->S, Readout

OPEN_PRE_EXPOSURE

EXP+WaitT, OS, EXP Until notT, CS,
I->S, Readout

OPEN_PRE_SEQUENCE

OS, EXP+WaitT, EXP Until notT,
I->S, Readout, CS

OPEN_PRE_TRIGGER

OS, EXP+WaitT, EXP Until notT, CS,
I->S, Readout

OPEN_NO_CHANGE

EXP+WaitT, EXP Until notT, I->S,
Readout

OPEN_NEVER

CS, EXP+WaitT, EXP Until notT,
I->S, Readout

Notes
Photometrics
only

Photometrics
only

Photometrics
only

24

PVCAM Manual

Version 2.7

Image Buffers
When exposures include multiple images and complex sequences, you may choose to store the
images in a buffer. PVCAM has a number of buffer routines that handle memory allocation and
freeing. The following list describes images you may choose to store in a buffer.
•

Full CCD: A single exposure where the entire CCD is treated as one region and image data
are collected over the full CCD. All the data are stored in a single buffer.

•

Single Exposure, Multiple Images: A single exposure with multiple regions. The data are
stored in several image arrays that are stored inside a single buffer.

•

Sequences: A series of exposures with identical regions. The data are stored in several image
arrays that are stored inside a single buffer.

•

Multiple Exposures, Multiple Images: A series of exposures with multiple regions. Each
exposure must have identical regions. The data are stored in several image arrays that are
stored inside a single buffer.

Class 4 places the following constraints on data stored in buffers:
•

All exposures in a buffer must have the same set of images (the size, position, and binning
must match).

•

All data in a buffer must be at the same bit depth (16-bit signed, 16- bit unsigned, 32-bit
signed, and so forth.)

•

All data in an image are stored in a standard C, two-dimensional array, with the second
subscript varying most rapidly.

Chapter 2: PVCAM, A High-Level C Library

25

PVCAM collects data very efficiently, but moving the data in and out of a buffer involves extra
processing time. If speed is crucial, the following options may minimize processing time:
•

Don’t use a buffer. The data are collected in a user-specified pixel stream at maximum
efficiency (see pl_exp_start_seq). As discussed in "Data Array", this array can be
accessed directly. However, when multiple regions are collected, the stream becomes more
complex. If the regions overlap in the serial direction, the data from one region are
interleaved with the data from another region.

•

Use a buffer. If the data are in multiple regions, pl_exp_finish_seq decodes the
pixel_stream data into the regions. Once decoded, each region can be retrieved as a
simple array (see "Data Array"). Even though it takes extra time to decode the data and load
the buffer, retrieving the data is simple.

•

Defer decoding. The original call to pl_exp_setup_seq sets up internal structures used to
decode pixel_stream into a buffer structure. However, pl_exp_finish_seq does not
need to be called immediately. As long as the camera (and library) remain open, and
pl_exp_setup_seq is not called with a new setup, the decoding structures remain valid.
This allows a program to collect data quickly, then decode the data when more time is
available. Of course, this is impossible if users must be given immediate feedback.

Source Code Examples
Refer to Chapter 8, pages 111-122, for code examples.

26

PVCAM Manual

This page intentionally left blank.

Version 2.7

Chapter 3:
Camera Communications (Class 0)
Introduction
The functions in this category provide a pipeline for bidirectional communications. The table below
lists the current Class 0 functions, and the "Class 0 Functions" section provides detailed
descriptions of each. If the Class 0 functions you are interested in are not listed below, check
"Appendix B: Obsolete Functions". The Class 0 functions that have been made obsolete now have
equivalent pl_get_param and pl_set_param functions. For more information about the
pl_get_param and pl_set_param parameter ids, refer to "Chapter 5:Configuration/Setup
(Class 2)", starting on page 45.

List of Available Class 0 Functions
Library

Camera

pl_pvcam_init

pl_cam_check

pl_pvcam_uninit

pl_cam_close

pl_pvcam_get_ver

pl_cam_get_diags
pl_cam_get_name

Device Driver
pl_ddi_get_ver

pl_cam_get_total
pl_cam_open

List of Available Class 0 Parameter IDs
The following are available Class 0 parameters used with pl_get_param(), pl_set_param(),
pl_get_enum_param(), and pl_enum_str_length() functions specified in Chapter 5.
PARAM_DD_INFO

PARAM_DD_TIMEOUT

PARAM_DD_INFO_LENGTH

PARAM_DD_VERSION

PARAM_DD_RETRIES

27

28

PVCAM Manual

Version 2.7

Class 0 Functions
PVCAM

Class 0: Camera Communications

pl_cam_check(0)

NAME

pl_cam_check — fails if hcam is not the handle of an open camera.

SYNOPSIS

rs_bool
pl_cam_check(int16 hcam)

DESCRIPTION

This is a fast check, used internally by many other functions before they access
hardware. This function checks whether the input handle, hcam, refers to an open
camera.

RETURN VALUE

TRUE for a valid handle, FALSE for an invalid handle.

SEE ALSO

pl_cam_open(0), pl_cam_close(0)

NOTES

Since this function is a frequent call, it is designed to be highly efficient. It does
not access hardware, it checks the internal state tables that are set by
pl_cam_open and pl_cam_close.

Chapter 3: Camera Communications (Class 0)

29

PVCAM

Class 0: Camera Communications

pl_cam_close(0)

NAME

pl_cam_close — frees the current camera, prepares it for power-down.

SYNOPSIS

rs_bool
pl_cam_close(int16 hcam)

DESCRIPTION

This has two effects. First, it removes the listed camera from the reserved list,
allowing other users to open and use the hardware. Second, it performs all
cleanup, close-down, and shutdown preparations needed by the hardware. A
camera can only be closed if it was previously opened; hcam must be a valid
camera handle.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_cam_open(0),pl_pvcam_init(0),pl_pvcam_uninit(0)

NOTES

pl_pvcam_uninit automatically calls a pl_cam_close on all cameras opened
by the current user.

30

PVCAM Manual

Version 2.7

PVCAM

Class 0: Camera Communications

pl_cam_get_diags(0)

NAME

pl_cam_get_diags — fails and returns an error if there are any problems with
the camera.

SYNOPSIS

rs_bool
pl_cam_get_diags(int16 hcam)

DESCRIPTION

All functions that open or reset the camera perform a short set of checks and
diagnostics. The error codes set in these diagnostics are stored in a table. When
hcam is a valid camera handle, pl_cam_get_diags (called immediately after
pl_cam_open) reads the table and reports any critical error condition by
returning FALSE.
Both critical and noncritical subsystem error codes are set, although only critical
subsystem failures return a FALSE. Critical subsystems are defined as systems
that, if they fail, may prevent the camera from acquiring or reading out an image.
Critical and noncritical errors are listed in pl_error_code .

RETURN VALUE

FALSE indicates that a critical subsystem is not working, and therefore the
camera may not be able to acquire or read out an image. TRUE indicates that no
error codes have been set for critical subsystems, but there may be error codes
set for noncritical subsystems. Noncritical subsystem errors are considered
warnings. Critical and noncritical errors are listed in pl_error_code .

SEE ALSO

pl_cam_open(0)

NOTES

This function call is designed to be fast, therefore to ensure that camera hardware
is attached and functional, pl_cam_get_diags can be called before every
exposure.

Chapter 3: Camera Communications (Class 0)

31

PVCAM

Class 0: Camera Communications

pl_cam_get_name(0)

NAME

pl_cam_get_name — returns the name of a camera.

SYNOPSIS

rs_bool
pl_cam_get_name(int16 cam_num,char_ptr cam_name)

DESCRIPTION

This function allows a user to learn the string identifier associated with every
camera on the current system. This is a companion to the pl_cam_get_total
function. Cam_num input can run from 0 to ( total_cams - 1), inclusive. The
user must pass in a string that is at least CAM_NAME_LEN characters long;
pl_cam_get_name then fills that string with an appropriate null-terminated
string. Cam_name can be passed directly into the pl_cam_open function. It has
no other use, aside from providing a brief description of the camera.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_cam_get_total(0),pl_cam_open(0),pl_cam_close(0)

NOTES

This call reports the names of all cameras on the system, even if all the cameras
are not available. If the hardware is turned off, or if another user has a camera
open, the camera name is reported, but is not available.
Pl_cam_get_name returns a name, and pl_cam_open gives information on
availability of that camera. This function actually searches for all device drivers
on the system, without checking hardware. To build a complete list of every
camera on the system, it is necessary to cycle through all entries, as shown
below:
int total_cameras;
char cam_name[CAM_NAME_LEN];
…
pl_cam_get_total(&total_cameras );
for( I=0; I
(&pFrame)))return -1;
if(!pl_exp_unravel(hCam, 0, pFrame, 2, r,
pUnraveledData)) return -1;
if(!pl_exp_unlock_oldest_frame(hCam)) return -1;
--numFrames;
}
}
while( numFrames );

88

PVCAM Manual

Version 2.7

PVCAM

Class 3: Data Acquisition

NAME

pl_io_clear_script_control - Clears the current setup for control of
the available I/O lines within a camera script.

SYNOPSIS

rs_bool
pl_io_clear_script_control(int16 hcam)

DESCRIPTION

This function allows the application program to clear the current setup for
control of the available I/O lines within the script. This allows the user to enter a
new setup for these lines.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_io_script_control(3)

NOTES

pl_io_clear_script_control(3)

Chapter 6: Data Acquisition (Class 3)

89

PVCAM

Class 3: Data Acquisition

pl_io_script_control(3)

NAME

pl_io_script_control - Defines control of an I/O line from within a
camera script.

SYNOPSIS

rs_bool
pl_io_script_control(int16 hcam, uns16 addr, flt64 state,
uns32 location)

DESCRIPTION

This function allows the application program to define control of the available
I/O lines from within a script. This allows for more precise control of external
devices. For example, the application could request that a linear stage be indexed
immediately after integration, instead of waiting until after the data is read out,
the shutter is closed, etc. addr specifies which I/O address to control. state
specifies the desired setting for the address being controlled.
state has different meanings depending on the I/O type:
IO_TYPE_TTL

The bit pattern written to this address.

IO_TYPE_DAC

The value of the desired analog output written to the DAC
at this address.

location can be set to the following values:
SCR_PRE_OPEN SHTR

SCR_POST_OPEN_SHTR

SCR_PRE_FLASH

SCR_POST_FLASH

SCR_PRE_INTEGRATE

SCR_POST_INTEGRATE

SCR_PRE_READOUT

SCR_POST_READOUT

SCR_PRE_CLOSE_SHTR

SCR_POST_CLOSE_SHTR

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_io_clear_script_control(3)

NOTES

90

PVCAM Manual

Version 2.7

Class 3 Parameter IDs
Note: Camera Dependent indicates that this parameter or function is not available to all
Roper Scientific cameras. If a parameter or function is marked Camera Dependent, an
ATTR_AVAIL should be called to see if the camera supports it.
Class 3 Parameter ID

Description

PARAM_BOF_EOF_CLR

Clears the BOF-EOF count when a pl_set_param is
performed. This is a write-only parameter.

Camera Dependent

Datatype: rs_bool

PARAM_BOF_EOF_COUNT

Returns the Begin-Of-Frame and/or End-Of-Frame
count. BOF_EOF counting is enabled and configured
with PARAM_BOF_EOF_ENABLE.

Camera Dependent

Datatype: uns32
PARAM_BOF_EOF_ENABLE

Camera Dependent

Enables and configures the BOF_EOF interrupts.
Possible values are:
NO_FRAME_IRQS
BEGIN_FRAME_IRQS
END_FRAME_IRQS
BEGIN_END_FRAME_IRQS

Datatype: enum
PARAM_CIRC_BUFFER

Tests to see if the hardware/software can perform
circular buffer. When a TRUE is returned, the circular
buffer function can be used.
Datatype: rs_bool

PARAM_EXP_MIN_TIME

Gets the minimum effective exposure time that can be
set for the camera. For example, the exposure time
may be limited by the required overhead for shifting the
data through the array. This minimum time will be a
floating point value, in seconds. Note that the
minimum exposure time returned by this function will
be greater than zero; any camera can provide a
minimum exposure time of zero.
Datatype: flt64

PARAM_EXP_RES

Gets the resolution for the current resolution index, as
described for PARAM_EXP_RES_INDEX. This value is
an enumerated type, representing the resolution.
Possible values are :
EXP_RES_ONE_MILLISEC
EXP_RES_ONE_MICROSEC
EXP_RES_ONE_SEC

Datatype: enum

Chapter 6: Data Acquisition (Class 3)
Class 3 Parameter ID

PARAM_EXP_RES_INDEX

91

Description

Gets and sets the index into the exposure resolution
table for the camera. The table contains the resolutions
supported by the camera. The value at this index
(PARAM_EXP_RES) is an enumerated type as given by
PARAM_EXP_RES. The number of supported resolutions
can be obtained by using the ATTR_MIN and
ATTR_MAX attributes with the
PARAM_EXP_RES_INDEX parameter.
Datatype: uns16

PARAM_EXP_TIME

This is used to examine and change the exposure time
in VARIABLE_TIMED_MODE.
Datatype: uns16

PARAM_HW_AUTOSTOP

Camera Dependent

Sets the number of frames to acquire synchronously
into a register for PI brand cameras. At the data
acquisition, the hardware counts the number of frames
transferred, then stops the acquisition when it reaches
the count set with PARAM_HW_AUTOSTOP. The
maximum number the application can set is 254. If an
application needs more than 254, it must set it to
ZERO, i.e., a continuous acquisition and issue the
STOP command manually to halt the acquisition. For
focusing mode, an application should set this parameter
to ZERO.
Datatype: int16

92

PVCAM Manual

This page intentionally left blank.

Version 2.7

Chapter 7:
Buffer Manipulation (Class 4)
Introduction
Class 4 places the following constraints on data stored in buffers:
•

All exposures in a buffer must have the same set of images (the size, position, and binning
must match).

•

All data in a buffer must be at the same bit depth (16-bit signed, 16-bit unsigned, 32-bit
signed, etc.).

•

All data in an image is stored in a standard C two-dimensional array, with the second
subscript varying most rapidly.

In addition to the image data itself, a significant amount of auxiliary information is recorded in a
buffer. There is no facility for setting the information (besides setting the date), but you can read the
information with the get_ functions in the Buffer Information category below.

List of Available Class 4 Functions
The buffer manipulation functions are divided into three categories: Buffer Information, Allocation
and Saving, and Initialization.
Buffer Information

Allocation and Saving

pl_buf_get_bits

pl_buf_alloc

pl_buf_get_exp_date

pl_buf_free

pl_buf_get_exp_time
pl_buf_get_exp_total
pl_buf_get_img_bin

Initialization

pl_buf_get_img_handle

pl_buf_init

pl_buf_get_img_ofs

pl_buf_uninit

pl_buf_get_img_ptr
pl_buf_get_img_size
pl_buf_get_img_total
pl_buf_get_size
pl_buf_set_exp_date

93

94

PVCAM Manual

Version 2.7

New Constants
Several new constants are used to indicate the bit depth of image data. Since these are constants, not
system-dependent types, they are defined in pvcam.h:
PRECISION_INT8

This is 8-bit, signed data, in the range -128 to 127.

PRECISION_UNS8

This is 8-bit, unsigned data, in the range 0 to 255.

PRECISION_INT16

This is 16-bit, signed data, in the range -32768 to 32767.

PRECISION_UNS16

This is 16-bit, unsigned data, in the range 0 to 65535.

PRECISION_INT32

This is 32-bit, signed data, in the range -2,147,483,648 to
+2,147,483,647.

PRECISION_UNS32

This is 32-bit, unsigned data, in the range 0 to 4 GB-1.

Image Handles and Pointers
An image handle specifies the image. Like camera handles (hcam) and buffer handles (hbuf), an
image handle (himg) is an integer that is an index into a table kept by the PVCAM library. The
image handle, usually having the variable name himg, specifies the source buffer, exposure
number, and image number. If that buffer is freed, the handle becomes invalid, causing the table
entry to clear and be freed for new assignment. The handle for any image can be obtained through
pl_buf_get_img_handle.
A slightly different item is an image pointer. Internally, each image is organized as a flat twodimensional array with the following organization:
i0,j0 i0,j1 i0,j2 i0,j3 .... i0,j(j_size-1)i1,j0 i1, j1 i1,
j2 .... i(i_size-1),j(j_size-1)

In other words, this is a standard C two-dimensional array, with the second subscript varying most
rapidly. Immediately after creation, the j dimension is equivalent to the serial direction of the CCD,
while the i dimension is equivalent to the parallel direction. As processing may quickly blur this
relationship, the image buffers are presented with the more neutral i, j scheme instead of the
concepts serial and parallel.
The pl_buf_get_img_ptr function returns the address of element 0 of this array. Since
alignment depends on both the current operating system and the current bit depth, a void pointer is
returned. The user is responsible for the details of alignment and array organization.
In addition, no information is given concerning the data that follows the last element. This data may
be a following image, a following exposure, buffer header information, or operating system
memory. In other words, as in normal C memory usage, you are not prevented from writing past the
end of affected memory, but this may have unpredictable consequences.

Chapter 7: Buffer Manipulation (Class 4)

95

Class 4 Functions
PVCAM

Class 4: Buffer Manipulation

pl_buf_alloc(4)

NAME

pl_buf_alloc — allocates a buffer based on the current exposure setup.

SYNOPSIS

rs_bool
pl_buf_alloc(int16_ptr hbuf,int16 exp_total,int16
bit_depth,int16 rgn_total,rgn_const_ptr
rgn_array)

DESCRIPTION

This routine examines the region definition array pointed to by rgn_array to
determine the memory required to store the images from a single exposure. This
routine takes this array as a template for each exposure, and then allows the user
to specify the number of exposures in exp_total and the amount of storage per
pixel in bit_depth. bit_depth must use one of the following constants:
PRECISION_INT8, PRECISION_UNS8, PRECISION_INT16,
PRECISION_UNS16, PRECISION_INT32, and PRECISION_UNS32.

With this information, enough memory is allocated to hold the data from the set
of exposures. A handle to this buffer is passed back in hbuf.
RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_free(4),pl_buf_get_bits(4)

NOTES

When using this function, the definitions must match the region definitions in the
exposure setup, otherwise memory may be corrupted. If the region definition
changes, the buffer must be freed, and another buffer is allocated. Note that
bit_depth must be equal to one of the PRECISION_ constants as described at
the start of this section.

96

PVCAM Manual

Version 2.7

PVCAM

Class 4: Buffer Manipulation

pl_buf_free(4)

NAME

pl_buf_free — frees the memory and handle used by a buffer.

SYNOPSIS

rs_bool
pl_buf_free(int16 hbuf)

DESCRIPTION

This routine frees the memory associated with hbuf. The memory is released
and the buffer handle becomes invalid.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_copy(4),pl_buf_load(4)

NOTES

Although the memory is freed, garbage collection is another issue. Many small
buffers may fragment memory, even if most of them are later freed. Garbage
collection is a system-dependent operation.

Chapter 7: Buffer Manipulation (Class 4)

97

PVCAM

Class 4: Buffer Manipulation

pl_buf_get_bits(4)

NAME

pl_buf_get_bits — returns the buffer precision.

SYNOPSIS

rs_bool
pl_buf_get_bits(int16 hbuf,int16_ptr bit_depth)

DESCRIPTION

Every exposure and every image in a buffer must be at the same bit depth. This
function returns the depth for the images in hbuf. The parameter bit_depth
will be set to one of the following constants (defined in pvcam.h):
PRECISION_INT16
PRECISION_UNS16
PRECISION_INT32

Notice that these use the standard PVCAM types (int16, uns16, int32)
capitalized with the word PRECISION_ added.
RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_change_bits(4)

NOTES

98

PVCAM Manual

Version 2.7

PVCAM

Class 4: Buffer Manipulation

pl_buf_get_exp_date(4)

NAME

pl_buf_get_exp_date — returns when a picture was taken.

SYNOPSIS

rs_bool
pl_buf_get_exp_date(int16 hbuf,int16 exp_num,int16_ptr
year,uns8_ptr month,uns8_ptr
day,uns8_ptr hour,uns8_ptr min,
uns8_ptr sec,uns16_ptr msec)

DESCRIPTION

This returns the time when the specified exposure was decoded. The format is:
Year

current year (i.e. , 2002)

month

1-12 (January through December)

day

1-31 (day number in the current month)

hour

0-23 (24-hour format)

min

0-59

sec

0-59

msec

0-999 milliseconds

To get a time for the entire buffer, it is usually adequate to examine the time for
exp_num 0, but, depending on the sequence and timing parameters, successive
exposures may be taken hours or even days later. To examine the exact exposure
time for any successive exposure in the sequence, merely specify a different
exp_num. The exposure end time may be obtained by adding the exposure
duration, obtained from the pl_buf_get_exp_time function.
RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_set_exp_date(4),pl_buf_get_exp_time(4),
pl_do_exp(3)

KNOWN BUGS

If the host computer clock is inaccurate, the time recorded will also be
inaccurate. Although most clocks are not accurate to a millisecond, the recorded
time should help differentiate between the exposures in a fast sequence.
Impossible time values (all 0, for example) usually indicate that the start time
was never set.

Chapter 7: Buffer Manipulation (Class 4)

99

PVCAM

Class 4: Buffer Manipulation

NAME

pl_buf_get_exp_time — returns exposure duration.

SYNOPSIS

rs_bool
pl_buf_get_exp_time(int16 hbuf,int16 exp_num,uns32_ptr
exp_msec)

DESCRIPTION

This returns the exposure duration in milliseconds, in the parameter exp_msec.
In most cases, the timing for the first exposure is identical for all exposures. In
BULB_MODE, however, the exposure time is unknown and can be adjusted for
every exposure. This allows the actual time to be read for the individual
exposures, by specifying the exposure number in exp_num (which is zeroindexed).

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_get_exp_date(4)

NOTES

pl_buf_get_exp_time(4)

100

PVCAM Manual

Version 2.7

PVCAM

Class 4: Buffer Manipulation

NAME

pl_buf_get_exp_total — returns number of exposures in the buffer.

SYNOPSIS

rs_bool
pl_buf_get_exp_total(int16 hbuf,int16_ptr total_exps)

DESCRIPTION

This returns the number of exposures in the specified buffer, inside the variable
totl_exps. When referring to exposures by number, the first exposure will be
exposure number 0 (in typical C fashion). Therefore, the highest allowable
exposure number is totl_exps-1.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_get_img_total(4),pl_buf_append_exp(4)

NOTES

pl_buf_get_exp_total(4)

Chapter 7: Buffer Manipulation (Class 4)

101

PVCAM

Class 4: Buffer Manipulation

pl_buf_get_img_bin(4)

NAME

pl_buf_get_img_bin — returns binning factors for the image.

SYNOPSIS

rs_bool
pl_buf_get_img_bin(int16 himg,int16_ptr ibin,int16_ptr
jbin)

DESCRIPTION

Default binning is ibin=1, jbin=1 (no binning, 1 CCD pixel becomes one
image pixel). Binning is set when a buffer is created. This function reports on the
binning that was used during acquisition, for the image indicated by himg.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_get_img_size(4)

NOTES

It is assumed that the binning is identical for each exposure. In other words, each
image in an exposure has its own binning values, but this information is only
entered once; it is not repeated for every exposure in the buffer. The value for
exposure 0 will always be identical to the value for every other exposure.
This is usually a safe assumption, but a user might use functions like
pl_buf_get_img_ptr to insert images that fit, but were taken under radically
different conditions, including different binning. In such a case, the value
reported for binning will not change, but it will no longer be accurate. It then
becomes the user's responsibility to keep track of the binning.

102

PVCAM Manual

Version 2.7

PVCAM

Class 4: Buffer Manipulation

pl_buf_get_img_handle(4)

NAME

pl_buf_get_img_handle — obtains handle that refers to a single image in
buffer.

SYNOPSIS

rs_bool
pl_buf_get_img_handle(int16 hbuf,int16 exp_num,int16
img_num,int16_ptr himg )

DESCRIPTION

The image handle, himg, is a special handle that is used by the other image
functions and many higher analysis functions. The handle is a shorthand method
for referring to this image. It specifies the buffer handle, hbuf, the exposure
number, exp_num, and the image number img_num. In most cases, this is an
extremely fast call. It merely fills in table values, assigns a handle, and returns.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_get_img_ptr(4)

NOTES

A pointer to the data in this image is a completely different thing. This address is
given by the function pl_buf_get_img_ptr, which requires an image handle
as input. In general, the handle is useful to other PVCAM functions, while the
address is useful to programmers who require direct access to the pixel stream.
Many of the image definition factors: size, offset, and binning, are assumed to be
the same across all exposures in the buffer. In other words, the parameters
reported for img_num in exposure 0 are identical to the parameters reported for
img_num in every exposure.
Note that both exp_num and img_num are zero-indexed.

Chapter 7: Buffer Manipulation (Class 4)

103

PVCAM

Class 4: Buffer Manipulation

pl_buf_get_img_ofs(4)

NAME

pl_buf_get_img_ofs

SYNOPSIS

rs_bool
pl_buf_get_img_ofs(int16 himg,int16_ptr s_ofs,int16_ptr
p_ofs)

DESCRIPTION

Pixel coordinates in an image begin at 0,0, despite its original position on the
CCD. The offset allows that original position to be recreated. The original
coordinates are saved in the offset, so that:

— returns offset position of the image.

s_ofs = s_offset = s1(starting serial position)
p_ofs = p_offset = p1(starting parallel position)

Each exposure in a sequence shares the same setup, therefore only the image
number (specified through himg) affects the reported offset. The exposure
number (also specified through himg) has no effect.
RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO
NOTES

It is assumed that the offset is identical for each exposure. In other words, each
image has its own offset values, but this information is only entered once; it is
not repeated for every exposure in the buffer. The value reported for exposure 0
will always be identical to the value reported for every other exposure.
This is usually a safe assumption, but a user might use the image address and
direct access to insert images that fit, but were taken under radically different
conditions, including different offset. In such a case, the value reported for offset
will not change, but it will no longer be accurate. It then becomes the user's
responsibility to keep track of the offset.

104

PVCAM Manual

Version 2.7

PVCAM

Class 4: Buffer Manipulation

NAME

pl_buf_get_img_ptr — returns the address of an image in the data buffer.

SYNOPSIS

rs_bool
pl_buf_get_img_ptr(int16 himg,void_ptr_ptr img_addr)

DESCRIPTION

This requires an image handle as input. Given that input, this function returns the
address of the first data element inside that image. The user can then directly
manipulate or rewrite the data, as desired. It allows optimum efficiency for data
manipulation, while still staying inside the PVCAM image buffer structure. The
address is returned in img_addr, which is defined as a pointer to type void. A
void pointer must be used, since alignment may vary from buffer to buffer. The
user is responsible for knowing the word size and indexing conventions, based
on the bit_depth, i_size, and j_size of the image.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_get_img_handle(4)

NOTES

pl_buf_get_img_ptr(4)

Chapter 7: Buffer Manipulation (Class 4)

105

PVCAM

Class 4: Buffer Manipulation

pl_buf_get_img_size(4)

NAME

pl_buf_get_img_size — returns number of pixels in region.

SYNOPSIS

rs_bool
pl_buf_get_img_size(int16 himg,int16_ptr i_size, int16_ptr
j_size)

DESCRIPTION

This examines the image specified by the image handle himg, and determines
the i and j dimensions. The sizes are returned in I_size and j_size in pixels.
Since the pixel addresses begin with 0 (following typical C conventions), the
following relationship is true:
i_maximum_element_num = i_size - 1
j_maximum_element_num = j_size - 1

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_get_img_handle(4)

NOTES

This size is not necessarily the same as the number of pixels exposed on the
CCD. If the region was binned, the CCD area may have had many more pixels
than the final data set.
The set of images must be the same for every exposure in the buffer. For
example, image 3, exposure 0 must have the same size (and offset and binning)
as image 3, exposure 2. The sizes reported for the images in exposure 0 will
always be identical to the sizes reported for every other exposure.

106

PVCAM Manual

Version 2.7

PVCAM

Class 4: Buffer Manipulation

pl_buf_get_img_total(4)

NAME

pl_buf_get_img_total — returns number of images in each exposure.

SYNOPSIS

rs_bool
pl_buf_get_img_total(int16 hbuf,int16_ptr img_total)

DESCRIPTION

This returns the number of images in the first exposure. Every exposure in the
same buffer will have exactly this many images, no more, no less. When
referring to images by number, counting begins at 0 (in typical C fashion), so the
highest allowed image number is actually img_total-1.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_get_exp_total(4),pl_buf_get_img_ofs(4),
pl_buf_get_img_size(4)

NOTES

Every exposure in the buffer must have exactly this many images.

Chapter 7: Buffer Manipulation (Class 4)

107

PVCAM

Class 4: Buffer Manipulation

pl_buf_get_size(4)

NAME

pl_buf_get_size — returns size of buffer, in bytes.

SYNOPSIS

rs_bool
pl_buf_get_size(int16 hbuf,uns32_ptr buf_size)

DESCRIPTION

This returns the size of a buffer, in bytes, inside the variable buf_size. This
value is useful when memory or disk space is tight, before performing operations
such as pl_buf_copy.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO
NOTES

Buffer size can be estimated if you know the bit depth, number of exposures, and
the size of each image. This isn't completely accurate, though, since other
information is stored in a buffer: the exposure time and date, exposure duration,
size and offset values, etc.

108

PVCAM Manual

Version 2.7

PVCAM

Class 4: Buffer Manipulation

pl_buf_set_exp_date(4)

NAME

pl_buf_set_exp_date — (re)writes the time that this picture was taken.

SYNOPSIS

rs_bool
pl_buf_set_exp_date(int16 hbuf,int16 exp_num,int16
year,uns8 day,uns8 hour,uns8 min,uns8
sec,uns16 msec)

DESCRIPTION

This allows the time of any exposure to be recorded or rewritten. This should be
the time when the exposure started. The format is:
Year

current year (i.e. 1995)

month

1-12 (January through December)

day

1-31 (day number in the current month)

hour

0-23 (24-hour format)

min

0-59

sec

0-59

msec

0-999 milliseconds

To set a single time for the entire buffer, it is usually adequate to set the time for
exp_num 0. (Conversely, this is the time that will be examined when a single
reading is desired for an entire sequence.) But, depending on the sequence and
timing parameters, successive exposures may be taken hours or even days later.
To set the exact exposure date and time for any successive exposure in the
sequence, specify a different exp_num. The exposure end time may be obtained
by adding the exposure duration that is obtained from pl_buf_get_exp_time
function.
RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_get_exp_date(4),pl_buf_get_exp_time(4),
pl_exp_start_seq(3)

NOTES

In most cases, the system will be unable to obtain a highly accurate value of the
time. (The milliseconds may be particularly inaccurate.) All inputs are checked
for proper ranges on input (using the ranges shown above). The inputs will
generate appropriate errors if they are out of range. Any value is allowed for the
year.
For most exposures, the start of exposure is easy to determine. (Time is
measured immediately before a call to pl_exp_start_seq.) In some cases
(such as triggered exposures), determining the start time may be more difficult.
Depending on the communication link to the camera, pl_exp_check_status
may be a few seconds out of date.

Chapter 7: Buffer Manipulation (Class 4)

109

PVCAM

Class 4: Buffer Manipulation

pl_buf_init(4)

NAME

pl_buf_init — initializes the buffer functions.

SYNOPSIS

rs_bool
pl_buf_init(void)

DESCRIPTION

This initializes the pointers and memory needed to use the buffer functions.
Since the buffer functions depend on internal tables, these tables must be
allocated and initialized before any buffer functions can be used. This function
should be called soon after pl_pvcam_init.

RETURN VALUE

TRUE for success. FALSE for a failure. Failure sets pl_error_code. If the
initialization fails, the buffer functions may not be used.

SEE ALSO

pl_buf_uninit(4),pl_pvcam_init(0)

NOTES

Currently, buffers are only needed if the exposure includes multiple regions or a
complex sequence. In that case, the function pl_exp_finish_seq will decode
a pixel stream and put the output onto the buffer.
For simple exposures, it may be easier and more efficient to examine the output
directly, by using the pixel_stream array that was passed into
pl_exp_start_seq. If this is done, the buffer routines will never be needed. It
will save space and time if the buffer routines are never referred to and never
initialized.

110

PVCAM Manual

Version 2.7

PVCAM

Class 4: Buffer Manipulation

pl_buf_uninit(4)

NAME

pl_buf_uninit — frees and releases the buffer functions.

SYNOPSIS

rs_bool
pl_buf_uninit(void)

DESCRIPTION

This frees and releases all pointers and memory allocated by the buffer
initialization. It should be called before calling pl_pvcam_uninit. Once the
buffers are uninitialized, buffer functions may not be used until the buffer library
has been reinitialized.
It is safe to call this function redundantly. If the buffer functions were never
initialized, or, if they have already been freed, this does no harm.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_buf_init(4), pl_pvcam_uninit(0)

NOTES

Chapter 8:
Code Examples
Example 1: pl_get_param & pl_get_enum_param
/*
/*
/*
/*
/*

This example displays information for currently defined parameter IDs.
Note: depending on the camera system connected the results will change
This example is broken into 3 functions main calls DisplayParamIdInfo
which calls DisplayEnumInfo to display enumerated data types and
DisplayIntsFltsInfo to display non-enum data types.

#include
#include
#include
#include

*/
*/
*/
*/
*/



"master.h"
"pvcam.h"

/* Prototype functions */
static void DisplayIntsFltsInfo (int16 hcam, uns32 param_id);
static void DisplayEnumInfo (int16 hcam, uns32 param_id);
static void DisplayParamIdInfo (int16 hcam, uns32 param_id);
int main(int argc, char **argv)
{
char cam_name[CAM_NAME_LEN];
int16 hCam;

/* camera name
*/
/* camera handle */

/* Initialize the PVCam Library and Open the First Camera */
pl_pvcam_init();
pl_cam_get_name( 0, cam_name );
pl_cam_open(cam_name, &hCam, OPEN_EXCLUSIVE );
printf( "\nAnti_Blooming\n");
DisplayParamIdInfo (hCam, PARAM_ANTI_BLOOMING);
printf( "\nLogic Output\n");
DisplayParamIdInfo (hCam, PARAM_LOGIC_OUTPUT);
printf( "\nEdge Trigger\n");
DisplayParamIdInfo (hCam, PARAM_EDGE_TRIGGER);
printf( "\nIntensifier Gain\n");
DisplayParamIdInfo (hCam, PARAM_INTENSIFIER_GAIN);
printf( "\nGate Mode\n");
DisplayParamIdInfo (hCam, PARAM_SHTR_GATE_MODE);
printf( "\nMin Block\n");
DisplayParamIdInfo (hCam, PARAM_MIN_BLOCK);
printf( "\nNum Min Block\n");
DisplayParamIdInfo (hCam, PARAM_NUM_MIN_BLOCK);
printf( "\nStrips Per Clean\n");
DisplayParamIdInfo (hCam, PARAM_NUM_OF_STRIPS_PER_CLR);
printf( "\nReadout Port\n");
DisplayParamIdInfo (hCam, PARAM_READOUT_PORT);
printf( "\nController Alive\n");
DisplayParamIdInfo (hCam, PARAM_CONTROLLER_ALIVE);
printf( "\nReadout Time\n");
DisplayParamIdInfo (hCam, PARAM_READOUT_TIME);
printf( "\nCircular Buffer Support\n");
DisplayParamIdInfo (hCam, PARAM_CIRC_BUFFER);
pl_cam_close( hCam );
pl_pvcam_uninit();
}

return 0;

/* This will display information we can get from parameter id */
void DisplayParamIdInfo (int16 hcam, uns32 param_id)

111

112
{

*/

PVCAM Manual

rs_bool status, status2;
rs_bool avail_flag;
uns16 access;
uns16 type;

/*
/*
/*
/*

status of pvcam functions
*/
ATTR_AVAIL, param is available
*/
ATTR_ACCESS, param is read, write or exists */
ATTR_TYPE, param data type
*/

status = pl_get_param(hcam, param_id, ATTR_AVAIL, (void *)&avail_flag);
/* check for errors */
if (status) {
/* check to see if parameter id is supported by hardware or software */
if (avail_flag) {
/* we got a valid parameter, now get access writes and data type
status = pl_get_param(hcam, param_id, ATTR_ACCESS, (void *)&access);
status2 = pl_get_param(hcam, param_id, ATTR_TYPE, (void *) &type);
if (status && status2) {
if (access == ACC_EXIST_CHECK_ONLY) {
printf(" param id %x exists\n", param_id);
}
else if ((access == ACC_READ_ONLY) ||
(access == ACC_READ_WRITE)) {
/* now we can start displaying information
*/
/* handle enumerated types separate from other data */
if (type == TYPE_ENUM) {
DisplayEnumInfo(hcam, param_id);
}
else {/* take care of the rest of the data types */
DisplayIntsFltsInfo(hcam, param_id);
}
}
else {
printf(" error in access check for param_id %x\n",
param_id);
}
}
else { /* error occurred calling function */
printf( "functions failed pl_get_param, with error code %ld\n",
pl_error_code());
}

}
else { /* parameter id is not available with current setup */
printf( " parameter %x is not available with current hardware"
" or software setup\n", param_id);
}

}
else { /* error occurred calling function print out error code */
printf( "functions failed pl_get_param, with error code %ld\n",
pl_error_code());
}

}

Version 2.7

printf( "Press Enter to Continue..." );
getchar();
fflush( stdin );
/* end of function DisplayParamIdInfo */

/* This routine assumes the param id is an enumerated type,
it will print out all the enumerated values that are allowed
with the param id and display the associated ASCII text. */
static void DisplayEnumInfo (int16 hcam, uns32 param_id)
{
rs_bool status;
/* status of pvcam functions
*/
uns32 count, index;
/* counters for enumerated types
*/
char enumStr[100];
/* string for enum text
*/
uns32 enumValue;
/* enum value returned for index & param id */
/* get number of enumerated values */
status = pl_get_param(hcam, param_id, ATTR_COUNT, (void *)&count);
if (status) {
printf(" enum values for param id %x\n", param_id);
for (index=0; index < count; index++) {
/* get enum value and enum string */
status = pl_get_enum_param(hcam, param_id, index, &enumValue,
enumStr, 100);

Chapter 8: Code Examples
/* if everything alright print out the results */
if (status) {
printf(" index =%ld enum value = %ld, text = %s\n",
index, enumValue, enumStr);
}
else {
printf( "functions failed pl_get_enum_param, "
"with error code %ld\n", pl_error_code());
}

}

}
}
else {
printf( "functions failed pl_get_param, with error code %ld\n",
pl_error_code());
}
/* end of function DisplayEnumInfo */

/* This routine displays all the information associated with the parameter id
given. This routine assumes that the data is either uns8, uns16, uns32,
int8, int16, int32, or flt64 */
static void DisplayIntsFltsInfo (int16 hcam, uns32 param_id)
{
/* current, min&max, & default values of parameter id */
union {
flt64 dval;
uns32 ulval;
int32 lval;
uns16 usval;
int16 sval;
uns8 ubval;
int8 bval;
} currentVal, minVal, maxVal, defaultVal, incrementVal;
uns16 type;
/* data type of parameter id */
rs_bool status, status2, status3,
status4, status5;
/* status of pvcam functions */
/* get the data type of parameter id */
status = pl_get_param(hcam, param_id, ATTR_TYPE, (void *)&type);
/* get the default, current, min and max values for parameter id */
/* Note : since the data type for these depends on the parameter */
/* id you have to call pl_get_param with the correct data type
*/
/* passed for param_value.
*/
if (status) {
switch (type) {
case TYPE_INT8:
status = pl_get_param(hcam, param_id, ATTR_CURRENT,
(void *)¤tVal.bval);
status2 = pl_get_param(hcam, param_id, ATTR_DEFAULT,
(void *)&defaultVal.bval);
status3 = pl_get_param(hcam, param_id, ATTR_MAX,
(void *)&maxVal.bval);
status4 = pl_get_param(hcam, param_id, ATTR_MIN,
(void *)&minVal.bval);
status5 = pl_get_param(hcam, param_id, ATTR_INCREMENT,
(void *)&incrementVal.bval);
printf(" param id %x\n", param_id);
printf(" current value = %c\n", currentVal.bval);
printf(" default value = %c\n", defaultVal.bval);
printf(" min = %c, max = %c\n", minVal.bval, maxVal.bval);
printf(" increment = %c\n", incrementVal.bval);
break;
case TYPE_UNS8:
status = pl_get_param(hcam, param_id, ATTR_CURRENT,
(void *)¤tVal.ubval);
status2 = pl_get_param(hcam, param_id, ATTR_DEFAULT,
(void *)&defaultVal.ubval);
status3 = pl_get_param(hcam, param_id, ATTR_MAX,
(void *)&maxVal.ubval);
status4 = pl_get_param(hcam, param_id, ATTR_MIN,
(void *)&minVal.ubval);
status5 = pl_get_param(hcam, param_id, ATTR_INCREMENT,
(void *)&incrementVal.ubval);

113

114

PVCAM Manual

Version 2.7

printf(" param id %x\n", param_id);
printf(" current value = %uc\n", currentVal.ubval);
printf(" default value = %uc\n", defaultVal.ubval);
printf(" min = %uc, max = %uc\n", minVal.ubval, maxVal.ubval);
printf(" increment = %uc\n", incrementVal.ubval);
break;
case TYPE_INT16:
status = pl_get_param(hcam, param_id, ATTR_CURRENT,
(void *)¤tVal.sval);
status2 = pl_get_param(hcam, param_id, ATTR_DEFAULT,
(void *)&defaultVal.sval);
status3 = pl_get_param(hcam, param_id, ATTR_MAX,
(void *)&maxVal.sval);
status4 = pl_get_param(hcam, param_id, ATTR_MIN,
(void *)&minVal.sval);
status5 = pl_get_param(hcam, param_id, ATTR_INCREMENT,
(void *)&incrementVal.sval);
printf(" param id %x\n", param_id);
printf(" current value = %i\n", currentVal.sval);
printf(" default value = %i\n", defaultVal.sval);
printf(" min = %i, max = %i\n", minVal.sval, maxVal.sval);
printf(" increment = %i\n", incrementVal.sval);
break;
case TYPE_UNS16:
status = pl_get_param(hcam, param_id, ATTR_CURRENT,
(void *)¤tVal.usval);
status2 = pl_get_param(hcam, param_id, ATTR_DEFAULT,
(void *)&defaultVal.usval);
status3 = pl_get_param(hcam, param_id, ATTR_MAX,
(void *)&maxVal.usval);
status4 = pl_get_param(hcam, param_id, ATTR_MIN,
(void *)&minVal.usval);
status5 = pl_get_param(hcam, param_id, ATTR_INCREMENT,
(void *)&incrementVal.usval);
printf(" param id %x\n", param_id);
printf(" current value = %u\n", currentVal.usval);
printf(" default value = %u\n", defaultVal.usval);
printf(" min = %uh, max = %u\n", minVal.usval, maxVal.usval);
printf(" increment = %u\n", incrementVal.usval);
break;
case TYPE_INT32:
status = pl_get_param(hcam, param_id, ATTR_CURRENT,
(void *)¤tVal.lval);
status2 = pl_get_param(hcam, param_id, ATTR_DEFAULT,
(void *)&defaultVal.lval);
status3 = pl_get_param(hcam, param_id, ATTR_MAX,
(void *)&maxVal.lval);
status4 = pl_get_param(hcam, param_id, ATTR_MIN,
(void *)&minVal.lval);
status5 = pl_get_param(hcam, param_id, ATTR_INCREMENT,
(void *)&incrementVal.lval);
printf(" param id %x\n", param_id);
printf(" current value = %ld\n", currentVal.lval);
printf(" default value = %ld\n", defaultVal.lval);
printf(" min = %ld, max = %ld\n", minVal.lval, maxVal.lval);
printf(" increment = %ld\n", incrementVal.lval);
break;
case TYPE_UNS32:
status = pl_get_param(hcam, param_id, ATTR_CURRENT,
(void *)¤tVal.ulval);
status2 = pl_get_param(hcam, param_id, ATTR_DEFAULT,
(void *)&defaultVal.ulval);
status3 = pl_get_param(hcam, param_id, ATTR_MAX,
(void *)&maxVal.ulval);
status4 = pl_get_param(hcam, param_id, ATTR_MIN,
(void *)&minVal.ulval);
status5 = pl_get_param(hcam, param_id, ATTR_INCREMENT,
(void *)&incrementVal.ulval);
printf(" param id %x\n", param_id);
printf(" current value = %ld\n", currentVal.ulval);
printf(" default value = %ld\n", defaultVal.ulval);
printf(" min = %ld, max = %ld\n", minVal.ulval, maxVal.ulval);

Chapter 8: Code Examples

115

printf(" increment = %ld\n", incrementVal.ulval);
break;
case TYPE_FLT64:
status = pl_get_param(hcam, param_id, ATTR_CURRENT,
(void *)¤tVal.dval);
status2 = pl_get_param(hcam, param_id, ATTR_DEFAULT,
(void *)&defaultVal.dval);
status3 = pl_get_param(hcam, param_id, ATTR_MAX,
(void *)&maxVal.dval);
status4 = pl_get_param(hcam, param_id, ATTR_MIN,
(void *)&minVal.dval);
status5 = pl_get_param(hcam, param_id, ATTR_INCREMENT,
(void *)&incrementVal.dval);
printf(" param id %x\n", param_id);
printf(" current value = %g\n", currentVal.dval);
printf(" default value = %g\n", defaultVal.dval);
printf(" min = %g, max = %g\n", minVal.dval, maxVal.dval);
printf(" increment = %g\n", incrementVal.dval);
break;
default:
printf(" data type not supported in this functions\n");
break;

}
if (!status || !status2 || !status3 || !status4 || !status5) {
printf( "functions failed pl_get_param, with error code %ld\n",
pl_error_code());
}

}

}
else {
printf( "functions failed pl_get_param, with error code %ld\n",
pl_error_code());
}

Example 2: pl_set_param
This example assumes data type to set is int16. This routine does do the error checks to make sure
you can write to the param and that its param id is an int16.
#include
#include
#include
#include



"master.h"
"pvcam.h"

/* Prototype functions */
static rs_bool SetParamExample (int16 hcam, uns32 param_id, int16 value);
int main(int argc, char **argv)
{
char cam_name[CAM_NAME_LEN];
int16 hCam;

/* camera name
*/
/* camera handle */

/* Initialize the PVCam Library and Open the First Camera */
pl_pvcam_init();
pl_cam_get_name( 0, cam_name );
pl_cam_open(cam_name, &hCam, OPEN_EXCLUSIVE );
/* Change the min skip block and number of min blocks to 2 and 100 */
SetParamExample(hCam, PARAM_MIN_BLOCK, 2);
SetParamExample(hCam, PARAM_NUM_MIN_BLOCK, 100);
pl_cam_close( hCam );
pl_pvcam_uninit();
}

return 0;

rs_bool SetParamExample (int16 hcam, uns32 param_id, int16 value)

116
{

PVCAM Manual

rs_bool status;
rs_bool avail_flag;
uns16 access;
uns16 type;

/*
/*
/*
/*

Version 2.7

status of pvcam functions
*/
ATTR_AVAIL, param is available
*/
ATTR_ACCESS, param is read, write or exists */
ATTR_TYPE, param data type
*/

status = pl_get_param(hcam, param_id, ATTR_AVAIL, (void *)&avail_flag);
/* check for errors */
if (status) {
/* check to see if parameter id is supported by hardware or software */
if (avail_flag) {
/* we got a valid parameter, now get access rights and data type */
status = pl_get_param(hcam, param_id, ATTR_ACCESS, (void *)&access);
if (status) {
if (access == ACC_EXIST_CHECK_ONLY) {
printf(" error param id %x is an exists check, "
"and not writable\n", param_id);
}
else if (access == ACC_READ_ONLY) {
printf(" error param id %x is a readonly variable, "
"and not writeable\n", param_id);
}
else if (access == ACC_READ_WRITE) {
/* we can set it, let's be safe and check to make sure
it is the right data type */
status = pl_get_param(hcam, param_id, ATTR_TYPE,
(void *) &type);
if (status) {
if (type == TYPE_INT16) {
/* OK lets write to it */
pl_set_param(hcam, param_id, (void *)&value);
printf( "param %x set to %i\n", param_id, value );
}
else {
printf( "data type mismatch for param_id "
"%x\n", param_id );
status = FALSE;
}
}
else {
printf( "functions failed pl_get_param, with "
"error code %ld\n", pl_error_code());
}
}
else {
printf(" error in access check for param_id "
"%x\n", param_id);
}
}
else { /* error occurred calling function */
printf( "functions failed pl_get_param, with error code %ld\n",
pl_error_code());
}
}
else { /* parameter id is not available with current setup */
printf(" parameter %x is not available with current hardware or "
"software setup\n", param_id);
}

}
else { /* error occurred calling function; print out error code */
printf( "functions failed pl_get_param, with error code %ld\n",
pl_error_code());
}
}

return(status);

Chapter 8: Code Examples

117

Example 3: Circular Buffer
Latest Frame Mode (FOCUS)
The following is an example of a circular buffer with the latest frame mode set. The example takes
the proper steps to set the camera up beforehand. (i.e., pl_cam_open, etc. and that pl_get_param
with parameter id PARAM_CIRC_BUFFER was used to verify that the system could perform circular
buffer operations) The following code will return the latest frame in the buffer.
#include
#include
#include
#include



"master.h"
"pvcam.h"

static void FocusContinuous( int16 hCam );
int main(int argc, char **argv)
{
char cam_name[CAM_NAME_LEN];
int16 hCam;
rs_bool avail_flag;

/* camera name
*/
/* camera handle
*/
/* ATTR_AVAIL, param is available */

/* Initialize the PVCam Library and Open the First Camera */
pl_pvcam_init();
pl_cam_get_name( 0, cam_name );
pl_cam_open(cam_name, &hCam, OPEN_EXCLUSIVE );
/* check for circular buffer support */
if( pl_get_param( hCam, PARAM_CIRC_BUFFER, ATTR_AVAIL, &avail_flag ) &&
avail_flag )
FocusContinuous( hCam );
else
printf( "circular buffers not supported\n" );
pl_cam_close( hCam );
pl_pvcam_uninit();
}

return 0;

void FocusContinuous( int16 hCam )
{
rgn_type region = { 0, 511, 1, 0, 511, 1 };
uns32 buffer_size, frame_size;
uns16 *buffer;
int16 status;
uns32 not_needed;
void_ptr address;
uns16 numberframes = 5;
/* Init a sequence set the region, exposure mode and exposure time */
pl_exp_init_seq();
pl_exp_setup_cont( hCam, 1, ®ion, TIMED_MODE, 100, &frame_size,
CIRC_OVERWRITE );
/* set up a circular buffer of 3 frames */
buffer_size = frame_size * 3;
buffer = (uns16*)malloc( buffer_size );
/* Start the acquisition */
printf( "Collecting %i Frames\n", numberframes );
pl_exp_start_cont(hCam, buffer, buffer_size );
/* ACQUISITION LOOP */
while( numberframes ) {
/* wait for data or error */
while( pl_exp_check_cont_status( hCam, &status, ¬_needed,
¬_needed ) &&

118

PVCAM Manual
(status != READOUT_COMPLETE && status != READOUT_FAILED) );
/* Check Error Codes */
if( status == READOUT_FAILED ) {
printf( "Data collection error: %i\n", pl_error_code() );
break;
}
if ( pl_exp_get_latest_frame( hCam, &address )) {
/* address now points to valid data */
printf( "Center Three Points: %i, %i, %i\n",
*((uns16*)address + frame_size/sizeof(uns16)/2 - 1),
*((uns16*)address + frame_size/sizeof(uns16)/2),
*((uns16*)address + frame_size/sizeof(uns16)/2 + 1) );
numberframes--;
printf( "Remaining Frames %i\n", numberframes );
}
} /* End while */
/* Stop the acquisition */
pl_exp_stop_cont(hCam,CCS_HALT);
/* Finish the sequence */
pl_exp_finish_seq( hCam, buffer, 0);
/*Uninit the sequence */
pl_exp_uninit_seq();

}

free( buffer );

Version 2.7

Chapter 8: Code Examples

119

Oldest Frame Mode (NFRAME)
The following is an example of a circular buffer with the oldest frame mode set. The example takes
the proper steps to set the camera up beforehand. (i.e., pl_cam_open, etc. and that pl_get_param
with parameter id PARAM_CIRC_BUFFER was used to verify that the system could perform circular
buffer operations) This code will return the frames in the order in which they arrived in the buffer,
without skipping a frame.
#include
#include
#include
#include



"master.h"
"pvcam.h"

static void AcquireContinuous( int16 hCam );
int main(int argc, char **argv)
{
char cam_name[CAM_NAME_LEN];
int16 hCam;
rs_bool avail_flag;

/* camera name
*/
/* camera handle
*/
/* ATTR_AVAIL, param is available */

/* Initialize the PVCam Library and Open the First Camera */
pl_pvcam_init();
pl_cam_get_name( 0, cam_name );
pl_cam_open(cam_name, &hCam, OPEN_EXCLUSIVE );
/* check for circular buffer support */
if( pl_get_param( hCam, PARAM_CIRC_BUFFER, ATTR_AVAIL, &avail_flag ) &&
avail_flag )
AcquireContinuous( hCam );
else
printf( "circular buffers not supported\n" );
pl_cam_close( hCam );
pl_pvcam_uninit();
}

return 0;

void AcquireContinuous( int16 hCam )
{
rgn_type region = { 0, 511, 1, 0, 511, 1 };
uns32 buffer_size, frame_size;
uns16 *buffer;
int16 status;
uns32 not_needed;
void_ptr address;
uns16 numberframes = 5;
/* Init a sequence set the region, exposure mode and exposure time */
pl_exp_init_seq();
pl_exp_setup_cont( hCam, 1, ®ion, TIMED_MODE, 100, &frame_size,
CIRC_NO_OVERWRITE );
/* set up a circular buffer of 3 frames */
buffer_size = frame_size * 3;
buffer = (uns16*)malloc( buffer_size );
/* Start the acquisition */
printf( "Collecting %i Frames\n", numberframes );
pl_exp_start_cont(hCam, buffer, buffer_size );
/* ACQUISITION LOOP */
while( numberframes ) {
/* wait for data or error */
while( pl_exp_check_cont_status( hCam, &status, ¬_needed,
¬_needed ) &&
(status != READOUT_COMPLETE && status != READOUT_FAILED) );

120

PVCAM Manual

/* Check Error Codes */
if( status == READOUT_FAILED ) {
printf( "Data collection error: %i\n", pl_error_code() );
break;
}
if ( pl_exp_get_oldest_frame( hCam, &address )) {
/* address now points to valid data */
printf( "Center Three Points: %i, %i, %i\n",
*((uns16*)address + frame_size/sizeof(uns16)/2 - 1),
*((uns16*)address + frame_size/sizeof(uns16)/2),
*((uns16*)address + frame_size/sizeof(uns16)/2 + 1) );
numberframes--;
printf( "Remaining Frames %i\n", numberframes );
pl_exp_unlock_oldest_frame( hCam );
}
} /* End while */
/* Stop the acquisition */
pl_exp_stop_cont(hCam,CCS_HALT);
/* Finish the sequence */
pl_exp_finish_seq( hCam, buffer, 0);
/*Uninit the sequence */
pl_exp_uninit_seq();
}

free( buffer );

Version 2.7

Chapter 8: Code Examples

121

Example 4: Standard Mode Acquisition
The following is a simple example of standard mode acquisitions from PVCAM with the minimum
set of functions for data acquisition. Note the example is hard-coded for a particular image size of
512 x 512; these normally should be variables.
#include
#include
#include
#include



"master.h"
"pvcam.h"

static void AcquireStandard( int16 hCam );
int main(int argc, char **argv)
{
char cam_name[CAM_NAME_LEN];
int16 hCam;

/* camera name
/* camera handle

*/
*/

/* Initialize the PVCam Library and Open the First Camera */
pl_pvcam_init();
pl_cam_get_name( 0, cam_name );
pl_cam_open(cam_name, &hCam, OPEN_EXCLUSIVE );
AcquireStandard( hCam );
pl_cam_close( hCam );
pl_pvcam_uninit();
}

return 0;

void AcquireStandard( int16 hCam )
{
rgn_type region = { 0, 511, 1, 0, 511, 1 };
uns32 size;
uns16 *frame;
int16 status;
uns32 not_needed;
uns16 numberframes = 5;
/* Init a sequence set the region, exposure mode and exposure time */
pl_exp_init_seq();
pl_exp_setup_seq( hCam, 1, 1, ®ion, TIMED_MODE, 100, &size );
frame = (uns16*)malloc( size );
/* Start the acquisition */
printf( "Collecting %i Frames\n", numberframes );
/* ACQUISITION LOOP */
while( numberframes ) {
pl_exp_start_seq(hCam, frame );
/* wait for data or error */
while( pl_exp_check_status( hCam, &status, ¬_needed ) &&
(status != READOUT_COMPLETE && status != READOUT_FAILED) );
/* Check Error Codes */
if( status == READOUT_FAILED ) {
printf( "Data collection error: %i\n", pl_error_code() );
break;
}
/* frame now contains valid data */
printf( "Center Three Points: %i, %i, %i\n",
frame[size/sizeof(uns16)/2 - 1],
frame[size/sizeof(uns16)/2],
frame[size/sizeof(uns16)/2 + 1] );

122

PVCAM Manual
numberframes--;
printf( "Remaining Frames %i\n", numberframes );
} /* End while */
/* Finish the sequence */
pl_exp_finish_seq( hCam, frame, 0);
/*Uninit the sequence */
pl_exp_uninit_seq();

}

free( frame );

Version 2.7

Appendix A:
Error Codes
All successful functions reset pl_error_code to 0, which produces the message "no error".
All unsuccessful functions return a numeric value, where that value corresponds to a number linked
to an error message. All of the PVCAM error numbers and their linked error messages are listed in
the table that follows. This table will be updated as new error messages are added.
Table 5. Error Codes
Error #

Error Message

Meaning

0

PVCAM_SUCCESS

No error

1

C0_UNKNOWN_ERROR

Unexpected, unanticipated, or undocumented

2

DDI_NOT_PV_DEVICE

This device driver is not a Roper device

3

DDI_BAD_DEV_NAME

No driver found with the specified name

4

DDI_DRIVER_IN_USE

This driver is already in use by another user

5

DDI_ALREADY_OPEN

This driver has already been opened

6

DDI_CANT_OPEN_DRIVER

The driver was found, but could not be opened

7

DDI_CANT_CLOSE_DRIVER

Driver is not currently open; it can't be closed

8

DDI_CLOSE_ERROR

An error occurred while trying to close the driver

9

DDI_ALREADY_ACTIVE

Camera is already taking data; finish or abort

10

DDI_ZERO_SEND_SIZE

Invalid request: transmit zero bytes

11

DDI_ZERO_RECV_SIZE

Invalid request: receive zero bytes

12

DDI_IOPORT_CONFLICT

2 cameras are using the same I/O port

13

DDI_BOARD_NOT_FOUND

Communications board is not at expected location

14

DDI_CABLE_DISCONNECTED

Camera electronics unit cable is not connected

15

DDI_MEM_ALLOC_FAILED

Device driver could not allocate needed memory

16

DDI_IRQID_CONFLICT

2 open cameras are using the same interrupt ID

17

DDI_DRV_CLOS_CLOSE_CAM

Driver not yet opened: pd_cam_close

18

DDI_DRV_CLOS_READ_BYTE

Driver not yet opened: pd_cam_write_read, read

19

DDI_DRV_CLOS_SEND_BYTE

Driver not yet opened: pd_cam_write_read, write

20

DDI_DRV_CLOS_GET_RETRY

Driver not yet opened: pd_driver_get_retries

21

DDI_DRV_CLOS_SET_RETRY

Driver not yet opened: pd_driver_set_retries

22

DDI_DRV_CLOS_GET_TIME

Driver not yet opened: pd_driver_get_timeout

23

DDI_DRV_CLOS_SET_TIME

Driver not yet opened: pd_driver_set_timeout

24

DDI_DRV_CLOS_INFO_LEN

Driver not yet opened: pd_driver_get_info_length

25

DDI_DRV_CLOS_INFO_DUMP

Driver not yet opened: pd_driver_get_info_dump

123

124

Error #

PVCAM Manual

Error Message

Version 2.7

Meaning

26

DDI_DRV_CLOS_DRV_VER

Driver not yet opened: pd_driver_get_ver

27

DDI_DRV_CLOS_IM_STATUS

Driver not open: pd_driver_get_image_data_status

28

DDI_DRV_CLOS_IM_ABORT

Driver not open: pd_driver_set_image_data_idle

29

DDI_DRV_CLOS_IM_ACTIVE

Driver not open: pd_driver_set_image_data_active

30

DDI_DRV_CLOS_IM_GRAN

Driver not open: pd_driver_get_image_data_gran

31

DDI_BAD_DEVH_CLOSE_CAM

Illegal device handle: pd_cam_close

32

DDI_BAD_DEVH_READ_BYTE

Illegal device handle: pd_cam_write_read, read

33

DDI_BAD_DEVH_SEND_BYTE

Illegal device handle: pd_cam_write_read, write

34

DDI_BAD_DEVH_GET_RETRY

Illegal device handle: pd_driver_get_retries

35

DDI_BAD_DEVH_SET_RETRY

Illegal device handle: pd_driver_set_retries

36

DDI_BAD_DEVH_GET_TIME

Illegal device handle: pd_driver_get_timeout

37

DDI_BAD_DEVH_SET_TIME

Illegal device handle: pd_driver_set_timeout

38

DDI_BAD_DEVH_INFO_LEN

Illegal device handle: pd_driver_get_info_length

39

DDI_BAD_DEVH_INFO_DUMP

Illegal device handle: pd_driver_get_info_dump

40

DDI_BAD_DEVH_DRV_VER

Illegal device handle: pd_driver_get_ver

41

DDI_BAD_DEVH_IM_STATUS

Bad dev handle: pd_driver_get_image_data_status

42

DDI_BAD_DEVH_IM_ABORT

Bad dev handle: pd_driver_set_image_data_idle

43

DDI_BAD_DEVH_IM_ACTIVE

Bad dev handle: pd_driver_set_image_data_active

44

DDI_BAD_DEVH_IM_GRAN

Bad dev handle: pd_driver_get_image_data_gran

45

DDI_SYS_ERR_DEV_DRIVER

System error while accessing the device driver

46

DDI_SYS_ERR_INIT

System error in pd_ddi_init

47

DDI_SYS_ERR_UNINIT

System error in pd_ddi_uninit

48

DDI_SYS_ERR_TOTL_CAMS

System error in pd_ddi_get_total_cams

49

DDI_SYS_ERR_CAM_NAME

System error in pd_ddi_get_all_cam_names

50

DDI_SYS_ERR_OPEN_CAM

System error in pd_cam_open

51

DDI_SYS_ERR_CLOSE_CAM

System error in pd_cam_close

52

DDI_SYS_ERR_READ_BYTE

System error in pd_cam_write_read, read

53

DDI_SYS_ERR_SEND_BYTE

System error in pd_cam_write_read, write

54

DDI_SYS_ERR_GET_RETRY

System error in pd_driver_get_retries

55

DDI_SYS_ERR_SET_RETRY

System error in pd_driver_set_retries

56

DDI_SYS_ERR_GET_TIME

System error in pd_driver_get_timeout

57

DDI_SYS_ERR_SET_TIME

System error in pd_driver_set_timeout

58

DDI_SYS_ERR_INFO_LEN

System error in pd_driver_get_info_length

59

DDI_SYS_ERR_INFO_DUMP

System error in pd_driver_get_info_dump

60

DDI_SYS_ERR_DRV_VER

System error in pd_driver_get_ver

Appendix A: Error Codes
Error #

Error Message

125
Meaning

61

DDI_SYS_ERR_IM_STATUS

System error in pd_driver_get_image_data_status

62

DDI_SYS_ERR_IM_ABORT

System error in pd_driver_set_image_data_idle

63

DDI_SYS_ERR_IM_ACTIVE

System error in pd_driver_set_image_data_active

64

DDI_SYS_ERR_IM_GRAN

System error in pd_driver_get_image_data_gran

65

DDI_UNKNOWN_DEV_DRIVER

Unknown error while accessing the device driver

66

DDI_UNKNOWN_INIT

Unknown error in pd_ddi_init

67

DDI_UNKNOWN_UNINIT

Unknown error in pd_ddi_uninit

68

DDI_UNKNOWN_TOTL_CAMS

Unknown error in pd_ddi_get_total_cams

69

DDI_UNKNOWN_CAM_NAME

Unknown error in pd_ddi_get_all_cam_names

70

DDI_UNKNOWN_OPEN_CAM

Unknown error in pd_cam_open

71

DDI_UNKNOWN_CLOSE_CAM

Unknown error in pd_cam_close

72

DDI_UNKNOWN_READ_BYTE

Unknown error in pd_cam_write_read, read

73

DDI_UNKNOWN_SEND_BYTE

Unknown error in pd_cam_write_read,write

74

DDI_UNKNOWN_GET_RETRY

Unknown error in pd_driver_get_retries

75

DDI_UNKNOWN_SET_RETRY

Unknown error in pd_driver_set_retries

76

DDI_UNKNOWN_GET_TIME

Unknown error in pd_driver_get_timeout

77

DDI_UNKNOWN_SET_TIME

Unknown error in pd_driver_set_timeout

78

DDI_UNKNOWN_INFO_LEN

Unknown error in pd_driver_get_info_length

79

DDI_UNKNOWN_INFO_DUMP

Unknown error in pd_driver_get_info_dump

80

DDI_UNKNOWN_DRV_VER

Unknown error in pd_driver_get_ver

81

DDI_UNKNOWN_IM_STATUS

Unknown error in pd_driver_get_image_data_status

82

DDI_UNKNOWN_IM_ABORT

Unknown error in pd_driver_set_image_data_idle

83

DDI_UNKNOWN_IM_ACTIVE

Unknown error in pd_driver_set_image_data_active

84

DDI_UNKNOWN_IM_GRAN

Unknown error in pd_driver_get_image_data_gran

85

DDI_SCSI_NOT_PV_CAMERA

This SCSI device is not a Tucson camera

86

DDI_SCSI_NO_PROTOCOL

SCSI protocol breakdown: no device or termination

87

DDI_SCSI_NO_ARBITRATE

SCSI arbitration failure: the bus is busy

88

DDI_SCSI_BAD_XFER

SCSI bad instruction in transfer instruction bloc

89

DDI_SCSI_PHASE_ERROR

SCSI phase error: host & camera disagree on type

90

DDI_SCSI_DATA_ERROR

SCSI data comparison error verifying transfer

91

DDI_SCSI_MGR_BUSY

SCSI manager is busy with another operation

92

DDI_SCSI_SEQUENCE_ERR

SCSI sequencing error

93

DDI_SCSI_BUS_TIMEOUT

SCSI bus timeout waiting for data transfer

94

DDI_SCSI_COMPLETE_ERR

SCSI completion error

95

DDI_SCSI_INTERNAL_ERR

SCSI device indicates an internal error

126

Error #

PVCAM Manual

Error Message

Version 2.7

Meaning

96

DDI_XM_SNDOK

XMODEM

97

DDI_XM_NOSOH

XMODEM

98

DDI_XM_OVERFLOW

XMODEM

99

DDI_XM_RCVOK

XMODEM

100

DDI_XM_RCVCAN

XMODEM

101

DDI_XM_NOACK

XMODEM no ACKnowledge signal received

102

DDI_XM_LASTACK

XMODEM

103

DDI_XM_SNDACK

XMODEM

104

DDI_XM_SNDCAN

XMODEM

105

DDI_XM_MSGEND

XMODEM

106

DDI_XM_BADCKV

XMODEM

107

DDI_XM_BADSOH

XMODEM

108

DDI_XM_NODATA

XMODEM

109

DDI_XM_BADPAK

XMODEM

110

DDI_XM_PAKNUM

XMODEM

111

DDI_XM_PAKSEQ

XMODEM

112

DDI_XM_NOSYNC

XMODEM no SYNC character seen

113

DDI_XM_SYNCTOUT

XMODEM timout while waiting for SYNC
character

114

DDI_XM_XMITLOCK

XMODEM transmit ... ?

115

DDI_XM_BADCMD

XMODEM bad command

116

C0_INVALID_HANDLE

This is not the handle of an open camera

117

C0_CAM_ALREADY_OPEN

This user has already opened this camera

118

C0_CAM_NEVER_OPENED

Camera was not opened, so this task can't be done

119

C0_CAM_RESERVED

The camera is in use by another user

120

C0_DRIVER_OUT_OF_MEM

Driver or DDI ran out of (specialized?) memory

121

C0_CANT_READ_TIMEOUT

System couldn't read the timeout for this driver

122

C0_CANT_WRIT_TIMEOUT

System couldn't set the timeout for this driver

123

C0_CANT_READ_RETRIES

System couldn't read the retries for this driver

124

C0_CANT_WRIT_RETRIES

System couldn't set the retries for this driver

125

C0_CAM_TIMEOUT

No response at all from the camera

126

C0_CAM_TIMEOUT_NOISE

Timeout, but some response (noisy line?)

127

C0_RETRIES_EXCEEDED

Not a timeout, but retries didn't work (noisy?)

128

C0_CAM_NAME_OUT_OF_RNG

The number must be in the range
1<=num<=totl_cams

129

C0_CAM_NAME_NOT_FOUND

This is not a valid name for opening the camera

Appendix A: Error Codes
Error #

Error Message

127
Meaning

130

C0_PACKET_TOO_LARGE

A send or read request used a packet >32768 bytes

131

C0_STATUS_TOO_LARGE

The status info returned contained too many bytes

132

C0_STATUS_TOO_SMALL

The status info returned contained too few bytes

133

C0_NEED_POSITIVE_VAL

The input value must be greater than zero

134

C0_NEED_ZERO_OR_MORE

The input value must be zero or above

135

C0_NULL_POINTER

Input pointer is null, it must be a legal address

136

C0_STSF_EU_CPU

Subsystem fault: electronics unit main CPU

137

C0_STSF_EU_SYS_INTEG

Subsystem fault: EU internal communications

138

C0_STSF_EU_TO_HOST

Subsystem fault: EU-to-host cables

139

C0_STSF_POWER_SUPPLY

Subsystem fault: power supply voltage error

140

C0_STSF_CCS_CHIP

Subsystem fault: CCS chip or memory

141

C0_STSF_CCS_SCRIPT_MEM

Subsystem fault: CCS script memory

142

C0_STSF_CCS_PORTS

Subsystem fault: CCS ports

143

C0_STSF_DISPLAY

Subsystem fault: EU front panel display

144

C0_STSF_SHUTTER_DRIVE

Subsystem fault: shutter driver circuit

145

C0_STSF_TEMP_CONT

Subsystem fault: temperature control circuit

146

C0_STSF_PAR_CLOCK_DRV

Subsystem fault: parallel clock driver

147

C0_STSF_CH_CABLES

Subsystem fault: camera head cables

148

C0_STSF_CH_CPU

Subsystem fault: camera head CPU board

149

C0_STSF_CH_CLOCK_BRD

Subsystem fault: camera head clock board

150

C0_STSF_CH_POWER_BRD

Subsystem fault: camera head power board

151

C0_STSF_CH_VID_BRD_1

Subsystem fault: camera head video board #1

152

C0_STSF_CH_VID_BRD_2

Subsystem fault: camera head video board #2

153

C0_STSF_CH_VID_BRD_3

Subsystem fault: camera head video board #3

154

C0_STSF_CH_VID_BRD_4

Subsystem fault: camera head video board #4

155

C0_STSF_ADC_BOARD_1

Subsystem fault: A/D board #1

156

C0_STSF_ADC_BOARD_2

Subsystem fault: A/D board #2

157

C0_STSF_ADC_BOARD_3

Subsystem fault: A/D board #3

158

C0_STSF_ADC_BOARD_4

Subsystem fault: A/D board #4

159

C0_STSF_OPTION_CARD_1

Subsystem fault: option card #1

160

C0_STSF_OPTION_CARD_2

Subsystem fault: option card #2

161

C0_STSF_OPTION_CARD_3

Subsystem fault: option card #3

162

C0_STSF_OPTION_CARD_4

Subsystem fault: option card #4

163

C0_NO_IMG_DATA

Can't collect data: expected data is zero bytes

164

C0_CCL_SCRIPT_INVALID

Can't collect data: CCS script is invalid

128

Error #

PVCAM Manual

Error Message

Version 2.7

Meaning

165

C0_EXP_FIFO_OVERFLOW

AIA input buffer has overflowed

166

C0_EXP_NO_ACK

Camera didn't acknowledge request for image data

167

C0_EXP_XFER_ERR

Last data transfer from the camera was garbled

168

C0_EXP_EXTRA_DATA

Finished data transfer, but extra data exists

169

C0_EXP_MISSING_DATA

Finished data transfer, some data was missing

170

C0_OPEN_MODE_UNAVAIL

Camera may not be opened in the mode specified

171

C0_WRONG_READ_CLASS

Read operations require the HOST_COMMANDS
class

172

C0_WRITE_BYTES_TOO_SML

Command sent to camera must be at least 1 byte

173

C0_WRITE_BYTES_TOO_LRG

Cannot send over 32768 bytes in one transaction

174

C0_READ_BYTES_TOO_SML

A read transaction must transfer at least 1 byte

175

C0_READ_BYTES_TOO_LRG

Cannot read over 32768 bytes in one transaction

176

C0_WRONG_READ_CMD

'read' command is improperly formatted

177

DDI_DRV_CLOS_GET_PIXTIME

Driver not yet opened: pd_driver_get_pixtime

178

DDI_SYS_ERR_GET_PIXTIME

System error in pd_driver_get_pixtime

179

DDI_BAD_DEVH_GET_PIXTIME

Bad dev handle: pd_driver_get_pixtime

180

DDI_UNKNOWN_GET_PIXTIME

Unknown error in pd_driver_get_pixtime

181

DDI_CAM_XOFF

Camera can't communicate after sending an X-OFF

182

C0_BAD_CONTROLLER

Controller for camera not valid

183

C0_CNTRL_CREATE_FAILED

Could not create controller object for camera

184

C0_NO_CONT_STATUS

Status not available for continuous exposure

185

C0_STAT_CNTRL_ERROR

Controller error while requesting status

186

C0_STAT_CMD_ERROR

Command error while requesting status

187

C0_STAT_DMA_OVERRUN

DMA data overrun has occurred

188

C0_STAT_TAXI_VIOLATION

Violation in TAXI communication protocol occurred

189

C0_STAT_MAILBOX_ERROR

Mailbox error while requesting status

190

C0_STAT_CH0_ERROR

Channel 0 transfer not enabled

191

C0_STAT_CH1_ERROR

Channel 1 transfer not enabled

192

C0_CANT_READ_ID

System couldn't read the subsystem part numbers

193

C0_CANT_READ_NAME

System couldn't read the name for this subsystem

194

C0_DEV_HANDLE_UNAVAIL

Camera device handle unavailable

195

C0_PVCAM_NOT_INITED

Camera library not initialized

196

C0_NOT_INITIALIZED

The pg_decode_info structure is not initialized

1000

C01_START_ERROR

unknown error

2000

C2_UNKNOWN_ERROR

Unexpected, unanticipated, undocumented

Appendix A: Error Codes
Error #

Error Message

129
Meaning

2001

C2_PVCAM_ALREADY_INITED

Init_pvcam has been called twice without closing

2002

C2_PVCAM_NOT_INITED

The PVCAM library was never initialized

2003

C2_FAILED_TO_SET_VALUE

The camera did not accept the new setting

2004

C2_NEED_POSITIVE_VAL

The input value must be greater than zero

2005

C2_NEED_ZERO_OR_MORE

The input value must be zero or above

2006

C2_NULL_POINTER

Input pointer is null, it must be a legal address

2007

C2_FRAME_XFER_ILLEGAL

This CCD does not allow frame transfer operation

2008

C2_FRAME_XFER_REQUIRED

This CCD must be operated in frame transfer mode

2009

C2_MPP_MODE_ILLEGAL

This CCD does not allow mpp-mode clocking

2010

C2_MPP_MODE_REQUIRED

This CCD requires mpp-mode clocking

2011

C2_CLEAR_MODE_INVALID

Requested clear mode is not an allowed choice

2012

C2_SPEED_INVALID

No valid speeds between camera/electronics/host

2013

C2_SPEED_OUT_OF_RANGE

Selected a non-existant speed table entry

2014

C2_CANT_SET_ADC_OFFSET

Camera does not allow offset to be read or set

2015

C2_BAD_CONTROLLER

Controller for camera not valid

2016

C2_NOT_AVAILABLE

Parameter is not available for camera

2017

C2_FAILED_TO_GET_VALUE

The camera did not return the setting

2018

C2_PARAMETER_INVALID

The requested parameter is invalid

2019

C2_ATTRIBUTE_INVALID

The requested attribute is invalid

2020

C2_INDEX_OUT_OF_RANGE

The requested parameter index is out of range

2021

C2_NOT_INPUT

The requested I/O port is not an input port

2022

C2_IO_TYPE_INVALID

The requested I/O port type is not supported

2023

C2_ADDR_OUT_OF_RANGE

The I/O address is out of range

2024

C2_ACCESS_ATTR_INVALID

The I/O port returned access attribute is invalid

2025

C2_CANT_SET_PARAMETER

The requested parameter cannot be set

2026

C2_IO_DIRECTION_INVALID

The returned direction for the I/O port is invalid

2027

C2_NO_ALPHA_SER_NUM

Alphanumeric serial # unavailable for this camera

2028

C2_CANT_OVERSCAN

Camera does not allow overscanning the CCD

2029

C2_CANT_SET_GAIN_MULT

Camera does not allow setting the gain multiplier

3000

C3_INVALID_PIC_TRIGGER_MODE

Invalid PIC trigger mode

3001

C3_NO_COMMUNICATIONS_LINK

Bogus temp

3002

C3_INVALID_SCRIPT

CCL program is not loaded or is invalid

3003

C3_EXP_EXTRA_DATA

Extra data acquired during exposure

3004

C3_EXP_NO_DATA_ACQ

No data acquired during exposure

3005

C3_EXP_FIFO_OVERFLOW

FIFO overflow during exposure

130

Error #

PVCAM Manual

Error Message

Version 2.7

Meaning

3006

C3_EXP_NO_ACKNOWLEDGE

Camera did not acknowledge request during exp

3007

C3_EXP_TRANSFER_ERROR

Transfer error during exposure

3008

C3_EXP_UNKNOWN_STATE

Camera went into unknown state during exp

3009

C3_CANT_DECODE_IN_PROGRESS

Can't decode while readout is in progress

3010

C3_RGN_MAX_EXCEEDED

Trying to exceed the maximum # of regions

3011

C3_RGN_ILLEGAL_DEFN

Dimensions of region to be added is illegal

3012

C3_RGN_ILLEGAL_BINNING

Binning of region to be added is illegal

3013

C3_RGN_OUTSIDE_CCD_DIMENS

Region def extends beyond CCD dimensions

3014

C3_RGN_OVERLAP

Region to be added overlaps a previous region

3015

C3_RGN_INVALID_NUM

Invalid region number

3016

C3_RGN_NOT_FOUND

Region not found

3017

C3_STREAM_PTR_NOT_DEFINED

Pointer to pixel stream is not defined

3018

C3_GROUPS_PTR_NOT_DEFINED

Pointer to decode info structure undefined

3019

C3_NOT_INITIALIZED

pl_init_exp_seq() has not been called

3020

C3_FAILED_TO_SET_VALUE

The value can not be set in the camera

3021

C3_EVENT_NUMBER_INVALID

Frame count for generating event <= 0

3022

C3_EVENT_NOT_SUPPORTED

Specified event is not supported by the O.S.

3023

C3_BAD_CONTROLLER

Controller for camera not valid

3024

C3_EVENT_NOT_SET

Event was not set up

3025

C3_CNTRL_INIT_FAILED

Controller initialization failed

3026

C3_EXP_MODE_NOT_SUPPORTED

Exposure mode not supported by this camera

3027

C3_ILLEGAL_BUFFER_SIZE

Buffer must be integer-multiple of frame size

3028

C3_GET_FRAME_NOT_SUPPORTED

Camera cannot return the specified frame

3029

C3_FRAME_NOT_RETURNED

Specified frame could not be returned

3030

C3_FRAME_BAD_MODE

Frame could not be returned in current mode

3031

C3_NO_DRIVER_BUFFER

Camera does not provide a driver buffer

3032

C3_BUF_NOT_RETURNED

Pointer to buffer could not be returned

3033

C3_BUFFER_OVERRUN

Data Buffer is full no place to xfer data

3034

C3_TAXI_VIOLATION

Communication with device failed, link broken

3035

C3_EXP_RES_OUT_OF_RANGE

Exposure resolution index non-existent

3036

C3_NOT_AVAILABLE

Parameter is not available for camera

3037

C3_IO_PORT_INVALID

Specified I/O port is invalid

3038

C3_FAILED_TO_GET_VALUE

The camera did not return the setting

3039

C3_IO_STATE_OUT_OF_RANGE

Requested I/O state out of range for port

3040

C3_IO_LOCATION_INVALID

Specified script location is invalid

Appendix A: Error Codes
Error #

Error Message

131
Meaning

3041

C3_IO_NOT_OUTPUT

Specified I/O port is not an output port

3042

C3_EXP_XFER_ERR

Last data transfer from the camera was garbled

3043

C3_EXP_MISSING_DATA

Finished data transfer, some data was missing

3044

C3_STAT_CNTRL_ERROR

Controller error while requesting status

3045

C3_STAT_CMD_ERROR

Command error while requesting status

3046

C3_CAM_NEVER_OPENED

Camera was not opened, so this task can't be done

3047

C3_STAT_DMA_OVERRUN

DMA data overrun has occurred

3048

C3_STAT_TAXI_VIOLATION

Violation in TAXI communication protocol occurred

3049

C3_STAT_MAILBOX_ERROR

Mailbox error while requesting status

3050

C3_STAT_CH0_ERROR

Channel 0 transfer not enabled

3051

C3_STAT_CH1_ERROR

Channel 1 transfer not enabled

3052

C3_UNKNOWN_ERROR

Unexpected, unanticipated, undocumented

4000

C04_HBUF_OUTOFRANGE

HBUF is out of range

4001

C04_HIMG_OUTOFRANGE

HIMG is out of range

4002

C04_NO_FREE_BUFFER_HANDLES

No free buffer handles available

4003

C04_NO_FREE_IMAGE_HANDLES

No free image handles available

4004

C04_BUFFER_ENTRY_ALREADY_SET

Buffer entry is already set

4005

C04_BUFFER_ENTRY_ALREADY
_CLEARED

Buffer entry is already cleared

4006

C04_IMAGE_ENTRY_ALREADY_SET

Image entry is already set

4007

C04_IMAGE_ENTRY_ALREADY
_CLEARED

Image entry is already cleared

4008

C04_INVALID_IMAGE_HANDLE

Invalid image handle

4009

C04_INVALID_BUFFER_HANDLE

Invalid buffer handle

4010

C04_INVALID_BITDEPTH_VALUE

Bit depth must be enum PRECISION_...

4011

C04_INVALID_IMAGE_NUMBER

Invalid image number

4012

C04_INVALID_EXPOSURE_NUMBER

Invalid exposure number

4013

C04_INVALID_TIME

The time or date is out of range

4014

C04_INVALID_REGION

A region is out of range

14000

C14_UNKNOWN_ERROR

Unexpected, unanticipated, undocumented

14001

C14_CANT_READ_INI_FILE

Unable to read the current INI file. Please run
RSConfig.exe

29000

C29_UNKNOWN_ERROR

Unexpected, unanticipated, undocumented

29001

C29_BDEPTH_ILLEGAL

Bit depth must be enum PRECISION_...

29002

C29_BDEPTH_DIFFER

Bit depth source much match destination

29003

C29_BUF_NEEDS_1_EXP

A buffer needs at least 1 exposure

132

PVCAM Manual

Error #

Error Message

Version 2.7

Meaning

29004

C29_BUF_NEEDS_1_IMG

A buffer needs at least 1 image

29005

C29_IMG_DEF_TOO_LARGE

Image definition used too large a value

29006

C29_IMG_DEF_TOO_SMALL

Image size/bin must be larger than zero

29007

C29_IMG_DEF_DIFFER

Image source definition must match dest

29008

C29_IMG_NUM_DIFFER

Source # of images must match dest

30000

C30_UNKNOWN_ERROR

Unexpected, unanticipated, undocumented

30001

C30_CANT_READ_TIME

Unable to read the current system time

30002

C30_END

31000

C31_INVALID_HEAP

Invalid heap ID: PUBLIC_MEM, PRIVATE_MEM

31001

C31_MEMALLOC_FAILED

Not enough memory to perform alloc

31002

C31_MEMCALLOC_FAILED

Not enough memory to perform calloc

31003

C31_MEMREALLOC_FAILED

Not enough memory to perform realloc

31004

C31_PRIV_MEM_BLOCK_TOO_BIG

Excceeds 64k limit for PRIVATE_MEM

31005

C31_MEMLOCK_FAILED

Memory page locking failed

32000

CCL_TOO_COMPLEX

Too many script entries

32001

CCL_CANT_FRAME_TRANSFER

No frame transfer hardware support

32002

CCL_SCRIPT_IS_NOT_VALID

Invalid script

32003

CCL_REGIONS_OVERLAP

Regions contain some of the same pixels

32004

CCL_INVALID_SERIAL_BINNING

Serial binning == 0 or > region size

32005

CCL_INVALID_PARALLEL_BINNING

Parallel binning == 0 or > region size

32006

CCL_NONMATCHED_PARALLEL
_BINNING

Conflicting parallel binning values

32007

CCL_PARALLEL_BINNING_MISALIGNED

Conflicting parallel binning alignment

32008

CCL_INVALID_REGION

Region is not on the CCD

32009

CCL_INVALID_IO_PORT_TYPE

Requested I/O port is not a valid type

32010

C32_NOT_INITIALIZED

The pg_decode_info structure is not initialized

Appendix B:
Obsolete Functions
The following list of functions have been made obsolete through the use of pl_get_param,
pl_set_param, pl_get_enum_param, and pl_enum_str_length functions. They still
function correctly and are still supported, but for future programming, the following functions
should not be used. For more information about the pl_get_param and pl_set_param
parameter ids, refer to Chapter 5.
Table 6. Obsolete Class 0 Functions and Their pl_set_param/pl_set_param Equivalents
Obsolete Class 0 Function

pl_set_param/pl_get_param Equivalent

pl_dd_get_info

PARAM_DD_INFO

pl_dd_get_info_length

PARAM_DD_INFO_LENGTH

pl_dd_get_retries

PARAM_DD_RETRIES

pl_dd_set_retries

PARAM_DD_RETRIES

pl_dd_get_timeout

PARAM_DD_TIMEOUT

pl_dd_set_timeout

PARAM_DD_TIMEOUT

pl_dd_get_ver

PARAM_DD_VERSION

Table 7. Obsolete Class 2 Functions and Their pl_set_param/pl_set_param Equivalents
Obsolete Class 2 Function

pl_set_param/pl_get_param Equivalent

pl_ccd_get_adc_offset

PARAM_ADC_OFFSET

pl_ccd_get_chip_name

PARAM_CHIP_NAME

pl_ccd_get_clear_cycles

PARAM_CLEAR_CYCLES

pl_ccd_get_clear_mode

PARAM_CLEAR_MODE

pl_ccd_get_color_mode

PARAM_COLOR_MODE

pl_ccd_get_cooling_mode

PARAM_COOLING_MODE

pl_ccd_get_frame_capable

PARAM_FRAME_CAPABLE

pl_ccd_get_fwell_capacity

PARAM_FWELL_CAPACITY

pl_ccd_get_mpp_capable

PARAM_MPP_CAPABLE

pl_ccd_get_par_size

PARAM_PAR_SIZE

pl_ccd_get_pix_par_dist

PARAM_PIX_PAR_DIST

pl_ccd_get_pix_par_size

PARAM_PIX_PAR_SIZE

pl_ccd_get_pix_ser_dist

PARAM_PIX_SER_DIST

pl_ccd_get_pix_ser_size

PARAM_PIX_SER_SIZE

133

134

PVCAM Manual

Obsolete Class 2 Function

Version 2.7

pl_set_param/pl_get_param Equivalent

pl_ccd_get_pmode

PARAM_PMODE

pl_ccd_get_postmask

PARAM_POSTMASK

pl_ccd_get_postscan

PARAM_POSTSCAN

pl_ccd_get_preamp_dly

PARAM_PREAMP_DELAY

pl_ccd_get_preamp_off_control

PARAM_PREAMP_OFF_CONTROL

pl_ccd_get_preflash

PARAM_PREFLASH

pl_ccd_get_premask

PARAM_PREMASK

pl_ccd_get_prescan

PARAM_PRESCAN

pl_ccd_get_ser_size

PARAM_SER_SIZE

pl_ccd_get_serial_num

PARAM_SERIAL_NUM

pl_ccd_get_summing_well

PARAM_SUMMING_WELL

pl_ccd_get_tmp

PARAM_TEMP (pl_get_param only)

pl_ccd_get_tmp_range

PARAM_TEMP_SETPOINT (from the
attributes of the get you can get the min
and max allowed temperature settings)

pl_ccd_get_tmp_setpoint

PARAM_TEMP_SETPOINT

pl_ccd_set_adc_offset

PARAM_ADC_OFFSET

pl_ccd_set_clear_cycles

PARAM_CLEAR_CYCLES

pl_ccd_set_clear_mode

PARAM_CLEAR_MODE

pl_ccd_set_pmode

PARAM_PMODE

pl_ccd_set_preamp_off_control

PARAM_PREAMP_OFF_CONTROL

pl_ccd_set_tmp_setpoint

PARAM_TEMP_SETPOINT

pl_ccs_get_status

PARAM_CCS_STATUS

pl_shtr_get_close_dly

PARAM_SHTR_CLOSE_DELAY

pl_shtr_get_open_dly

PARAM_SHTR_OPEN_DELAY

pl_shtr_get_open_mode

PARAM_SHTR_OPEN_MODE

pl_shtr_get_status

PARAM_SHTR_STATUS

pl_shtr_set_close_dly

PARAM_SHTR_CLOSE_DELAY

pl_shtr_set_open_dly

PARAM_SHTR_OPEN_DELAY

pl_shtr_set_open_mode

PARAM_SHTR_OPEN_MODE

pl_spdtab_get_bits

PARAM_BIT_DEPTH

pl_spdtab_get_entries

PARAM_SPDTAB_INDEX with ATTR_MAX

pl_spdtab_get_max_gain

PARAM_GAIN_INDEX with ATTR_MAX

pl_spdtab_get_port

PARAM_READOUT_PORT

Appendix B: Obsolete Functions
Obsolete Class 2 Function

pl_set_param/pl_get_param Equivalent

pl_spdtab_get_port_total

PARAM_READOUT_PORT with
ATTR_COUNT

pl_spdtab_get_time

PARAM_PIX_TIME

pl_spdtab_get_gain

PARAM_GAIN_INDEX

pl_spdtab_get_num

PARAM_SPDTAB_INDEX

pl_spdtab_set_gain

PARAM_GAIN_INDEX

pl_spdtab_set_num

PARAM_SPDTAB_INDEX

Table 8. Obsolete Class 3 Functions and Their pl_set_param/pl_set_param Equivalents
Obsolete Class 3 Function

pl_set_param/pl_get_param Equivalent

pl_exp_check_progress
pl_exp_get_time_seq

PARAM_EXP_TIME

pl_exp_set_time_seq

PARAM_EXP_TIME

pl_exp_set_cont_mode

135

136

PVCAM Manual

Version 2.7

Obsolete Class 0 Functions
PVCAM

Class 0: Camera Communications

pl_dd_get_info(0)

NAME

pl_dd_get_info — reads text information about the current device driver.

SYNOPSIS

rs_bool
pl_dd_get_info(int16 hcam,int16 bytes,char_ptr text)

DESCRIPTION

This function returns information from the current device driver (specified by
hcam ) including unusual conditions and special information. Since the
information may change from system to system, it is presented as unformatted
text. The input string text must be allocated to be at least bytes characters long.
No more than bytes characters are written into the string text. The size of the
complete message can be obtained from the associated parameter id
PARAM_DD_INFO_LENGTH.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

parameter id PARAM_DD_INFO_LENGTH

NOTES

On many systems, there is not a message. If there is not a message, parameter id
PARAM_DD_INFO_LENGTH returns a length of 0.

Appendix B: Obsolete Functions

137

PVCAM

Class 0: Camera Communications

pl_dd_get_info_length(0)

NAME

pl_dd_get_info_length — returns length of info message.

SYNOPSIS

rs_bool
pl_dd_get_info_length(int16 hcam,int16_ptr bytes)

DESCRIPTION

This is a companion to the pl_dd_get_info function, which returns an
information message for each device, as specified by hcam. This function returns
the length of that message, in the variable bytes.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_dd_get_info(0)

NOTES

Many devices have no message. In other words, they return a value of 0 for
bytes.

138

PVCAM Manual

Version 2.7

PVCAM

Class 0: Camera Communications

pl_dd_get_retries(0)

NAME

pl_dd_get_retries — reads the maximum number of command
retransmission attempts that are allowed.

SYNOPSIS

rs_bool
pl_dd_get_retries(int hcam,uns16_ptr max_retries)

DESCRIPTION

When a command or status transmission is garbled, the system signals for a
retransmission. After a certain number of failed transmissions (an initial attempt
+ max_retries), the system abandons the attempt and concludes that the
communications link has failed. The camera won't close, but the command or
status read returns with an error. The maximum number of retries is initially set
by the device driver, and is matched to the communications link, hardware
platform, and operating system. It may also be reset by the user. hcam must be a
valid camera handle.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_dd_set_retries(0),pl_dd_get_timeout(0),pl_dd_set_timeo
ut(0)

NOTES

When the camera is initially opened, the driver uses a default timeout and
max_retries. These numbers, representing reasonable values, were
specifically set for that communications link, hardware platform, and operating
system. Those values can be examined by calling pl_dd_get_timeout and
pl_dd_get_retries. Both of these values can be changed, but only after the
camera has successfully opened. If both numbers are known, the worst-case
device driver response may be approximated. See pl_dd_set_timeout for a
discussion.
The number of retries applies to status communications as well as commands. In
other words, if the camera electronics unit sends status data, but the message is
garbled, the device driver requests a retransmission. Max_retries sets the
upper limit to the number of retransmissions that will be requested.

Appendix B: Obsolete Functions

139

PVCAM

Class 0: Camera Communications

pl_dd_set_retries(0)

NAME

pl_dd_set_retries — sets the maximum command retry count.

SYNOPSIS

rs_bool
pl_dd_set_retries(int hcam,uns16 max_retries)

DESCRIPTION

When a command or status transmission is garbled, the system signals for a
retransmission. After a certain number of failed transmissions (the initial
transmission plus max_retries), the system abandons the attempt and
concludes that the communications link has failed. The camera won't close, but
the command or status read returns with an error. This command sets the number
of allowable retries, before an error is generated. hcam must be a valid camera
handle.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_dd_get_retries(0),pl_dd_get_timeout(0),pl_dd_set_timeo
ut(0)

NOTES

When the camera is initially opened, the driver uses a default timeout and
max_retries. These numbers were specifically set for that communications
link, hardware platform, and operating system, and represent reasonable values.
Those values may be examined by calling pl_dd_get_timeout and
pl_dd_get_retries, and they can both be changed, but only after the camera
has successfully opened. If both numbers are known, the worst-case device
driver response may be approximated. See pl_dd_set_timeout for a
discussion.
Setting max_retries to 0 is theoretically reasonable, but in practice, many
systems, such as SCSI, require retries.

140

PVCAM Manual

Version 2.7

PVCAM

Class 0: Camera Communications

pl_dd_get_timeout(0)

NAME

pl_dd_get_timeout — reads the maximum time the driver waits for
acknowledgment.

SYNOPSIS

rs_bool
pl_dd_get_timeout(int hcam,uns16_ptr m_sec)

DESCRIPTION

When hcam is a valid camera handle, this function reads the slowest allowable
response speed from the camera. This is a crucial factor used in the device driver
for communications control. If the driver sends a command to the camera, and
doesn't receive acknowledgment within m_sec milliseconds, the driver times out
and returns an error. Unless reset by the user, this time out is a default setting
that is contained in the device driver, and is matched to the communications link,
hardware platform, and operating system.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_dd_set_timeout(0),pl_dd_get_retries(0),pl_dd_set_retri
es(0)

NOTES

When the camera is initially opened, the driver uses a default timeout and
max_retries. These numbers, representing reasonable values, were
specifically set for that communications link, hardware platform, and operating
system. Those values can be examined by calling pl_dd_get_timeout and
pl_dd_get_retries. They can both be changed, but only after the camera
has successfully opened.

Appendix B: Obsolete Functions

141

PVCAM

Class 0: Camera Communications

pl_dd_set_timeout(0)

NAME

pl_dd_set_timeout — sets the worst-case communications response.

SYNOPSIS

rs_bool
pl_dd_set_timeout(int hcam,uns16 m_sec)

DESCRIPTION

When hcam is a valid camera handle, this function sets the slowest allowable
response speed from the camera. This is a crucial factor in device driver
communications. If the driver sends a command to the camera, and doesn't
receive some sort of acknowledgment within m_sec milliseconds, the driver
times out and returns with an error.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_dd_get_timeout(0),pl_dd_get_retries(0),pl_dd_set_retri
es(0)

NOTES

When the camera is initially opened, the driver uses a default timeout and
max_retries. These numbers, representing reasonable values, were specifically
set for that communications link, hardware platform, and operating system.
Those values may be examined by immediately calling pl_dd_get_timeout
and pl_dd_get_retries. They can both be changed, but only after the
camera has successfully opened.
Changing timeout does not mean that each driver call returns within m_sec
milliseconds. Retries and other factors must be considered. The driver then sends
the command again. Timeout only applies to each send-acknowledge cycle.
The worst-case driver dead time would be given by
timeout * (max_retries+1) + overhead

where overhead may involve minor but unpredictable effects like time slicing,
system latency, communications turn around, and driver housekeeping.
When setting timeout, it is usually wise to set things a little higher than
expected. When waiting for a response, a few milliseconds extra is not
catastrophic, but terminating prematurely may be.

142

PVCAM Manual

Version 2.7

PVCAM

Class 0: Camera Communications

pl_dd_get_ver(0)

NAME

pl_dd_get_ver — returns current device driver version number.

SYNOPSIS

rs_bool
pl_dd_get_ver (int16 hcam, uns16_ptr version)

DESCRIPTION

This returns a version number for the device driver used to access the camera
hcam. The version is a formatted hexadecimal number, of the style:
low byte
high byte
major version

------------

-------------

hi nibble

low nibble

minor version

trivial version

For example, the number 0xB1C0 indicates major release 177, minor release 12,
and trivial change 0.
A major release is defined as anything that alters the user interface, calling
sequence, or parameter interpretation of any device driver interface function
(anything that would alter the driver's API). A new major release often requires
the calling software to change, but wherever possible, major releases are
backward compatible with earlier releases.
A minor release should be completely transparent to higher level software, but
may include internal enhancements. A trivial change is reserved for use by the
software staff to keep track of extremely minor variations. The last digit may
also be used to flag versions of the driver constructed for unique customers or
situations. Minor and trivial releases should require no change in the calling
software.
RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_ddi_get_ver(0),pl_pvcam_get_ver(0)

NOTES

Open the camera before calling this function. Note that different cameras on the
same system may use different drivers. Thus, each camera can have its own
driver, and its own driver version.

Appendix B: Obsolete Functions

143

Obsolete Class 2 Functions
PVCAM

Class 2: Configuration/Setup

pl_ro_get_value(2)

NAME

pl_ro_get_value — gets a read-only value from the camera hardware.

SYNOPSIS

rs_bool
pl_ccd_get_chip_name(int16 hcam, char_ptr chip_name )
pl_ccd_get_color_mode (int16 hcam, uns16_ptr color_mode)
pl_ccd_get_cooling_mode(int16 hcam, int16_ptr
cooling_mode)
pl_ccd_get_frame_capable(int16 hcam, rs_bool_ptr
frame_capable)
pl_ccd_get_fwell_capacity(int16 hcam, uns32_ptr
fwell_capacity )
pl_ccd_get_mpp_capable(int16 hcam, int16_ptr mpp_capable )
pl_ccd_get_par_size(int16 hcam, uns16_ptr par_size )
pl_ccd_get_pix_par_dist(int16 hcam, uns16_ptr
pix_par_dist)
pl_ccd_get_pix_par_size(int16 hcam, uns16_ptr
pix_par_size)
pl_ccd_get_pix_ser_dist(int16 hcam, uns16_ptr
pix_ser_dist)
pl_ccd_get_pix_ser_size(int16 hcam, uns16_ptr
pix_ser_size)
pl_ccd_get_postmask(int16 hcam, uns16_ptr postmask )
pl_ccd_get_postscan(int16 hcam, uns16_ptr postscan )
pl_ccd_get_preamp_dly(int16 hcam, uns16_ptr preamp_dly )
pl_ccd_get_preflash(int16 hcam, uns16_ptr preflash )
pl_ccd_get_premask(int16 hcam, uns16_ptr premask )
pl_ccd_get_prescan(int16 hcam, uns16_ptr prescan )
pl_ccd_get_ser_size(int16 hcam, uns16_ptr ser_size )
pl_ccd_get_serial_num(int16 hcam, uns16_ptr serial_num )
pl_ccd_get_summing_well(int16 hcam, rs_bool_ptr
s_well_exists)
pl_ccd_get_tmp(int16 hcam, int16_ptr cur_tmp )
pl_ccd_get_tmp_range(int16 hcam, int16_ptr
tmp_hi_val,int16_ptr tmp_lo_val )
pl_ccs_get_status(int16 hcam, int16_ptr ccs_status )
pl_shtr_get_status(int16 hcam, int16_ptr shtr_status )

144

PVCAM

PVCAM Manual

Class 2: Configuration/Setup

Version 2.7

pl_ro_get_value(2)

pl_spdtab_get_bits(int16 hcam, int16_ptr spdtab_bits )
pl_spdtab_get_entries(int16 hcam, int16_ptr
spdtab_entries)
pl_spdtab_get_max_gain(int16 hcam, int16_ptr
spdtab_max_gain)
pl_spdtab_get_port(int16 hcam, int16_ptr spdtab_port )
pl_spdtab_get_port_total(int16 hcam, int16_ptr
total_ports )
pl_spdtab_get_time(int16 hcam, uns16_ptr spdtab_time )

DESCRIPTION

When the camera is configured at the factory, it is preset with values based on
the CCD specifications, characterization tests, and other sources. Some of these
functions return information directly from the camera head memory. Some
functions return dynamic conditions (such as temperature) while other settings
are based on several inputs. In all cases, the hcam parameter indicates the piece
of hardware from which the information is read. hcam must be a valid camera
handle obtained from pl_cam_open.
All of these variables are read-only – they are informational parameters and
cannot be reset. The read/write parameters are documented under
pl_rw_get_values and pl_values_set.
The full list of parameters and their meanings are:

chip_name

The name of the CCD. The name is a null-terminated text string. The user must
pass in a character array that is at least CCD_NAME_LEN elements long.

ccs_status

This variable holds sixteen bits of status data from the Camera Control
Subsystem. Only the lowest 2 bits are currently implemented. These 2 bits
(ccs_status & 0x03) give the status of the CCS:
Value

CCS State

0

idle

1

initializing

2

running

3

continuously clearing

A running state occurs any time the CCS is in the process of performing a
camera operation (including opening or closing the shutter, exposing, clearing
the CCD before a sequence or exposure, parallel or serial shifting, and
readout/digitization). After the CCD has finished reading out, the setup
determines if the CCS goes to idle or enters continuous clearing mode.
color_mode

The color mode of the CCD. Where 0 = mono and 1 = color mosaic RGGB.
This value is stored in the pv_cam_reads structure.

Appendix B: Obsolete Functions

145

PVCAM

Class 2: Configuration/Setup

pl_ro_get_value(2)

cooling_mode

This is the type of cooling used by the current camera. The value returned will
be one of the following constants:
NORMAL_COOL – This is an air or water-cooled system.
CRYO_COOL – The camera has an attached Dewar.

cur_tmp

This reads the current temperature of the CCD in C°x 100. For example, a
temperature of -35° would be read as -3500. Note that this returns the
measured temperature, not the setpoint (which is reported in
pl_ccd_get_tmp_setpoint.)

frame_capable

If true, this camera can run in frame transfer mode (set through
pl_ccd_set_pmode).

fwell_capacity

The full-well capacity of this CCD, measured in electrons.

mpp_capable

Indicates whether this CCD runs in MPP mode. The actual value returned is
equal to one of the following four constants:
MPP_UNKNOWN
MPP_ALWAYS_ON
MPP_ALWAYS_OFF
MPP_SELECTABLE

par_size

Parallel size of the CCD, in active rows. The full size of the parallel register is
actually ( par_size + premask + postmask).

pix_par_size

Size of the active area of a pixel, in the parallel direction, measured in
nanometers.

pix_par_dist

Center-to-center distance between pixels (in the parallel direction) measured in
nanometers. This is identical to pix_par_size, if there are no interpixel dead
areas.

pix_ser_size

Size of a single pixel’s active area, in the serial direction, measured in
nanometers.

pix_ser_dist

Center-to-center distance between pixels (in the serial direction), in nanometers.
This is identical to pix_ser_size, if there are no dead areas.

postmask

The number of masked lines at the far end of the parallel register (away from
the serial register). This is the number of additional parallel shifts which needs
to be done after readout to clear the parallel register.

postscan

Number of pixels to discard from the serial register after the last real data pixel.
These must be read or discarded to clear the serial register.

preflash

The number of milliseconds needed to illuminate the CCD using the flash diode
ring before an exposure, dark, or bias.

146

PVCAM Manual

Version 2.7

PVCAM

Class 2: Configuration/Setup

pl_ro_get_value(2)

premask

The number of masked lines at the near end of the parallel register, next to the
serial register. 0=no mask (no normal mask). If the premask is equal to
par_size, this probably indicates a frame transfer device with an ordinary
mask. Accordingly, the CCD should probably be run in frame transfer mode.

preamp_dly

Number of milliseconds required for the CCD output preamp to stabilize, after
it is turned on.

prescan

Number of pixels discarded from the serial register before the first real data
pixel.

s_well_exists

If true, this CCD includes a summing well.

serial_num

This is the serial number of the camera head (not the electronics unit).

ser_size

Serial size of the CCD active area, in pixels.

shtr_status

The current state of the camera shutter (actually, the current state of the driver
voltage to the shutter). The returned value will be equal to one of the following
constants: SHTR_OPENING,SHTR_OPEN,SHTR_CLOSED,SHTR_CLOSING,
or SHTR_FAULT. If the shutter is run too fast, it will overheat and trigger
SHTR_FAULT. The shutter electronics will disconnect until the temperature
returns to a suitable range. Note that even though the electronics have reset the
voltages to open or close the shutter, there is a lag time for the physical
mechanism to respond. See pl_shtr_get_open_dly and
pl_shtr_get_close_dly in the pl_rw_get_value function list.

spdtab_bits

Number of bits output by the currently selected speed choice. Although this
number might range between 6 and 16, the data will always be returned in an
unsigned 16-bit word. This value indicates the number of valid bits within that
word.

spdtab_entries

The number of entries in the speed table. Valid entries range from 0 to
spdtab_entries-1 (inclusive). The current selection may be altered through
pl_spdtab_set_num. Zero entries is possible and indicates that there are no
valid speeds that span the requirements of the camera head video board, A/D
board, communication channel, and host throughput.

spdtab_max_gain

This reports the maximum gain index setting for the current speed selection, not
the actual gain. The minimum gain index is always 1. The maximum gain index
is usually 16.

spdtab_port

This reports on the CCD readout port being used by the currently selected
speed. Different readout ports (used for alternate speeds) flip the image in X, Y,
or both.

Appendix B: Obsolete Functions

147

PVCAM

Class 2: Configuration/Setup

pl_ro_get_value(2)

spdtab_time

This is the actual speed for the currently selected speed choice. It returns the
time for each pixel, in nanoseconds. This can be converted to a camera speed in
kiloHertz through the following formula:
106
camera_speed (kHz) =

pixel_time (nanoseconds)

This readout time will change as new speed choices are selected.
tmp_hi_val
tmp_lo_val

These two values contain the legal range for temperature settings (using the
pl_ccd_set_tmp_setpoint command) in hundredths of degrees Celsius.
Any number inside this range is legal and will be accepted (-3500 = -35°C).
Numbers outside the range are ignored. However, just because a temperature is
legal does not mean it is possible. The environment and circumstances will
dramatically affect which temperatures can be achieved. An air-cooled camera
in Antarctica will be able to reach much lower temperatures than a water-cooled
camera in the Sahara.

total_ports

1, 2, 3, or 4. The number of ports on the system. This affects the CCS program,
but most users will probably not care since multi-port operation is transparent at
the level of PVCAM.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_rw_value(2),pl_set_value(2),pl_cam_open(2),
pl_cam_close(2)

NOTES

PVCAM interfaces to some cameras that do not support the full PVCAM
features or variable set. If the user attempts to get a variable that doesn't exist,
the system may either synthesize a value (based on available information) or
return an error.

148

PVCAM Manual

Version 2.7

PVCAM

Class 2: Configuration/Setup

pl_rw_get_value(2)

NAME

pl_rw_get_value— returns a read/write value from the camera hardware.

SYNOPSIS

rs_bool
pl_ccd_get_adc_offset (int16 hcam, int16_ptr offset)
pl_ccd_get_clear_cycles (int16 hcam, uns16_ptr
clear_cycles)
pl_ccd_get_clear_mode (int16 hcam,int16_ptr
clear_mode)
pl_ccd_get_pmode (int16 hcam, int16_ptr pmode)
pl_ccd_get_preamp_off_control (int16 hcam, uns32_ptr
preamp_off_control)
pl_ccd_get_tmp_setpoint (int16 hcam,int16_ptr tmp_setpoint)
pl_shtr_get_close_dly (int16 hcam, uns16_ptr shtr_close_dly)
pl_shtr_get_open_dly(int16 hcam, uns16_ptr shtr_open_dly)
pl_shtr_get_open_mode (int16 hcam,int16_ptr shtr_open_mode)
pl_spdtab_get_gain (int16 hcam,int16_ptr spdtab_gain)
pl_spdtab_get_num (int16 hcam,int16_ptr spdtab_num)

DESCRIPTION

These functions are very similar. Each returns operating conditions and variables
from the camera hardware. The hcam parameter indicates from which piece of
hardware to read the setting, and must be a valid camera handle obtained from
pl_cam_open.
This set of variables is read/write – all values may be altered and written to the
hardware. The write functions are nearly identical, except that they begin with
set_, and accept non-pointer arguments. A more extensive set of read-only
values are documented under the pl_ro_get_value heading.
The full list of parameters and their meaning is listed under pl_set_values.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_ro_get_value(2),pl_cam_open(2),pl_cam_close(2)

NOTES

PVCAM interfaces to some cameras that do not support the full PVCAM
features or variable set. If the user attempts to get a variable that doesn't exist, the
system may either synthesize a value (based on available information) or return
an error.

Appendix B: Obsolete Functions

149

PVCAM

Class 2: Configuration/Setup

NAME

pl_set_value — sets a value in the camera hardware.

SYNOPSIS

rs_bool
pl_ccd_set_adc_offset (int16 hcam, int16 offset)
pl_ccd_set_clear_cycles (int16 hcam, uns16

pl_set_value(2)

clear_cycles)

pl_ccd_set_clear_mode (int16 hcam, int16 clear_mode)
pl_ccd_set_pmode(int16 hcam, int16 pmode)
pl_ccd_set_preamp_off_control (int16 hcam, uns32
preamp_off_control)
pl_ccd_set_tmp_setpoint (int16 hcam,int16 tmp_setpoint)
pl_shtr_set_close_dly (int16 hcam, uns16 shtr_close_dly)
pl_shtr_set_open_dly (int16 hcam, uns16 shtr_open_dly)
pl_shtr_set_open_mode (int16 hcam, int16 shtr_open_mode)
pl_spdtab_set_gain (int16 hcam, int16 spdtab_gain)
pl_spdtab_set_num (int16 hcam, int16 spdtab_num)

DESCRIPTION

These functions set operating conditions and variables in the camera hardware.
The hcam parameter indicates which piece of hardware to apply the setting to,
and must be a valid camera handle obtained from pl_cam_open. A camera
handle of 0 (normally an invalid handle) will simultaneously send the setting to
all open cameras (if this is possible).
A complementary set of functions allows all of these values to be read back from
the hardware. They are documented under pl_rw_get_values. Many of these
settings are also dependent on ranges or capabilities documented in the
pl_ro_get_values functions, such as pl_ccd_get_frame_capable and
pl_ccd_get_tmp_range.
The full list of parameters and their meanings are:

clear_cycles

This is the number of times the CCD must be cleared to completely remove
charge from the parallel register.

150

PVCAM Manual

Version 2.7

PVCAM

Class 2: Configuration/Setup

pl_set_value(2)

clear_mode

clear_mode defines when clearing takes place:
CLEAR_NEVER

Don't ever clear the CCD.

CLEAR_PRE_EXPOSURE

Clear clear_cycles times before each
exposure starts.

CLEAR_PRE_SEQUENCE

Clear clear_cycles times before the
sequence starts.

CLEAR_POST_SEQUENCE

Do continuous clearing after the sequence
ends.

CLEAR_PRE_POST_SEQUENCE

Clear clear_cycles times before the
sequence starts and continuous clearing
after the sequence ends.

CLEAR_PRE_EXPOSURE_POST_SEQ Clear clear_cycles times before each
exposure starts and continuous clearing
after the sequence ends.

The CLEAR_NEVER setting is particularly useful for performing a readout after
an exposure has been aborted.
Note that normally during the idle period, the CCS parallel clock drivers and
serial drivers revert to a low power state. This saves on both power and heat. If
any CLEAR_..._POST options are used, these systems will not enter low power
mode. This will generate extra heat in both the electronics unit and the camera
head.
offset

This allows the user to determine the bias offset voltage. Accepts a signed 16-bit
argument: the new bias voltage to be set; returns a signed 16-bit value listing the
bias offset voltage. The units do not correspond to the output pixel values in any
simple fashion (the conversion rate should be linear, but may differ from system
to system) but a lower offset voltage will yield a lower value for all output
pixels. Pixels brought below zero by this method will be clipped at zero. Pixels
raised above saturation will be clipped at saturation. Plainly, before users can
alter the offset level, they must read the current offset level. The default offset
level will also vary from system to system and may change with each speed and
gain setting.

pmode

This allows the user to select the parallel clocking method. The following list
includes all valid constants:
PMODE_NORMAL
PMODE_FT_MPP
PMODE_ALT_FT

PMODE_MPP
PMODE_ALT_NORMAL
PMODE_ALT_FT_MPP

PMODE_FT
PMODE_ALT_MPP

where FT indicates frame transfer mode, FT_MPP indicates both frame transfer
and MPP mode. ALT indicates that custom parameters may be loaded.
preamp_off_
control

This is the exposure time limit in milliseconds above which the preamp is turned
off during exposure.

Appendix B: Obsolete Functions

151

PVCAM

Class 2: Configuration/Setup

pl_set_value(2)

shtr_close_dly

The shutter close delay. This is the number of milliseconds required for the
shutter to close. The software default values compensate for the standard
Photometrics shutter that is shipped with all cameras. You only need to set this
value if you are using a shutter with characteristics that differ from the standard
shutter. Valid inputs are any number in the range 0 to 65535 milliseconds.

shtr_open_dly

The shutter open delay. This is the number of milliseconds required for the
shutter to open. The software default values compensate for the standard
Photometrics shutter that is shipped with all cameras. You only need to set this
value if you are using a shutter with characteristics that differ from the standard
shutter. Valid inputs are any number in the range 0 to 65535 milliseconds.

shtr_open_mode

Shutter opening conditions, set to one of the following
OPEN_NEVER

The shutter closes before the exposure and stays closed
during the exposure.

OPEN_PRE_EXPOSURE

Opens each exposure. Normal mode.

OPEN_PRE_SEQUENCE

Opens the shutter at the start of each sequence. Useful
for frame transfer and external strobe devices.

OPEN_PRE_TRIGGER

If using a triggered mode, this function causes the
shutter to open before the external trigger is armed. If
using a non-triggered mode, this function operates
identical to OPEN_PRE_EXPOSURE.

OPEN_NO_CHANGE

Sends no signals to open or close the shutter. Useful for
frame transfer when you want to open the shutter and
leave it open (see pl_exp_abort).

spdtab_gain

The new gain setting for the current speed choice. The valid range for a gain
setting is 1 through spdtab_max_gain, where the max gain may be as high as
16. Values outside this range will be ignored. Note that gain settings may not be
linear! Values 1-16 may not correspond to 1x - 16x, and there are holes between
the values. However, when the camera is initialized, and every time a new speed
is selected, the system will always reset to run at a gain of 1x.

spdtab_num

This selects the CCD readout speed from a table of available choices. Entries
may range from 0 to spdtab_entries - 1. This setting affects all other
_spdtab_ values including spdtab_bits, spdtab_gain,
spdtab_max_gain ,spdtab_time, and spdtab_port. After this call,
the gain setting always resets to a value that corresponds to 1x. To use a gain
other than 1x, pl_spdtab_set_gain must be called after
pl_spdtab_set_num.

152

PVCAM Manual

Version 2.7

PVCAM

Class 2: Configuration/Setup

pl_set_value(2)

tmp_setpoint

This sets the desired CCD temperature in hundredths of degrees Celsius (-35 °C
is represented as -3500). The hardware attempts to heat or cool the CCD to this
temperature. The min/max allowable temperatures are given by tmp_hi_val
and tmp_lo_val, from the pl_ccd_get_tmp_range function. Settings
outside this range are ignored. Note that this function only sets the desired
temperature. Even if the desired temperature is in a legal range, it still may be
impossible to achieve. If the ambient temperature is too high, it's difficult to get
much cooling on an air-cooled camera.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_ro_get_value(2),pl_rw_get_value(2),pl_cam_open(0),pl_c
am_close(0)

NOTES

PVCAM interfaces to some cameras that do not support the full PVCAM
features or variable set. If the user attempts to get a variable that doesn't exist, the
system may either synthesize a value (based on available information) or return
an error.

Appendix B: Obsolete Functions

153

Obsolete Class 3 Functions
PVCAM

Class 3: Data Acquisition

pl_exp_check_progress(3)

NAME

pl_exp_check_progress — checks the progress of the current exposure.

SYNOPSIS

rs_bool
pl_exp_check_progress(int16 hcam, int16_ptr status,
uns32_ptr byte_cnt)

DESCRIPTION

This function is similar to pl_exp_check_status except that it only returns
one of the following values:
EXPOSURE_IN_PROGRESS The data collection routines are active. They are
waiting for data to arrive, but none has arrived yet.
READOUT_IN_PROGRESS

The data collection routines are active. The data
has started to arrive.

READOUT_COMPLETE

All the expected data has arrived. Data collection
is complete, and the driver has returned to idle
state.

In order to detect errors during the acquisition process, you must use
pl_exp_check_status. byte_cnt points to the number of bytes of data that
have arrived so far (divide by two to get the number of pixels). This level of
feedback is unimportant to many users.
RETURN VALUE

TRUE means the progress was checked successfully. FALSE indicates a bad
handle or a problem communicating with the camera.

SEE ALSO

pl_exp_setup_seq(3),pl_exp_start_seq(3),
pl_exp_check_status(3)

NOTES

When using pl_exp_check_progress you could call it inside a loop with a
timeout. If the timeout expires, then you could call pl_exp_check_status to
determine if an error occurred (READOUT_FAILED).

154

PVCAM Manual

Version 2.7

PVCAM

Class 3: Data Acquisition

NAME

pl_exp_get_time_seq — only used with VARIABLE_TIMED_MODE, this
function returns the exposure time from the camera.

SYNOPSIS

rs_bool
pl_exp_get_time_seq(init16 hcam,uns16_ptr exposure_time)

DESCRIPTION

This is a companion function to pl_exp_set_time_seq. The two functions are
used to examine and change the exposure time in VARIABLE_TIMED_MODE.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_exp_set_time_seq(3),pl_exp_setup_seq(3),Exposure Mode
Constants(3)

NOTES

pl_exp_get_time_seq(3)

Appendix B: Obsolete Functions

155

PVCAM

Class 3: Data Acquisition

pl_exp_set_time_seq(3)

NAME

pl_exp_set_time_seq — only used with VARIABLE_TIMED_MODE, this
function sets the exposure time for the next sequence.

SYNOPSIS

rs_bool
pl_exp_set_time_seq(init16 hcam,uns16 exposure_time)

DESCRIPTION

This is a companion function to pl_exp_get_time_seq. The two functions
are used to examine and change the exposure time in VARIABLE_TIMED_MODE.

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_exp_get_time_seq(3),pl_exp_setup_seq(3),Exposure Mode
Constants(3)

NOTES

When using VARIABLE_TIMED_MODE, this function must be called before the
first sequence is run, because VARIABLE_TIMED_MODE ignores the exposure
time in the pl_exp_setup_seq.

156

PVCAM Manual

Version 2.7

PVCAM

Class 3: Data Acquisition

pl_exp_set_cont_mode(3)

NAME

pl_exp_set_cont_mode - sets circular buffer mode.

SYNOPSIS

rs_bool
pl_exp_set_cont_mode(int16 hcam, int16 mode)

DESCRIPTION

This function sets the mode of operation for the circular buffer. mode can be set
to either CIRC_OVERWRITE or CIRC_NO_OVERWRITE. This function must be
called before calling pl_exp_start_cont().

RETURN VALUE

TRUE for success, FALSE for a failure. Failure sets pl_error_code.

SEE ALSO

pl_exp_get_driver_buffer(3), pl_exp_start_cont(3),
pl_exp_check_cont_status(0), pl_exp_get_oldest_frame(3),
pl_exp_get_latest_frame(3),
pl_exp_unlock_oldest_frame(3), and pl_exp_stop_cont(3)

NOTES

Use the parameter id PARAM_CIRC_BUFFER with pl_get_param to see if the
system can perform circular buffer operations. The circular buffer is passed to
pl_exp_start_cont. The buffer is either allocated by your application or
obtained from the driver as a preallocated block of memory, using the
pl_exp_get_driver_buffer function.
Refer to Example 3: Circular Buffer in "Chapter 8" for two examples of code
for circular buffer operation.
This function has been replaced by pl_exp_setup_cont.

Index
_
_const_ptr type ...........................................................7

A
Allocation and saving, buffers.................................93
ANSI C library ..........................................................3
Arrays ........................................................................7
ATTR_ACCESS......................................................48
ATTR_AVAIL ........................................................48
ATTR_COUNT .......................................................49
ATTR_CURRENT ..................................................49
ATTR_DEFAULT...................................................49
ATTR_INCREMENT .............................................49
ATTR_MAX ...........................................................49
ATTR_MIN.............................................................49
ATTR_TYPE...........................................................49

B
Binning ......................................................................8
Bit depth ....................................................................5
Buffer handle ...........................................................94
Buffer manipulation ..............................................4, 93
Buffers .....................................................................24
BULB_MODE.............................................18, 57, 69

C
Camera
Communication ...............................................4, 27
handle ..................................................................94
speed......................................................................9
Camera settings .......................................................46
CCD
coordinates model .................................................7
orientation .............................................................7
readout port ...........................................................8
Circular buffers....... 13, 72, 73, 75, 77, 81, 83, 85, 90,
117, 119, 156
Class 0 Functions
list of ...................................................................27
pl_cam_check......................................................28
pl_cam_close.......................................................29
pl_cam_get_diags................................................30
pl_cam_get_name ...............................................31
pl_cam_get_total .................................................32
pl_cam_open .......................................................33
pl_ddi_get_ver.....................................................34
pl_pvcam_get_ver ...............................................35
pl_pvcam_init......................................................36
pl_pvcam_uninit..................................................37

Class 1 Functions
list of ...................................................................42
pl_error_code ......................................................43
pl_error_message ................................................44
Class 2 Functions
list of ...................................................................46
pl_enum_str_length.............................................52
pl_get_enum_param ............................................51
pl_get_param.......................................................48
pl_set_param .......................................................50
Class 3 Functions
list of ...................................................................67
pl_exp_abort........................................................79
pl_exp_check_cont_status...................................83
pl_exp_check_status............................................82
pl_exp_finish_seq ...............................................70
pl_exp_get_driver_buffer....................................71
pl_exp_get_latest_frame .....................................72
pl_exp_get_oldest_frame ....................................73
pl_exp_init_seq ...................................................74
pl_exp_setup_cont...............................................75
pl_exp_setup_seq ................................................76
pl_exp_start_cont ................................................77
pl_exp_start_seq..................................................78
pl_exp_stop_cont ................................................81
pl_exp_uninit_seq ...............................................84
pl_exp_unlock_oldest_frame ..............................85
pl_exp_unravel....................................................86
pl_io_clear_script_control...................................88
pl_io_script_control ............................................89
Class 4 Functions
list of ...................................................................93
pl_buf_alloc.........................................................95
pl_buf_free ..........................................................96
pl_buf_get_bits....................................................97
pl_buf_get_exp_date ...........................................98
pl_buf_get_exp_time...........................................99
pl_buf_get_exp_total.........................................100
pl_buf_get_img_bin ..........................................101
pl_buf_get_img_handle.....................................102
pl_buf_get_img_ofs ..........................................103
pl_buf_get_img_ptr...........................................104
pl_buf_get_img_size .........................................105
pl_buf_get_img_total ........................................106
pl_buf_get_size .................................................107
pl_buf_init .........................................................109
pl_buf_set_exp_date..........................................108
pl_buf_uninit .....................................................110
Clear modes .............................................................13
clear_mode ..............................................................55

157

158

PVCAM Manual

CLEAR_NEVER...............................................15, 55
CLEAR_NEVER (obsolete)..................................150
CLEAR_POST_SEQUENCE............................15, 55
CLEAR_POST_SEQUENCE (obsolete)...............150
CLEAR_PRE_EXPOSURE ..............................15, 55
CLEAR_PRE_EXPOSURE (obsolete) .................150
CLEAR_PRE_EXPOSURE_POST_SEQ ...............55
CLEAR_PRE_EXPOSURE_POST_SEQ (obsolete)150
CLEAR_PRE_EXPOSURE_POST_SEQUENCE..15
CLEAR_PRE_POST_SEQUENCE ..................15, 55
CLEAR_PRE_POST_SEQUENCE (obsolete) .....150
CLEAR_PRE_SEQUENCE ..............................15, 55
CLEAR_PRE_SEQUENCE (obsolete) .................150
Close delay ..............................................................19
Code examples
circular buffer............................................117, 119
Latest Frame Mode............................................117
Oldest Frame Mode...........................................119
pl_get_param & pl_get_enum_param ...............111
pl_param_set .....................................................115
standard mode acquisition .................................121
color mode ...............................................................55
Configuration/setup .............................................4, 45
Constants .................................................................94
Contact information...................................................1
Custom timing .........................................................11
Customer service .......................................................1

D
Data acquisition ....................................................4, 67
Data arrays.................................................................8
Defined types.............................................................5
Defining exposures ..................................................68
Display orientation ....................................................8

E
Error code list ........................................................123
Error conditions .......................................................41
Error reporting ......................................................4, 41
Example code
circular buffer............................................117, 119
Latest Frame Mode............................................117
Oldest Frame Mode...........................................119
pl_get_param & pl_get_enum_param ...............111
pl_set_param .....................................................115
standard mode acquisition .................................121
Exposure loops ........................................................20
Exposure mode constants ........................................69
Exposure modes.................................................13, 16
Exposure scripts.......................................................20
exposure_time..........................................................16

F
FLASH_MODE...........................................18, 57, 69
Frame transfer..........................................................10
Full lateral resolution.................................................8
Full-CCD image in buffer........................................24

Version 2.7

G
Gain ...........................................................................9
Get and Set Parameter Functions
pl_get_enum_param ............................................45
pl_get_param.......................................................45
pl_set_param .......................................................45

H
Handle .......................................................................6
hbuf..........................................................................94
hcam ........................................................................94
himg.........................................................................94

I
Image
array ....................................................................10
buffers .................................................................24
handle ..................................................................94
pointer .................................................................94
smear ...................................................................11
Include files ...............................................................6
Initialization functions.............................................27
buffer...................................................................93
Interline CCD ..........................................................10

K
Kinetics....................................................................10

L
Latest Frame Mode code example .........................117
Library classes ...........................................................4

M
master.h .................................................................5, 6
Multiple exposures in buffer....................................24
Multiple speed options...............................................9

N
Non-pointers ..............................................................7

O
Obsolete Class 0 Functions
pl_dd_get_info ..................................................136
pl_dd_get_info_length ......................................137
pl_dd_get_retries...............................................138
pl_dd_get_timeout.............................................140
pl_dd_get_ver....................................................142
pl_dd_set_retries ...............................................139
pl_dd_set_timeout .............................................141
Obsolete Class 2 Functions
pl_ccd_get_adc_offset.......................................148
pl_ccd_get_chip_name......................................143
pl_ccd_get_clear_cycles....................................148
pl_ccd_get_clear_mode.....................................148
pl_ccd_get_color_mode ....................................143
pl_ccd_get_cooling_mode ................................143
pl_ccd_get_frame_capable................................143
pl_ccd_get_fwell_capacity................................143

Index
Obsolete Class 2 Functions (cont.)
pl_ccd_get_mpp_capable ..................................143
pl_ccd_get_par_size ..........................................143
pl_ccd_get_pix_par_dist ...................................143
pl_ccd_get_pix_par_size...................................143
pl_ccd_get_pix_ser_dist....................................143
pl_ccd_get_pix_ser_size ...................................143
pl_ccd_get_pmode ............................................148
pl_ccd_get_postmask ........................................143
pl_ccd_get_postscan..........................................143
pl_ccd_get_preamp_dly ....................................143
pl_ccd_get_preamp_off_control .......................148
pl_ccd_get_preflash ..........................................143
pl_ccd_get_premask..........................................143
pl_ccd_get_prescan ...........................................143
pl_ccd_get_ser_size ..........................................143
pl_ccd_get_serial_num......................................143
pl_ccd_get_summing_well................................143
pl_ccd_get_tmp .................................................143
pl_ccd_get_tmp_range ......................................143
pl_ccd_get_tmp_setpoint ..................................148
pl_ccd_set_adc_offset .......................................149
pl_ccd_set_clear_cycles ....................................149
pl_ccd_set_clear_mode .....................................149
pl_ccd_set_pmode.............................................149
pl_ccd_set_preamp_off_control........................149
pl_ccd_set_tmp_setpoint...................................149
pl_ccs_get_status...............................................143
pl_ro_get_value.................................................143
pl_rw_get_value................................................148
pl_set_value.......................................................149
pl_shtr_get_close_dly........................................148
pl_shtr_get_open_dly ........................................148
pl_shtr_get_open_mode ....................................148
pl_shtr_get_status..............................................143
pl_shtr_set_close_dly ........................................149
pl_shtr_set_open_dly ........................................149
pl_shtr_set_open_mode.....................................149
pl_spdtab_get_bits.............................................143
pl_spdtab_get_entries........................................144
pl_spdtab_get_gain............................................148
pl_spdtab_get_max_gain...................................144
pl_spdtab_get_num ...........................................148
pl_spdtab_get_port ............................................144
pl_spdtab_get_port_total...................................144
pl_spdtab_get_time ...........................................144
pl_spdtab_set_gain ............................................149
pl_spdtab_set_num............................................149
Obsolete Class 3 Functions
pl_exp_check_progress .....................................153
pl_exp_get_time_seq.........................................154
pl_exp_set_cont_mode......................................156
pl_exp_set_time_seq .........................................155
Oldest Frame Mode code example ........................119
Open delay, close delay ...........................................19
OPEN_NEVER .................................................20, 65

159
OPEN_NEVER (obsolete).....................................151
OPEN_NO_CHANGE ......................................20, 65
OPEN_NO_CHANGE (obsolete) .........................151
OPEN_PRE_EXPOSURE.................................20, 65
OPEN_PRE_EXPOSURE (obsolete) ....................151
OPEN_PRE_SEQUENCE.................................20, 65
OPEN_PRE_SEQUENCE (obsolete)....................151
OPEN_PRE_TRIGGER ....................................20, 65
OPEN_PRE_TRIGGER (obsolete) .......................151
Orientation of CCD ...................................................7

P
Parallel.......................................................................7
Parallel binning..........................................................8
PARAM_ACCUM_CAPABLE ..............................53
PARAM_ADC_OFFSET ........................................53
PARAM_ANTI_BLOOMING ................................53
PARAM_BIT_DEPTH............................................53
PARAM_BOF_EOF_CLR ......................................90
PARAM_BOF_EOF_COUNT ................................90
PARAM_BOF_EOF_ENABLE ..............................90
PARAM_CAM_FW_VERSION.............................54
PARAM_CCS_STATUS ........................................54
PARAM_CHIP_NAME ..........................................54
PARAM_CIRC_BUFFER.......................................90
PARAM_CLEAR_CYCLES...................................54
PARAM_CLEAR_MODE ......................................55
PARAM_COLOR_MODE......................................55
PARAM_CONTROLLER_ALIVE.........................56
PARAM_COOLING_MODE .................................56
PARAM_CUSTOM_CHIP .....................................56
PARAM_CUSTOM_TIMING ................................56
PARAM_DD_INFO................................................38
PARAM_DD_INFO_LENGTH ..............................38
PARAM_DD_RETRIES .........................................38
PARAM_DD_TIMEOUT .......................................38
PARAM_DD_VERSION ........................................39
PARAM_EDGE_TRIGGER ...................................57
PARAM_EXP_MIN_TIME ....................................90
PARAM_EXP_RES ................................................90
PARAM_EXP_RES_INDEX..................................91
PARAM_EXP_TIME........................................16, 91
PARAM_EXPOSURE_MODE...............................57
PARAM_FRAME_CAPABLE ...............................57
PARAM_FTSCAN..................................................57
PARAM_FWELL_CAPACITY..............................57
PARAM_GAIN_INDEX.........................................57
PARAM_GAIN_MULT_ENABLE ........................58
PARAM_GAIN_MULT_FACTOR ........................58
PARAM_HEAD_SER_NUM_ALPHA ..................58
PARAM_HW_AUTOSTOP....................................91
PARAM_INTENSIFIER_GAIN.............................58
PARAM_IO_ADDR ...............................................58
PARAM_IO_BITDEPTH........................................58
PARAM_IO_DIRECTION .....................................58
PARAM_IO_STATE ..............................................59

160

PVCAM Manual

PARAM_IO_TYPE.................................................59
PARAM_KIN_WIN_SIZE......................................59
PARAM_LOGIC_OUTPUT ...................................59
PARAM_MIN_BLOCK..........................................60
PARAM_MPP_CAPABLE.....................................60
PARAM_NUM_MIN_BLOCK ..............................60
PARAM_NUM_OF_STRIPS_PER_CLR...............60
PARAM_PAR_SHIFT_TIME ................................60
PARAM_PAR_SIZE...............................................60
PARAM_PCI_FW_VERSION................................60
PARAM_PIX_PAR_DIST ......................................61
PARAM_PIX_PAR_SIZE ......................................61
PARAM_PIX_SER_DIST ......................................61
PARAM_PIX_SER_SIZE.......................................61
PARAM_PIX_TIME...............................................61
PARAM_PMODE ...................................................61
PARAM_POSTMASK............................................62
PARAM_POSTSCAN.............................................62
PARAM_PREAMP_DELAY..................................62
PARAM_PREAMP_OFF_CONTROL ...................62
PARAM_PREFLASH .............................................62
PARAM_PREMASK ..............................................62
PARAM_PRESCAN ...............................................62
PARAM_READOUT_PORT..................................63
PARAM_READOUT_TIME ..................................63
PARAM_SER_SHIFT_TIME.................................63
PARAM_SER_SIZE ...............................................63
PARAM_SERIAL_NUM........................................63
PARAM_SHTR_CLOSE_DELAY.........................64
PARAM_SHTR_CLOSE_DELAY_UNIT .............64
PARAM_SHTR_GATE_MODE ............................63
PARAM_SHTR_OPEN_DELAY ...........................64
PARAM_SHTR_OPEN_MODE.............................65
PARAM_SHTR_STATUS......................................65
PARAM_SKIP_AT_ONCE_BLK ..........................66
PARAM_SPDTAB_INDEX ...................................66
PARAM_SUMMING_WELL.................................66
PARAM_TEMP ......................................................66
PARAM_TEMP_SETPOINT..................................66
Parameter passing ......................................................7
pbin............................................................................8
pl_buf_alloc.............................................................95
pl_buf_free ..............................................................96
pl_buf_get_bits ........................................................97
pl_buf_get_exp_date ...............................................98
pl_buf_get_exp_time ...............................................99
pl_buf_get_exp_total .............................................100
pl_buf_get_img_bin...............................................101
pl_buf_get_img_handle .........................................102
pl_buf_get_img_ofs...............................................103
pl_buf_get_img_ptr ...............................................104
pl_buf_get_img_size .............................................105
pl_buf_get_img_total.............................................106
pl_buf_get_size......................................................107
pl_buf_init .............................................................109
pl_buf_set_exp_date..............................................108

Version 2.7

pl_buf_uninit .........................................................110
pl_cam_check ..........................................................28
pl_cam_close ...........................................................29
pl_cam_get_diags ....................................................30
pl_cam_get_name....................................................31
pl_cam_get_total .....................................................32
pl_cam_open............................................................33
pl_ccd_get_adc_offset (obsolete) ..........................148
pl_ccd_get_chip_name (obsolete) .........................143
pl_ccd_get_clear_cycles (obsolete) .......................148
pl_ccd_get_clear_mode (obsolete) ........................148
pl_ccd_get_color_mode (obsolete)........................143
pl_ccd_get_cooling_mode (obsolete) ....................143
pl_ccd_get_frame_capable (obsolete) ...................143
pl_ccd_get_fwell_capacity (obsolete) ...................143
pl_ccd_get_mpp_capable (obsolete)......................143
pl_ccd_get_par_size (obsolete) .............................143
pl_ccd_get_pix_par_dist (obsolete).......................143
pl_ccd_get_pix_par_size (obsolete) ......................143
pl_ccd_get_pix_ser_dist (obsolete) .......................143
pl_ccd_get_pix_ser_size (obsolete).......................143
pl_ccd_get_pmode (obsolete)................................148
pl_ccd_get_postmask (obsolete)............................143
pl_ccd_get_postscan (obsolete) .............................143
pl_ccd_get_preamp_dly (obsolete)........................143
pl_ccd_get_preamp_off_control (obsolete) ...........148
pl_ccd_get_preflash (obsolete)..............................143
pl_ccd_get_premask (obsolete) .............................143
pl_ccd_get_prescan (obsolete)...............................143
pl_ccd_get_ser_size (obsolete)..............................143
pl_ccd_get_serial_num (obsolete) .........................143
pl_ccd_get_summing_well (obsolete) ...................143
pl_ccd_get_tmp (obsolete).....................................143
pl_ccd_get_tmp_range (obsolete)..........................143
pl_ccd_get_tmp_setpoint (obsolete) ......................148
pl_ccd_set_adc_offset (obsolete)...........................149
pl_ccd_set_clear_cycles (obsolete)........................149
pl_ccd_set_clear_mode (obsolete).........................149
pl_ccd_set_pmode (obsolete) ........................148, 149
pl_ccd_set_preamp_off_control (obsolete) ...........149
pl_ccd_set_tmp_setpoint (obsolete) ......................149
pl_ccs_get_status (obsolete) ..................................143
pl_dd_get_info (obsolete)......................................136
pl_dd_get_info_length (obsolete) ..........................137
pl_dd_get_retries (obsolete) ..................................138
pl_dd_get_timeout (obsolete) ................................140
pl_dd_get_ver (obsolete) .......................................142
pl_dd_set_retries (obsolete)...................................139
pl_dd_set_timeout (obsolete).................................141
pl_ddi_get_ver.........................................................34
pl_enum_str_length .................................................52
pl_error_code.....................................................42, 43
pl_error_message...............................................42, 44
pl_exp_abort ............................................................79
pl_exp_check_cont_status .......................................83
pl_exp_check_progress (obsolete).........................153

Index
pl_exp_check_status................................................82
pl_exp_finish_seq....................................................70
pl_exp_get_driver_buffer ........................................71
pl_exp_get_latest_frame..........................................72
pl_exp_get_oldest_frame.........................................73
pl_exp_get_time_seq (obsolete) ............................154
pl_exp_init_seq........................................................74
pl_exp_set_cont_mode (obsolete) .........................156
pl_exp_set_time_seq (obsolete).............................155
pl_exp_setup_cont ...................................................75
pl_exp_setup_seq...............................................16, 76
pl_exp_start_cont.....................................................77
pl_exp_start_seq ..................................................8, 78
pl_exp_stop_cont.....................................................81
pl_exp_uninit_seq....................................................84
pl_exp_unlock_oldest_frame...................................85
pl_exp_unravel ........................................................86
pl_get_enum_param ................................................51
pl_get_param ...........................................................48
pl_io_clear_script_control .......................................88
pl_io_script_control.................................................89
pl_pvcam_get_ver ...................................................35
pl_pvcam_init ....................................................36, 45
pl_pvcam_uninit ......................................................37
pl_ro_get_value (obsolete) ....................................143
pl_rw_get_value (obsolete) ...................................148
pl_set_param............................................................50
pl_set_value (obsolete) ..........................................149
pl_shtr_get_close_dly (obsolete) ...........................148
pl_shtr_get_open_dly (obsolete) ...........................148
pl_shtr_get_open_mode (obsolete)........................148
pl_shtr_get_status (obsolete) .................................143
pl_shtr_set_close_dly (obsolete) ...........................149
pl_shtr_set_open_dly (obsolete) ............................149
pl_shtr_set_open_mode (obsolete) ........................149
pl_spdtab_get_bits (obsolete) ................................143
pl_spdtab_get_entries (obsolete) ...........................144
pl_spdtab_get_gain (obsolete) ...............................148
pl_spdtab_get_max_gain (obsolete) ......................144
pl_spdtab_get_port (obsolete) ...............................144
pl_spdtab_get_port_total (obsolete) ......................144
pl_spdtab_get_time (obsolete)...............................144
pl_spdtab_set_gain (obsolete) ...............................149
pl_spdtab_set_num (obsolete) ...............................149
PMODE_ALT_FT...................................................61
PMODE_ALT_FT (obsolete)................................150
PMODE_ALT_FT_MPP.........................................61
PMODE_ALT_FT_MPP (obsolete) ......................150
PMODE_ALT_MPP ...............................................61
PMODE_ALT_MPP (obsolete).............................150

161
PMODE_ALT_NORMAL ......................................61
PMODE_ALT_NORMAL (obsolete) ...................150
PMODE_FT ............................................................61
PMODE_FT (obsolete)..........................................150
PMODE_FT_MPP...................................................61
PMODE_FT_MPP (obsolete)................................150
PMODE_INTERLINE ............................................61
PMODE_KINETICS ...............................................61
PMODE_MPP .........................................................61
PMODE_MPP (obsolete) ......................................150
PMODE_NORMAL................................................61
PMODE_NORMAL (obsolete) .............................150
Pointers ......................................................................7
PVCAM.................................................................1, 3
pvcam.h .....................................................................6

R
Readout port selection ...............................................8
Region .......................................................................7

S
s,p coordinates ...........................................................7
sbin ............................................................................8
SDK ...........................................................................1
Sequence parameters ...............................................13
Sequences ................................................................13
Sequences in buffer .................................................24
Serial binning.............................................................8
Serial register.............................................................7
shtr_open_mode ......................................................65
Shutter open mode .............................................13, 20
Single exposure, multiple images in buffer .............24
Smearing..................................................................11
Source code example ...............................................25
Specifying regions .....................................................7
Speed choices ............................................................9
Standard shutter .......................................................19
Storage array............................................................10
STROBED_MODE .....................................17, 57, 69
Structures and arrays ..................................................7
System overview........................................................3

T
Technical support ......................................................1
TIMED_MODE...........................................16, 57, 69
TRIGGER_FIRST_MODE .........................17, 57, 69

V
VARIABLE_TIMED_MODE.....................16, 57, 69
Video coordinates ......................................................8

162

PVCAM Manual

This page intentionally left blank.

Version 2.7



Source Exif Data:
File Type                       : PDF
File Type Extension             : pdf
MIME Type                       : application/pdf
PDF Version                     : 1.5
Linearized                      : Yes
Encryption                      : Standard V2.3 (128-bit)
User Access                     : Print, Extract, Print high-res
Page Count                      : 168
Page Mode                       : UseOutlines
Has XFA                         : No
XMP Toolkit                     : XMP toolkit 2.9.1-14, framework 1.6
About                           : uuid:a6e44169-b886-4779-8612-ded61843faff
Producer                        : Acrobat Distiller 6.0.1 (Windows)
Creator Tool                    : Acrobat PDFMaker 6.0 for Word
Modify Date                     : 2004:12:28 13:07:37-05:00
Create Date                     : 2004:12:20 10:40:30-05:00
Metadata Date                   : 2004:12:28 13:07:37-05:00
Document ID                     : uuid:44f6ac8d-eff9-4ac4-82bd-1569744c7374
Format                          : application/pdf
Title                           : PVCAM 2.7 User Manual
Creator                         : 4411-0094, Ver. 2.7, Rev 0
Description                     : Princeton Instruments, a division of Roper Scientific, Inc.
Author                          : 4411-0094, Ver. 2.7, Rev 0
Subject                         : Princeton Instruments, a division of Roper Scientific, Inc.
EXIF Metadata provided by EXIF.tools

Navigation menu