00001
00009 #ifndef __OCAMERA_H__
00010 #define __OCAMERA_H__
00011
00012
00014 struct OCameraImage
00015 {
00016 unsigned char *pData;
00017 long nSeqNr;
00018 long nTimeSec;
00019 long nTimeMicroSec;
00020 long nSize;
00021 long nStatus;
00022 long nTrigCount;
00023 };
00024
00026 struct OCameraSequenceBuffer
00027 {
00028 unsigned long nSize;
00029 void *pBuf;
00030 };
00031
00033 struct OCameraSequenceStorage
00034 {
00035 unsigned long nBufs;
00036 OCameraSequenceBuffer *pBufs;
00037 };
00038
00040 struct OCameraSampleData
00041 {
00042 unsigned long E0 : 1;
00043 unsigned long E1 : 1;
00044 unsigned long A0 : 1;
00045 unsigned long A1 : 1;
00046 unsigned long A2 : 1;
00047 unsigned long A3 : 1;
00048 };
00049
00051 struct OCameraSequenceImage
00052 {
00053 unsigned long nOfs;
00054 long nSeqNr;
00055 long nTimeSec;
00056 long nTimeMicroSec;
00057 long nSize;
00058 OCameraSampleData oSamples;
00059 OCameraSequenceImage *next;
00060 OCameraSequenceImage *prev;
00061 };
00062
00064 struct OCameraSequence
00065 {
00066 typedef enum
00067 {
00068 RES_OK = 0,
00069 RES_ERR_Z_TOO_LARGE = 1,
00070 RES_ERR_A_WRONG = 2,
00071 RES_ERR_Z_t_TOO_LARGE = 4,
00072 RES_ERR_ACQ_IMPOSSIBLE = 8,
00073 RES_ABORTED = 16,
00074 RES_FINISHED = 0,
00075 RES_NOT_INITIALIZED = 32,
00076 RES_NOT_STARTED = 64,
00077 RES_RUNNING = 128
00078 }
00079 eResult;
00080
00081 eResult result;
00082 unsigned long nImages;
00083 long nTriggerSec;
00084 long nTriggerMicroSec;
00085 OCameraSequenceImage *head;
00086 OCameraSequenceImage *tail;
00087
00088 static char *pcGetResultString(eResult enRes);
00089 };
00090
00091
00092
00093
00111 class OCamera
00112 {
00113 public:
00114
00115
00116
00118 typedef enum
00119 {
00120 CAM_TYPE_MT9V403 = 3,
00121 CAM_TYPE_GENERIC = 4,
00122 CAM_TYPE_IBIS1300 = 5,
00123 CAM_TYPE_MT9V022 = 6,
00124 CAM_TYPE_MT9V023 = 7
00125 }
00126 eCameraType;
00127
00129 typedef enum
00130 {
00131 ACQ_MODE_STOP = 1,
00132 ACQ_MODE_SINGLE_SHOT = 2,
00133 ACQ_MODE_FREE_RUN = 3,
00134 ACQ_MODE_SELECT_SHOT = 4,
00135 ACQ_MODE_FPGA_SINGLE_SHOT = 5,
00136 ACQ_MODE_FPGA_CONTINUOUS = 6,
00137 ACQ_MODE_FREE_RUN_SLAVE = 8,
00138 ACQ_MODE_SEQUENCE_MASTER = 9,
00139 ACQ_MODE_SEQUENCE_SLAVE = 10,
00140 ACQ_MODE_FREE_RUN_SLAVE_STOP = 11
00141 }
00142 eAcqMode;
00143
00145 typedef enum
00146 {
00147 TRIG_SRC_SOFTWARE = 1,
00148 TRIG_SRC_EXTERNAL_E0 = 2,
00149 TRIG_SRC_EXTERNAL_E1 = 3
00150 }
00151 eTrigSource;
00152
00154 typedef enum
00155 {
00156 TRIG_POL_ACTIVE_HIGH = 1,
00157 TRIG_POL_ACTIVE_LOW = 2
00158 }
00159 eTrigPolarity;
00160
00162 typedef enum
00163 {
00164 ILL_MODE_OFF = 1,
00165 ILL_MODE_NORMAL = 2,
00166 ILL_MODE_PULSED = 3
00167 }
00168 eIllMode;
00169
00171 typedef enum
00172 {
00173 ILL_MODE_EXT_OFF = 0,
00174 ILL_MODE_EXT_ON_POSITIVE = 1,
00175 ILL_MODE_EXT_ON_NEGATIVE = 2
00176 }
00177 eIllModeExt;
00178
00185 typedef enum
00186 {
00187 FREQU_20MHz = 0,
00188 FREQU_40MHz = 1,
00189 FREQU_50MHz = 2,
00190 FREQU_60MHz = 3
00191 }
00192 eFrequency;
00193
00195 typedef enum
00196 {
00197 JPEG_QUALITY_LOW = 0,
00198 JPEG_QUALITY_MEDIUM = 1,
00199 JPEG_QUALITY_GOOD = 2,
00200 JPEG_QUALITY_EXCELLENT = 3
00201 }
00202 eJPEGQuality;
00203
00205 typedef enum
00206 {
00207 PRIO_FIRST_POINT = 0,
00208 PRIO_LAST_POINT = 1,
00209 PRIO_LARGEST_FIRST = 2,
00212 PRIO_LARGEST_LAST = 3
00215 }
00216 ePointPriority;
00217
00219 typedef enum
00220 {
00221 DIRECTION_TOP_DOWN = 0,
00222 DIRECTION_BOTTOM_UP = 1
00223 }
00224 eProfileDirection;
00225
00229
00230
00249
00250 static OCamera *CreateCameraInterface(eCameraType eCam);
00257 virtual int Destroy() = 0;
00259
00260
00261
00262
00266
00267
00301 virtual int Open(int dFrameBufferSize = 4096*256, int dMaxBuffers = -1) = 0;
00312 virtual int Close() = 0;
00313
00331 virtual int GetImage(OCameraImage *pImage) = 0;
00341 virtual int ReleaseImage(OCameraImage *pImage) = 0;
00350 virtual int GetMaxImageCount() = 0;
00359 virtual int GetImageCount() = 0;
00360
00418 virtual int SetAcquisitionMode(eAcqMode eAcq) = 0;
00419
00429 virtual int SetTriggerSource(eTrigSource eTrig,
00430 eTrigPolarity ePol = TRIG_POL_ACTIVE_HIGH) = 0;
00431
00438 virtual int SetIlluminationMode(eIllMode eIll) = 0;
00439
00446 virtual int SetIlluminationModeExternal(eIllModeExt eIll) = 0;
00447
00457 virtual int SetIlluminationTiming(int dDelay, int dPeriod) = 0;
00458
00467 virtual int SwitchIllumination(bool bOn) = 0;
00468
00478 virtual int SetShutterTime(int dShutter) = 0;
00479
00489 virtual int GetShutterTime(void) = 0;
00490
00504 virtual int SetCameraWindow(int dX0, int dY0, int dWidth, int dHeight) = 0;
00505
00517 virtual int SetFrameRate(int dFps) = 0;
00530 virtual int SetFrameRate(float fFps) = 0;
00531
00539 virtual int SetTriggerDelay(int dDelay) = 0;
00540
00551 virtual int SetGain(int dFactor) = 0;
00552
00565 virtual int SetReadTimeout(int dTimeout) = 0;
00566
00573 virtual int GetDriverFileDescriptor() = 0;
00574
00584 virtual int SetCircularOverwrite(bool bOverwrite) = 0;
00585
00586
00600 virtual int SetJPEG(bool bEnable, eJPEGQuality eQuality = JPEG_QUALITY_MEDIUM, bool bByteStuffEnable = false) = 0;
00601
00602
00617 virtual int SetFrequency(eFrequency eFrequ) = 0;
00618
00627 virtual int GetImage2Buffer(OCameraImage *pImage) = 0;
00628
00642 virtual int ReadImageRAM(void *pDest, unsigned long ulAddr, unsigned long ulLen) = 0;
00643
00657 virtual int WriteImageRAM(void *pSrc, unsigned long ulAddr, unsigned long ulLen) = 0;
00663 virtual int InitImageRAM(void) = 0;
00669 virtual int DisableImageRAM(void) = 0;
00676 virtual int GetImageToImageRAM(unsigned long ulAddr) = 0;
00677
00679 virtual int Diag() = 0;
00680
00681
00690 virtual int SequenceInit(OCameraSequenceStorage &oStore) = 0;
00691
00706 virtual int SequenceStart(long long dt, long long Z, bool bPrePost, bool bStartStop) = 0;
00707
00709 virtual int SequenceTrigger() = 0;
00710
00712 virtual int SequenceWaitFinish() = 0;
00713
00724 virtual int SequenceIsFinished() = 0;
00725
00733 virtual int SequenceGetResult(OCameraSequence &oSeq) = 0;
00734
00736 virtual int SequenceAbort() = 0;
00737
00739 virtual int SequenceCleanup() = 0;
00740
00748 virtual int ResetSequenceCounter() = 0;
00749
00764 virtual int PurgeImages() = 0;
00765
00776 virtual int CalibrateSensor() = 0;
00777
00792 virtual int SetSensorRegister(const char *pName, unsigned long nValue) = 0;
00793
00809 virtual int GetSensorRegister(const char *pName, unsigned long *pValue) = 0;
00810
00817 virtual char** GetSensorRegisterNames() = 0;
00818
00834 virtual int TriggerImage() = 0;
00835
00845 virtual int TriggerImageAbort() = 0;
00846
00894 virtual int SetupLaserProfiling(bool bEnable,
00895 int dX0, int dY0, int dWidth, int dHeight,
00896 ePointPriority ePrio, eProfileDirection eDir,
00897 int dThreshMin, int dThreshMax,
00898 int dAreaMin, int dAreaMax) = 0;
00899
00900
00927 virtual int SetHardwareApplet(bool bEnable, unsigned long nMaxSize) = 0;
00928
00929
00946 virtual int SetMedian(bool bEnable) = 0;
00947
00948
00973 virtual int SetTriggerWindow(int dX0, int dY0,
00974 int dWidth, int dHeight,
00975 int dThreshMin, int dThreshMax) = 0;
00976
00978
00979 };
00980
00981
00982
00983
00987 class OCameraTools
00988 {
00989 public:
00990
00991 typedef enum
00992 {
00993 BAYER_PATTERN_GRGR = 1,
00994 BAYER_PATTERN_BGBG = 2,
00995 BAYER_PATTERN_RGRG = 3,
00996 BAYER_PATTERN_GBGB = 4
00997 }
00998 eBayerPattern;
00999
01000 public:
01008 static void Bayer2RGB(unsigned char *bayer, unsigned char *rgb,
01009 int width, int height,
01010 eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01011
01031 static void Bayer2RGBWhiteBalance(unsigned char *bayer, unsigned char *rgb,
01032 int width, int height,
01033 int red, int green, int blue,
01034 eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01035
01054 static int Bayer2RGBBuiltIn(unsigned char *bayer, unsigned char *rgb,
01055 int width, int height,
01056 eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01057
01074 static int GetWhiteBalanceFactors(int *red, int *green, int *blue);
01075
01086 static int StoreWhiteBalanceFactors(int red, int green, int blue);
01087 };
01088
01089
01090
01091
01108 class OCameraInputs
01109 {
01110 public:
01111
01113 typedef enum
01114 {
01115 INPUT_I0 = 1,
01116 INPUT_I1 = 2,
01117 INPUT_I0_RE = 4,
01118 INPUT_I0_FE = 8,
01119 INPUT_I1_RE = 16,
01120 INPUT_I1_FE = 32,
01121 OVERLOAD = 64,
01122
01123 INPUT_ALL = INPUT_I0 | INPUT_I1
01124 }
01125 t_enCameraInput;
01126
01127
01129 static OCameraInputs *poCreateInterface();
01136 virtual void Destroy() = 0;
01137
01146 virtual int iOpen() = 0;
01148 virtual int iClose() = 0;
01149
01161 virtual int iGetInputs() = 0;
01162
01171 virtual int iGetInput(t_enCameraInput enIn) = 0;
01172
01181 virtual int iSetTimeout(int iTimeout) = 0;
01182
01193 virtual int iWaitForInput(t_enCameraInput enIn, int iState) = 0;
01194
01210 virtual int iWaitForInputs(int iMask, int iState) = 0;
01211
01220 virtual int iWaitForInputChange(t_enCameraInput enIn) = 0;
01221
01231 virtual int iWaitForInputsChange(int iMask) = 0;
01232
01240 virtual int iClearEdges(int iMask) = 0;
01241
01246 virtual int GetDriverFileDescriptor() = 0;
01247 };
01248
01249
01250
01251
01268 class OCameraOutputs
01269 {
01270 public:
01271
01273 typedef enum
01274 {
01275 OUTPUT_O0 = 1,
01276 OUTPUT_O1 = 2,
01277 OUTPUT_O2 = 4,
01278 OUTPUT_O3 = 8,
01279
01280 OUTPUT_OVERLOAD_UNLOCK = 16,
01281
01282 OUTPUT_ALL = OUTPUT_O0 | OUTPUT_O1 | OUTPUT_O2 | OUTPUT_O3
01283 }
01284 t_enCameraOutput;
01285
01286
01290 static OCameraOutputs *poCreateInterface();
01298 virtual void Destroy() = 0;
01299
01309 virtual int iOpen() = 0;
01313 virtual int iClose() = 0;
01314
01323 virtual int iGetOutputs() = 0;
01324
01333 virtual int iGetOutput(t_enCameraOutput enOut) = 0;
01334
01345 virtual int iSetOutputs(int iMask, int iState) = 0;
01346
01353 virtual int iSetOutput(t_enCameraOutput enOut, int iState) = 0;
01354
01361 virtual int iToggleOutputs(int iMask) = 0;
01362
01368 virtual int iToggleOutput(t_enCameraOutput enOut) = 0;
01369
01370 };
01371
01372
01373
01374
01392 class OCameraLEDs
01393 {
01394 public:
01395
01397 typedef enum
01398 {
01399 LED_0_RED = 0x01,
01400 LED_0_GREEN = 0x02,
01401 LED_1_RED = 0x04,
01402 LED_1_GREEN = 0x08,
01403 LED_2_RED = 0x10,
01404 LED_2_YELLOW = 0x20,
01405 LED_3_RED = 0x40,
01406 LED_3_YELLOW = 0x80,
01407
01408 LED_ALL_RED = LED_0_RED | LED_1_RED | LED_2_RED | LED_3_RED,
01409 LED_ALL_GREEN = LED_0_GREEN | LED_1_GREEN,
01410 LED_ALL_YELLOW = LED_2_YELLOW | LED_3_YELLOW,
01411 LED_ALL = LED_ALL_RED | LED_ALL_GREEN | LED_ALL_YELLOW
01412 }
01413 t_enCameraLED;
01414
01415
01419 static OCameraLEDs *poCreateInterface();
01427 virtual void Destroy() = 0;
01428
01438 virtual int iOpen() = 0;
01442 virtual int iClose() = 0;
01443
01452 virtual int iGetLEDs() = 0;
01453
01462 virtual int iGetLED(t_enCameraLED enLED) = 0;
01463
01472 virtual int iSetLEDs(int iMask, int iState) = 0;
01473
01480 virtual int iSetLED(t_enCameraLED enLED, int iState) = 0;
01481
01488 virtual int iToggleLEDs(int iMask) = 0;
01489
01495 virtual int iToggleLED(t_enCameraLED enLED) = 0;
01496 };
01497
01498 #endif // __OCAMERA_H__