# areaDetector Prosilica driver

## September 20, 2008

## Mark Rivers

## University of Chicago

## Contents

- Overview
- Performance measurements
- Hardware notes
- Restrictions
- Future enhancements

## Prosilica Driver

This is a driver for Gigabit Ethernet and Firewire cameras from Prosilica. It inherits from ADDriver and implements nearly all of the parameters in ADStdDriverParams.h. It also implements a number of parameters that are specific to the Prosilica cameras. The driver is currently only supported under Windows (EPICS win32-x86 architecture) because the vendor library is provided as a Windows DLL. The vendor library provided by Prosilica does callbacks to a user-supplied function each time there is a new frame. Thus, the driver does not need to create a thread itself for callbacks.

The vendor library supports saving individual frames as TIFF files, and this is implemented in the driver. The NDPluginFile plugin can be used to capture or stream images much more rapidly in the netCDF file format.

The driver redefines the choices for 2 of the parameters defined in ADStdDriverParams.h. The ADTriggerMode choices for the Prosilica are:

- Free Run (collects images as fast as allowed by the camera readout and the exposure time)
- Sync In 1 (external trigger on line 1)
- Sync In 2 (external trigger on line 2)
- Sync In 3 (external trigger on line 3)
- Sync In 4 (external trigger on line 4)
- Fixed Rate (collects images at a fixed rate)
- Software (single software trigger)

The Prosilica supports additional hardware timing signals that may be supported in a future release.

The ADFileFormat choices for the Prosilica are:

- TIFF (this is the only format supported)
- Invalid (this menu item is defined only because MEDM will not display a menu widget with only 1 choice)

The Prosilica driver implements the following parameters in addition to those in ADStdDriverParams.h:

Parameter Definitions in prosilica.cpp and EPICS Record Definitions in prosilica.template
Enum name | asyn interface | Access | Description | drvUser string | EPICS record name | EPICS record type
--- | --- | --- | --- | --- | --- | ---
PSReadStatistics | asynInt32 | r/w | Read the Gigabit Ethernet statistics when 1 | PS_READ_STATISTICS | $(P)$(R)PSReadStatistics | longout
PSStatDriverType | asynOctet | r/o | Driver type | PS_DRIVER_TYPE | $(P)$(R)PSDriverType_RBV | stringin
PSStatFilterVersion | asynOctet | r/o | Packet filter version | PS_FILTER_VERSION | $(P)$(R)PSFilterVersion_RBV | stringin
PSStatFrameRate | asynFloat64 | r/o | Frame rate (Hz) | PS_FRAME_RATE | $(P)$(R)PSFrameRate_RBV | ai
PSStatFramesCompleted | asynInt32 | r/o | Number of frames completed | PS_FRAMES_COMPLETED | $(P)$(R)PSFramesCompleted_RBV | longin
PSStatFramesDropped | asynInt32 | r/o | Number of frames dropped | PS_FRAMES_DROPPED | $(P)$(R)PSFramesDropped_RBV | longin
PSStatPacketsErroneous | asynInt32 | r/o | Number of erroneous packets | PS_PACKETS_ERRONEOUS | $(P)$(R)PSPacketsErroneous_RBV | longin
PSStatPacketsMissed | asynInt32 | r/o | Number of missed packets | PS_PACKETS_MISSED | $(P)$(R)PSPacketsMissed_RBV | longin
PSStatPacketsReceived | asynInt32 | r/o | Number of received packets | PS_PACKETS_RECEIVED | $(P)$(R)PSPacketsReceived_RBV | longin
PSStatPacketsRequested | asynInt32 | r/o | Number of packets requested | PS_PACKETS_REQUESTED | $(P)$(R)PSPacketsRequested_RBV | longin
PSStatPacketsResent | asynInt32 | r/o | Number of packets resent | PS_PACKETS_RESENT | $(P)$(R)PSPacketsResent_RBV | longin
PSBadFrameCounter | asynInt32 | r/o | Number of bad frames | PS_BAD_FRAME_COUNTER | $(P)$(R)PSBadFrameCounter_RBV | longin

The following is the MEDM screen ADBase.adl connected to a Prosilica camera.

### ADBase.adl

The following is the MEDM screen that provides access to the specific parameters for the Prosilica detector.

### prosilica.adl

The following is an IDL epics_ad_display screen displaying the Prosilica detector images.

### epics_ad_display.pro

## Future enhancements

The driver does not currently support color. This will be added in the near future.

Work is needed on connection management. If the camera is unplugged or powered off which the areaDetector driver is running it does not gracefully recover.