00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 #ifndef _LIBFLI_LIBFLI_H_
00045 #define _LIBFLI_LIBFLI_H_
00046
00047 #include <string.h>
00048
00049 #ifdef WIN32
00050 #define LIBFLIAPI __declspec(dllexport) long __stdcall
00051 #endif
00052
00053 #include "libfli.h"
00054 #include "libfli-sys.h"
00055 #include "libfli-debug.h"
00056
00057 #define __STRINGIFY(x) ___STRINGIFY(x)
00058 #define ___STRINGIFY(x) #x
00059
00060 #define __LIBFLIVER_MAJOR__ 1
00061 #define __LIBFLIVER__ __STRINGIFY(__LIBFLIVER_MAJOR__) "." \
00062 __STRINGIFY(__LIBFLI_MINOR__)
00063
00064 #define CHKDEVICE(xdev) \
00065 do { \
00066 if((xdev < 0) || (xdev >= MAX_OPEN_DEVICES)) \
00067 { \
00068 debug(FLIDEBUG_WARN, \
00069 "Attempt to use a device out of range (%d)", xdev); \
00070 return -EINVAL; \
00071 } \
00072 if(devices[xdev] == NULL) \
00073 { \
00074 debug(FLIDEBUG_WARN, \
00075 "Attempt to use a NULL device (%d)", xdev); \
00076 return -EINVAL; \
00077 } \
00078 } while(0)
00079
00080 #define CHKFUNCTION(func) \
00081 do { \
00082 if(func == NULL) \
00083 { \
00084 debug(FLIDEBUG_WARN, \
00085 "Attempt to use a NULL function (" #func ")"); \
00086 return -EINVAL; \
00087 } \
00088 } while(0)
00089
00090 #define IO(dev, buf, wlen, rlen) \
00091 do { \
00092 int err; \
00093 if((err = devices[dev]->fli_io(dev, buf, wlen, rlen))) \
00094 { \
00095 debug(FLIDEBUG_WARN, "Communication error: %d [%s]", \
00096 err, strerror(-err)); \
00097 return err; \
00098 } \
00099 } while(0)
00100
00101 #define COMMAND(function) \
00102 do { \
00103 int err; \
00104 if((err = function)) \
00105 { \
00106 debug(FLIDEBUG_WARN, \
00107 "Function `" #function "' failed, error: %d [%s]", \
00108 err, strerror(-err)); \
00109 return err; \
00110 } \
00111 } while(0)
00112
00113 #define FLIUSB_VENDORID 0xf18
00114 #define FLIUSB_CAM_ID 0x02
00115 #define FLIUSB_FILTER_ID 0x07
00116 #define FLIUSB_FOCUSER_ID 0x06
00117
00118 #define MAX_OPEN_DEVICES (32)
00119 #define MAX_SEARCH_LIST (16)
00120
00121
00122 typedef struct {
00123 long type;
00124 long fwrev;
00125 long hwrev;
00126 long devid;
00127 long serno;
00128 char *model;
00129 char *devnam;
00130 } flidevinfo_t;
00131
00132
00133 typedef struct {
00134 char *name;
00135 long domain;
00136 flidevinfo_t devinfo;
00137 long io_timeout;
00138 void *io_data;
00139 void *device_data;
00140 void *sys_data;
00141
00142
00143 long (*fli_lock)(flidev_t dev);
00144 long (*fli_unlock)(flidev_t dev);
00145
00146
00147 long (*fli_io)(flidev_t dev, void *buf, long *wlen, long *rlen);
00148
00149
00150 long (*fli_open)(flidev_t dev);
00151 long (*fli_close)(flidev_t dev);
00152 long (*fli_command)(flidev_t dev, int cmd, int argc, ...);
00153 } flidevdesc_t;
00154
00155 extern const char* version;
00156
00157 extern flidevdesc_t *devices[MAX_OPEN_DEVICES];
00158 #define DEVICE devices[dev]
00159
00160
00161 #define FLI_COMMANDS \
00162 FLI_COMMAND(FLI_NONE, 0) \
00163 FLI_COMMAND(FLI_GET_PIXEL_SIZE, 2) \
00164 FLI_COMMAND(FLI_GET_ARRAY_AREA, 4) \
00165 FLI_COMMAND(FLI_GET_VISIBLE_AREA, 4) \
00166 FLI_COMMAND(FLI_SET_EXPOSURE_TIME, 1) \
00167 FLI_COMMAND(FLI_SET_IMAGE_AREA, 4) \
00168 FLI_COMMAND(FLI_SET_HBIN, 1) \
00169 FLI_COMMAND(FLI_SET_VBIN, 1) \
00170 FLI_COMMAND(FLI_SET_FRAME_TYPE, 1) \
00171 FLI_COMMAND(FLI_CANCEL_EXPOSURE, 0) \
00172 FLI_COMMAND(FLI_GET_EXPOSURE_STATUS, 1) \
00173 FLI_COMMAND(FLI_SET_TEMPERATURE, 1) \
00174 FLI_COMMAND(FLI_GET_TEMPERATURE, 1) \
00175 FLI_COMMAND(FLI_GRAB_ROW, 2) \
00176 FLI_COMMAND(FLI_EXPOSE_FRAME, 0) \
00177 FLI_COMMAND(FLI_FLUSH_ROWS, 2) \
00178 FLI_COMMAND(FLI_SET_FLUSHES, 1) \
00179 FLI_COMMAND(FLI_SET_BIT_DEPTH, 1) \
00180 FLI_COMMAND(FLI_READ_IOPORT, 1) \
00181 FLI_COMMAND(FLI_WRITE_IOPORT, 1) \
00182 FLI_COMMAND(FLI_CONFIGURE_IOPORT, 1) \
00183 FLI_COMMAND(FLI_CONTROL_SHUTTER, 1) \
00184 FLI_COMMAND(FLI_CONTROL_BGFLUSH, 1) \
00185 FLI_COMMAND(FLI_SET_FILTER_POS, 1) \
00186 FLI_COMMAND(FLI_GET_FILTER_POS, 1) \
00187 FLI_COMMAND(FLI_GET_FILTER_COUNT, 1) \
00188 FLI_COMMAND(FLI_STEP_MOTOR, 1) \
00189 FLI_COMMAND(FLI_GET_STEPPER_POS, 1) \
00190 FLI_COMMAND(FLI_HOME_FOCUSER, 0)
00191
00192
00193 enum {
00194 #define FLI_COMMAND(name, args) name,
00195 FLI_COMMANDS
00196 #undef FLI_COMMAND
00197 };
00198
00199 #endif