Commit 2f610e8d authored by Éric Thiébaut's avatar Éric Thiébaut
Browse files

Rename FLI to FLIPRO for Kepler cameras

parent 8aac0abf
......@@ -6,8 +6,8 @@ endif
if USE_ANDOR
SUBDIRS += andor
endif
if USE_FLI
SUBDIRS += fli
if USE_LIBFLIPRO
SUBDIRS += flipro
endif
if USE_PHOENIX
SUBDIRS += phoenix
......
......@@ -2,7 +2,7 @@
## Version 0.9.0
* Support for Finger Lakes Instrumentation (FLI) cameras.
* Support for Finger Lakes Instrumentation Kepler camera via the LIBFLIPRO SDK.
## Version 0.8.2
......
......@@ -94,7 +94,7 @@ fi
TAO_CHECK_CFITSIO()
TAO_CHECK_ALPAO()
TAO_CHECK_ANDOR()
TAO_CHECK_FLI()
TAO_CHECK_LIBFLIPRO()
TAO_CHECK_PHOENIX()
TAO_CHECK_YORICK()
......@@ -163,12 +163,12 @@ if test $use_alpao = yes; then
echo " Linker flags for Alpao SDK: $ALPAO_LIBS"
fi
echo
echo "Support for Finger Lakes Instrumentation (FLI) cameras: $use_fli"
if test $use_fli = yes; then
echo " Directory for FLI headers: $FLI_INCDIR"
echo " Directory for FLI libraries: $FLI_LIBDIR"
echo " Pre-processor flags for FLI SDK: $FLI_DEFS"
echo " Linker flags for FLI SDK: $FLI_LIBS"
echo "Support for Finger Lakes Instrumentation cameras (LIBFLIPRO): $use_libflipro"
if test $use_libflipro = yes; then
echo " Directory for LIBFLIPRO headers: $FLI_INCDIR"
echo " Directory for LIBFLIPRO libraries: $FLI_LIBDIR"
echo " Pre-processor flags for LIBFLIPRO: $FLI_DEFS"
echo " Linker flags for LIBFLIPRO: $FLI_LIBS"
fi
echo
echo "Support for Yorick: $use_yorick"
......@@ -185,7 +185,7 @@ AC_CONFIG_FILES([Makefile])
AC_CONFIG_FILES([alpao/Makefile])
AC_CONFIG_FILES([andor/Makefile])
AC_CONFIG_FILES([base/Makefile])
AC_CONFIG_FILES([fli/Makefile])
AC_CONFIG_FILES([flipro/Makefile])
AC_CONFIG_FILES([phoenix/Makefile])
#AC_CONFIG_FILES([scripts/Makefile])
AC_OUTPUT
#
# Makefile.am -
#
# Rules to build TAO auxiliary library for FLI cameras.
# Rules to build TAO auxiliary library for Finger Lakes Instrumentation cameras
# via the LIBFLIPRO SDK.
#
#------------------------------------------------------------------------------
#
......@@ -9,11 +10,11 @@
# (https://git-cral.univ-lyon1.fr/tao/tao-rt).
#
# Settings for the FLI SDK.
FLI_INCDIR = @FLI_INCDIR@
FLI_LIBDIR = @FLI_LIBDIR@
FLI_DEFS = @FLI_DEFS@
FLI_LIBS = @FLI_LIBS@
# Settings for the LIBFLIPRO SDK.
LIBFLIPRO_INCDIR = @LIBFLIPRO_INCDIR@
LIBFLIPRO_LIBDIR = @LIBFLIPRO_LIBDIR@
LIBFLIPRO_DEFS = @LIBFLIPRO_DEFS@
LIBFLIPRO_LIBS = @LIBFLIPRO_LIBS@
# Other libraries.
OTHER_LIBS = -lpthread -lusb-1.0 $(LIBM)
......@@ -21,12 +22,12 @@ OTHER_LIBS = -lpthread -lusb-1.0 $(LIBM)
# Settings for TAO library and its components.
TAO_DEFS = -I$(srcdir)/../base
TAO_LIBS = ../base/libtao.la $(OTHER_LIBS)
#TAO_FLI_DEPS = $(FLI_DEPS)
TAO_FLI_LIBS = libtao-fli.la $(FLI_LIBS)
#TAO_LIBFLIPRO_DEPS = $(LIBFLIPRO_DEPS)
TAO_LIBFLIPRO_LIBS = libtao-flipro.la $(LIBFLIPRO_LIBS)
# Common settings for all targets.
COMMON_DEFS = -I$(srcdir) $(TAO_DEFS) $(FLI_DEFS)
COMMON_LIBS = $(TAO_FLI_LIBS) $(TAO_LIBS)
COMMON_DEFS = -I$(srcdir) $(TAO_DEFS) $(LIBFLIPRO_DEFS)
COMMON_LIBS = $(TAO_LIBFLIPRO_LIBS) $(TAO_LIBS)
# Define AM_... macros to simplify per-target settings.
#
......@@ -36,15 +37,14 @@ COMMON_LIBS = $(TAO_FLI_LIBS) $(TAO_LIBS)
#
AM_CPPFLAGS = $(COMMON_DEFS)
lib_LTLIBRARIES = libtao-fli.la
include_HEADERS = tao-fli-cameras.h
libtao_fli_la_SOURCES = \
fli-core.c
libtao_fli_la_LIBADD = $(FLI_LIBS) $(TAO_LIBS)
libtao_fli_la_LDFLAGS = -version-info @version_info@
lib_LTLIBRARIES = libtao-flipro.la
include_HEADERS = tao-flipro-cameras.h
libtao_flipro_la_SOURCES = flipro-core.c
libtao_flipro_la_LIBADD = $(LIBFLIPRO_LIBS) $(TAO_LIBS)
libtao_flipro_la_LDFLAGS = -version-info @version_info@
bin_PROGRAMS = fli_server
bin_PROGRAMS = flipro_server
fli_server_SOURCES = fli-server.c
fli_server_CPPFLAGS = $(COMMON_DEFS)
fli_server_LDADD = $(COMMON_LIBS)
flipro_server_SOURCES = flipro-server.c
flipro_server_CPPFLAGS = $(COMMON_DEFS)
flipro_server_LDADD = $(COMMON_LIBS)
// fli-core.h -
// flipro-core.h -
//
// Implementation of the interface to Finger Lakes Instrumentation (FLI)
// cameras in TAO (a Toolkit for Adaptive Optics).
// Implementation of the TAO (a Toolkit for Adaptive Optics) interface to
// Finger Lakes Instrumentation cameras via the LIBFLIPRO SDK.
//
//-----------------------------------------------------------------------------
//
......@@ -14,7 +14,7 @@
#include "libflipro.h"
#include "tao-fli-cameras.h" // for the prototype of tao_fli_camera_open
#include "tao-flipro-cameras.h" // for the prototype of tao_flipro_camera_open
#include "tao-threads.h" // for mutexes
#include "tao-errors.h" // for error management
#include "tao-cameras-private.h" // for the definition of tao_camera
......@@ -31,63 +31,63 @@ tao_mutex mutex = TAO_MUTEX_INITIALIZER;
static tao_status update_device_list();
// A handle fo a camera (see <libfipro.h>).
typedef int32_t fli_handle;
typedef int32_t flipro_handle;
// Number of acquisition buffers.
#define NBUFS 2
typedef struct fli_camera_ {
tao_camera base;///< A FLI camera is also a TAO camera.
fli_handle handle;///< Handle to device.
typedef struct flipro_camera_ {
tao_camera base;///< A FLIPRO camera is also a TAO camera.
flipro_handle handle;///< Handle to device.
size_t bufsiz;///< Size of acquisition buffers.
void* bufs[NBUFS];///< Acquisition buffers.
int lastbuf;///< Index of last acquisition buffer.
} fli_camera;
} flipro_camera;
// Function to deal with errors.
static void fli_error(const char* func, int code);
static void flipro_error(const char* func, int code);
// All functions of the FLI SDK return either nothing (`void`) or
// an integer code which is nonnegative on success and negative on error.
// The following macro is a helper to report errors with the name of the
// function from the FLI SDK.
#define FLI_CALL(func, args, on_error) \
// All functions of the LIBFLIPRO SDK return either nothing (`void`) or an
// integer code which is nonnegative on success and negative on error. The
// following macro is a helper to report errors with the name of the function
// from the LIBFLIPRO SDK.
#define FLIPRO_CALL(func, args, on_error) \
do { \
int code = func args; \
if (code < 0) { \
fli_error(#func, code); \
flipro_error(#func, code); \
on_error; \
} \
} while (0)
// Update exposure time and frame rate from current settings.
static tao_status update_exposure(
fli_camera* dev);
flipro_camera* dev);
// Set the exposure time (in seconds) and the frame rate (in frames per
// second).
static tao_status set_exposure(
fli_camera* dev,
flipro_camera* dev,
double exposuretime,
double framerate);
// Update the pixel binning from current settings.
static tao_status update_binning(
fli_camera* dev);
flipro_camera* dev);
// Set the pixel binning to given settings.
static tao_status set_binning(
fli_camera* dev,
flipro_camera* dev,
long xbin,
long ybin);
// Update the image area from current settings.
static tao_status update_image_area(
fli_camera* dev);
flipro_camera* dev);
// Set the the image area to given settings.
static tao_status set_image_area(
fli_camera* dev,
flipro_camera* dev,
long xoff,
long yoff,
long width,
......@@ -95,7 +95,7 @@ static tao_status set_image_area(
// Free all acquisition buffers.
static void free_buffers(
fli_camera* dev);
flipro_camera* dev);
//-----------------------------------------------------------------------------
// Declaration of private methods and of the table grouping these methods for
......@@ -134,7 +134,7 @@ static tao_status on_wait_buffer(
int drop);
static tao_camera_ops ops = {
.name = "FLICamera",
.name = "FLIPROCamera",
.initialize = on_initialize,
.finalize = on_finalize,
.reset = on_reset,
......@@ -148,9 +148,9 @@ static tao_camera_ops ops = {
//-----------------------------------------------------------------------------
// Definition of the public function to connect to a Finger Lakes
// Instrumentation (FLI) camera.
// Instrumentation camera with the LIBFLIPRO library.
tao_camera* tao_fli_camera_open(
tao_camera* tao_flipro_camera_open(
int num)
{
// First lock global resources.
......@@ -175,7 +175,7 @@ tao_camera* tao_fli_camera_open(
// Allocate camera instance with the device information provided as
// contextual data. The remaining initialization will done by the
// `on_initialize` virtual method.
cam = tao_camera_create(&ops, &device_list[num], sizeof(fli_camera));
cam = tao_camera_create(&ops, &device_list[num], sizeof(flipro_camera));
if (cam != NULL) {
// Context, i.e. device information, must no longer be referenced.
cam->ctx = NULL;
......@@ -196,8 +196,8 @@ unlock:
static tao_status on_initialize(
tao_camera* cam)
{
// The camera is a FLI camera.
fli_camera* dev = (fli_camera*)cam;
// The camera is a FLIPRO camera.
flipro_camera* dev = (flipro_camera*)cam;
// The contextual data is the device information.
FPRODEVICEINFO* devinfo = cam->ctx;
......@@ -210,7 +210,7 @@ static tao_status on_initialize(
// Open the camera.
dev->handle = -1;
FLI_CALL(FPROCam_Open,(devinfo, &dev->handle), return TAO_ERROR);
FLIPRO_CALL(FPROCam_Open,(devinfo, &dev->handle), return TAO_ERROR);
if (dev->handle < 0) {
tao_store_error(__func__, TAO_BAD_DEVICE);
return TAO_ERROR;
......@@ -219,8 +219,8 @@ static tao_status on_initialize(
// Retrieve camera capabilities.
FPROCAP cap;
uint32_t size = sizeof(cap);
FLI_CALL(FPROSensor_GetCapabilities,(dev->handle, &cap, &size),
return TAO_ERROR);
FLIPRO_CALL(FPROSensor_GetCapabilities,(dev->handle, &cap, &size),
return TAO_ERROR);
cam->info.sensorwidth = cap.uiMaxPixelImageWidth;
cam->info.sensorheight = cap.uiMaxPixelImageHeight;
......@@ -230,17 +230,17 @@ static tao_status on_initialize(
static tao_status on_finalize(
tao_camera* cam)
{
// The camera is a FLI camera.
fli_camera* dev = (fli_camera*)cam;
// The camera is a FLIPRO camera.
flipro_camera* dev = (flipro_camera*)cam;
// Free all acquisition buffers.
free_buffers(dev);
// Close the device.
if (dev->handle >= 0) {
fli_handle handle = dev->handle;
flipro_handle handle = dev->handle;
dev->handle = -1; // never close more than once
FLI_CALL(FPROCam_Close,(handle), return TAO_ERROR);
FLIPRO_CALL(FPROCam_Close,(handle), return TAO_ERROR);
}
return TAO_OK;
}
......@@ -255,8 +255,8 @@ static tao_status on_reset(
static tao_status on_update_config(
tao_camera* cam)
{
// The camera is a FLI camera.
fli_camera* dev = (fli_camera*)cam;
// The camera is a FLIPRO camera.
flipro_camera* dev = (flipro_camera*)cam;
if (update_binning(dev) != TAO_OK ||
update_image_area(dev) != TAO_OK ||
......@@ -310,8 +310,8 @@ static tao_status on_set_config(
tao_camera* cam,
const tao_camera_config* cfg)
{
// The camera is a FLI camera.
fli_camera* dev = (fli_camera*)cam;
// The camera is a FLIPRO camera.
flipro_camera* dev = (flipro_camera*)cam;
// Do we need to change the frame rate?
bool reduce_fps = (cfg->framerate < cam->info.config.framerate);
......@@ -340,7 +340,7 @@ static tao_status on_set_config(
cfg->roi.width != cam->info.config.roi.width ||
cfg->roi.height != cam->info.config.roi.height) {
if (set_image_area(dev, cfg->roi.xoff, cfg->roi.yoff,
cfg->roi.width, cfg->roi.height) != TAO_OK) {
cfg->roi.width, cfg->roi.height) != TAO_OK) {
return TAO_ERROR;
}
}
......@@ -357,13 +357,13 @@ static tao_status on_set_config(
static tao_status on_start(
tao_camera* cam)
{
// The camera is a FLI camera.
fli_camera* dev = (fli_camera*)cam;
// The camera is a FLIPRO camera.
flipro_camera* dev = (flipro_camera*)cam;
// Compute image size in bytes.
int size = FPROFrame_ComputeFrameSize(dev->handle);
if (size < 0) {
fli_error("FPROFrame_ComputeFrameSize", size);
flipro_error("FPROFrame_ComputeFrameSize", size);
return TAO_ERROR;
}
......@@ -384,18 +384,18 @@ static tao_status on_start(
dev->lastbuf = NBUFS - 1;
// Start image capture.
FLI_CALL(FPROFrame_CaptureStart,(dev->handle, 0), return TAO_ERROR);
FLIPRO_CALL(FPROFrame_CaptureStart,(dev->handle, 0), return TAO_ERROR);
return TAO_OK;
}
static tao_status on_stop(
tao_camera* cam)
{
// The camera is a FLI camera.
fli_camera* dev = (fli_camera*)cam;
// The camera is a FLIPRO camera.
flipro_camera* dev = (flipro_camera*)cam;
// Start image capture.
FLI_CALL(FPROFrame_CaptureStop,(dev->handle), return TAO_ERROR);
FLIPRO_CALL(FPROFrame_CaptureStop,(dev->handle), return TAO_ERROR);
return TAO_OK;
}
......@@ -419,7 +419,7 @@ static tao_status on_wait_buffer(
static tao_status update_device_list()
{
uint32_t num = MAX_CONNECTED_CAMERAS;
FLI_CALL(FPROCam_GetCameraList, (device_list, &num), return TAO_ERROR);
FLIPRO_CALL(FPROCam_GetCameraList, (device_list, &num), return TAO_ERROR);
if (num >= MAX_CONNECTED_CAMERAS) {
fprintf(stderr,
"Warning: There may be more than %d connected cameras. You "
......@@ -434,7 +434,7 @@ static tao_status update_device_list()
#define NANOSECONDS_PER_SECOND 1e9
static void store_exposure(
fli_camera* dev,
flipro_camera* dev,
uint64_t exposuretime_ns,
uint64_t framedelay_ns)
{
......@@ -447,19 +447,19 @@ static void store_exposure(
// Update exposure time and frame rate from current settings.
static tao_status update_exposure(
fli_camera* dev)
flipro_camera* dev)
{
uint64_t exposuretime_ns, framedelay_ns;
bool immediate;
for (int pass = 1; pass <= 2; ++pass) {
FLI_CALL(FPROCtrl_GetExposure,(dev->handle, &exposuretime_ns,
&framedelay_ns, &immediate),
FLIPRO_CALL(FPROCtrl_GetExposure,(dev->handle, &exposuretime_ns,
&framedelay_ns, &immediate),
return TAO_ERROR);
if (pass == 2 || !immediate) {
break;
}
FLI_CALL(FPROCtrl_SetExposure,(dev->handle, exposuretime_ns,
framedelay_ns, false),
FLIPRO_CALL(FPROCtrl_SetExposure,(dev->handle, exposuretime_ns,
framedelay_ns, false),
return TAO_ERROR);
}
if (immediate) {
......@@ -473,7 +473,7 @@ static tao_status update_exposure(
// Set the exposure time (in seconds) and the frame rate (in frames per
// second).
static tao_status set_exposure(
fli_camera* dev,
flipro_camera* dev,
double exposuretime,
double framerate)
{
......@@ -483,21 +483,21 @@ static tao_status set_exposure(
- exposuretime_ns;
uint64_t actual_exposuretime_ns;
uint64_t actual_framedelay_ns;
FLI_CALL(FPROCtrl_SetExposureEx,
(dev->handle, exposuretime_ns, framedelay_ns, false,
&actual_exposuretime_ns, &actual_framedelay_ns),
return TAO_ERROR);
FLIPRO_CALL(FPROCtrl_SetExposureEx,
(dev->handle, exposuretime_ns, framedelay_ns, false,
&actual_exposuretime_ns, &actual_framedelay_ns),
return TAO_ERROR);
store_exposure(dev, actual_exposuretime_ns, actual_framedelay_ns);
return TAO_OK;
}
// Update the pixel binning from current settings.
static tao_status update_binning(
fli_camera* dev)
flipro_camera* dev)
{
uint32_t xbin, ybin;
FLI_CALL(FPROSensor_GetBinning,(dev->handle, &xbin, &ybin),
return TAO_ERROR);
FLIPRO_CALL(FPROSensor_GetBinning,(dev->handle, &xbin, &ybin),
return TAO_ERROR);
dev->base.info.config.roi.xbin = xbin;
dev->base.info.config.roi.ybin = ybin;
return TAO_OK;
......@@ -505,22 +505,22 @@ static tao_status update_binning(
// Set the pixel binning to given current settings.
static tao_status set_binning(
fli_camera* dev,
flipro_camera* dev,
long xbin,
long ybin)
{
FLI_CALL(FPROSensor_SetBinning,(dev->handle, xbin, ybin),
return TAO_ERROR);
FLIPRO_CALL(FPROSensor_SetBinning,(dev->handle, xbin, ybin),
return TAO_ERROR);
return update_binning(dev);
}
// Update the image area from current settings.
static tao_status update_image_area(
fli_camera* dev)
flipro_camera* dev)
{
uint32_t xoff, yoff, width, height;
FLI_CALL(FPROFrame_GetImageArea,
(dev->handle, &xoff, &yoff, &width, &height), return TAO_ERROR);
FLIPRO_CALL(FPROFrame_GetImageArea,
(dev->handle, &xoff, &yoff, &width, &height), return TAO_ERROR);
dev->base.info.config.roi.xoff = xoff;
dev->base.info.config.roi.yoff = yoff;
dev->base.info.config.roi.width = width;
......@@ -530,20 +530,20 @@ static tao_status update_image_area(
// Set the image area to given current settings.
static tao_status set_image_area(
fli_camera* dev,
flipro_camera* dev,
long xoff,
long yoff,
long width,
long height)
{
FLI_CALL(FPROFrame_SetImageArea,
(dev->handle, xoff, yoff, width, height), return TAO_ERROR);
FLIPRO_CALL(FPROFrame_SetImageArea,
(dev->handle, xoff, yoff, width, height), return TAO_ERROR);
return update_image_area(dev);
}
// Free all acquisition buffers.
static void free_buffers(
fli_camera* dev)
flipro_camera* dev)
{
for (int i = 0; i < NBUFS; ++i) {
void* buf = dev->bufs[i];
......@@ -572,7 +572,7 @@ static void get_error_info(
}
}
static void fli_error(
static void flipro_error(
const char* func,
int code)
{
......
// fli-server.c -
// flipro-server.c -
//
// Image server forFinger Lakes Instrumentation cameras.
// Image server for Finger Lakes Instrumentation cameras via the LIBFLIPRO
// SDK.
//
//-----------------------------------------------------------------------------
//
// This file if part of TAO real-time software licensed under the MIT license
// (https://git-cral.univ-lyon1.fr/tao/tao-rt).
#include "tao-fli-cameras.h"
#include "tao-flipro-cameras.h"
#include "tao-errors.h"
#include "tao-camera-servers.h"
#include "tao-cameras-private.h"
......@@ -74,7 +75,7 @@ int main(
// Parse arguments.
char owner[TAO_OWNER_SIZE];
char const* name = "Fli%d";
char const* name = "FliPro%d";
bool debug = false;
bool fancy = true;
long devnum = -1;
......@@ -122,8 +123,8 @@ int main(
printf("\n");
printf(usage, progname);
printf("\n");
printf("Launch a server for a Finger Lakes Instrumentation (FLI) "
"camera.\n");
printf("Launch a server for a Finger Lakes Instrumentation "
"camera managed by the LIBFLIPRO SDK.\n");
printf("\n");
printf("Arguments:\n");
printf(" DEV Camera device number.\n");
......@@ -206,7 +207,7 @@ int main(
// Open the camera device. The camera state is set to "initializing" until
// the worker thread has started.
dev = tao_fli_camera_open(devnum);
dev = tao_flipro_camera_open(devnum);
if (dev == NULL) {
fprintf(stderr, "%s: Failed to open Finger Lakes Instrumentation "
"camera device %ld\n", progname, devnum);
......
// tao-fli-cameras.h -
// tao-flipro-cameras.h -
//
// Declarations of the interface to FLI (Finger Lakes Instrumentation)
// cameras in TAO (a Toolkit for Adaptive Optics).
// Declarations of the TAO (a Toolkit for Adaptive Optics) interface to Finger
// Lakes Instrumentation cameras via the LIBFLIPRO SDK.
//
//-----------------------------------------------------------------------------
//
// This file if part of TAO real-time software licensed under the MIT license
// (https://git-cral.univ-lyon1.fr/tao/tao-rt).
#ifndef TAO_FLI_CAMERAS_H_
#define TAO_FLI_CAMERAS_H_ 1
#ifndef TAO_FLIPRO_CAMERAS_H_
#define TAO_FLIPRO_CAMERAS_H_ 1
#include <tao-cameras.h>
TAO_BEGIN_DECLS
/// @defgroup FliCameras Interface to FLI (Finger Lakes Instrumentation)
/// cameras.
/// @defgroup FliCameras Interface to Finger Lakes Instrumentation cameras
/// (LIBFLIPRO).
///
/// @ingroup Cameras
///
/// @brief Interface to Fli (Finger Lakes Instrumentation) cameras.
/// @brief Interface to Finger Lakes Instrumentation cameras via the LIBFLIPRO
/// library.
///
/// @{
......@@ -36,10 +37,10 @@ TAO_BEGIN_DECLS
/// @return The address of the new (initialized) camera; `NULL` in case of
/// failure.
///
extern tao_camera* tao_fli_camera_open(int num);
extern tao_camera* tao_flipro_camera_open(int num);
/// @}
TAO_END_DECLS
#endif // TAO_FLI_CAMERAS_H_
#endif // TAO_FLIPRO_CAMERAS_H_
......@@ -170,92 +170,92 @@ AC_DEFUN([TAO_CHECK_ANDOR], [
AC_SUBST([ANDOR_LIBS], ["${ANDOR_LIBS}"])
])
# Check for Finger Lakes Instrumentation (FLI) SDK availability.
AC_DEFUN([TAO_CHECK_FLI], [
AC_ARG_ENABLE([fli],
AC_HELP_STRING([--enable-fli[[=yes|no|check|DIR]]],
[support for Finger Lakes Instrumentation (FLI) cameras @<:@default=check@:>@]),
[enable_fli=$enableval], [enable_fli=check])
if test "x$enable_fli" = x; then
AC_MSG_ERROR([empty argument for --enable-fli is not allowed])
# Check for Finger Lakes Instrumentation (LIBFLIPRO) SDK availability.
AC_DEFUN([TAO_CHECK_LIBFLIPRO], [
AC_ARG_ENABLE([libflipro],
AC_HELP_STRING([--enable-libflipro[[=yes|no|check|DIR]]],
[support for Finger Lakes Instrumentation cameras via LIBFLIPRO @<:@default=check@:>@]),
[enable_libflipro=$enableval], [enable_libflipro=check])
if test "x$enable_libflipro" = x; then
AC_MSG_ERROR([empty argument for --enable-libflipro is not allowed])