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
00420 virtual int SetAcquisitionMode(eAcqMode eAcq) = 0;
00421
00431 virtual int SetTriggerSource(eTrigSource eTrig,
00432 eTrigPolarity ePol = TRIG_POL_ACTIVE_HIGH) = 0;
00433
00440 virtual int SetIlluminationMode(eIllMode eIll) = 0;
00441
00448 virtual int SetIlluminationModeExternal(eIllModeExt eIll) = 0;
00449
00459 virtual int SetIlluminationTiming(int dDelay, int dPeriod) = 0;
00460
00469 virtual int SwitchIllumination(bool bOn) = 0;
00470
00480 virtual int SetShutterTime(int dShutter) = 0;
00481
00491 virtual int GetShutterTime(void) = 0;
00492
00506 virtual int SetCameraWindow(int dX0, int dY0, int dWidth, int dHeight) = 0;
00507
00519 virtual int SetFrameRate(int dFps) = 0;
00532 virtual int SetFrameRate(float fFps) = 0;
00533
00541 virtual int SetTriggerDelay(int dDelay) = 0;
00542
00553 virtual int SetGain(int dFactor) = 0;
00554
00567 virtual int SetReadTimeout(int dTimeout) = 0;
00568
00575 virtual int GetDriverFileDescriptor() = 0;
00576
00586 virtual int SetCircularOverwrite(bool bOverwrite) = 0;
00587
00588
00602 virtual int SetJPEG(bool bEnable, eJPEGQuality eQuality = JPEG_QUALITY_MEDIUM, bool bByteStuffEnable = false) = 0;
00603
00604
00619 virtual int SetFrequency(eFrequency eFrequ) = 0;
00620
00629 virtual int GetImage2Buffer(OCameraImage *pImage) = 0;
00630
00644 virtual int ReadImageRAM(void *pDest, unsigned long ulAddr, unsigned long ulLen) = 0;
00645
00659 virtual int WriteImageRAM(void *pSrc, unsigned long ulAddr, unsigned long ulLen) = 0;
00665 virtual int InitImageRAM(void) = 0;
00671 virtual int DisableImageRAM(void) = 0;
00678 virtual int GetImageToImageRAM(unsigned long ulAddr) = 0;
00679
00681 virtual int Diag() = 0;
00682
00683
00692 virtual int SequenceInit(OCameraSequenceStorage &oStore) = 0;
00693
00708 virtual int SequenceStart(long long dt, long long Z, bool bPrePost, bool bStartStop) = 0;
00709
00711 virtual int SequenceTrigger() = 0;
00712
00714 virtual int SequenceWaitFinish() = 0;
00715
00726 virtual int SequenceIsFinished() = 0;
00727
00735 virtual int SequenceGetResult(OCameraSequence &oSeq) = 0;
00736
00738 virtual int SequenceAbort() = 0;
00739
00741 virtual int SequenceCleanup() = 0;
00742
00750 virtual int ResetSequenceCounter() = 0;
00751
00766 virtual int PurgeImages() = 0;
00767
00778 virtual int CalibrateSensor() = 0;
00779
00794 virtual int SetSensorRegister(const char *pName, unsigned long nValue) = 0;
00795
00811 virtual int GetSensorRegister(const char *pName, unsigned long *pValue) = 0;
00812
00819 virtual char** GetSensorRegisterNames() = 0;
00820
00836 virtual int TriggerImage() = 0;
00837
00847 virtual int TriggerImageAbort() = 0;
00848
00896 virtual int SetupLaserProfiling(bool bEnable,
00897 int dX0, int dY0, int dWidth, int dHeight,
00898 ePointPriority ePrio, eProfileDirection eDir,
00899 int dThreshMin, int dThreshMax,
00900 int dAreaMin, int dAreaMax) = 0;
00901
00902
00929 virtual int SetHardwareApplet(bool bEnable, unsigned long nMaxSize) = 0;
00930
00931
00948 virtual int SetMedian(bool bEnable) = 0;
00949
00950
00975 virtual int SetTriggerWindow(int dX0, int dY0,
00976 int dWidth, int dHeight,
00977 int dThreshMin, int dThreshMax) = 0;
00978
00979
00990 virtual int WaitForNImages(int nImages) = 0;
00991
00993
00994 };
00995
00996
00997
00998
01002 class OCameraTools
01003 {
01004 public:
01005
01006 typedef enum
01007 {
01008 BAYER_PATTERN_GRGR = 1,
01009 BAYER_PATTERN_BGBG = 2,
01010 BAYER_PATTERN_RGRG = 3,
01011 BAYER_PATTERN_GBGB = 4
01012 }
01013 eBayerPattern;
01014
01015 public:
01023 static void Bayer2RGB(unsigned char *bayer, unsigned char *rgb,
01024 int width, int height,
01025 eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01026
01046 static void Bayer2RGBWhiteBalance(unsigned char *bayer, unsigned char *rgb,
01047 int width, int height,
01048 int red, int green, int blue,
01049 eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01050
01069 static int Bayer2RGBBuiltIn(unsigned char *bayer, unsigned char *rgb,
01070 int width, int height,
01071 eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01072
01089 static int GetWhiteBalanceFactors(int *red, int *green, int *blue);
01090
01101 static int StoreWhiteBalanceFactors(int red, int green, int blue);
01102 };
01103
01104
01105
01106
01123 class OCameraInputs
01124 {
01125 public:
01126
01128 typedef enum
01129 {
01130 INPUT_I0 = 1,
01131 INPUT_I1 = 2,
01132 INPUT_I0_RE = 4,
01133 INPUT_I0_FE = 8,
01134 INPUT_I1_RE = 16,
01135 INPUT_I1_FE = 32,
01136 OVERLOAD = 64,
01137
01138 INPUT_ALL = INPUT_I0 | INPUT_I1
01139 }
01140 t_enCameraInput;
01141
01142
01144 static OCameraInputs *poCreateInterface();
01151 virtual void Destroy() = 0;
01152
01161 virtual int iOpen() = 0;
01163 virtual int iClose() = 0;
01164
01176 virtual int iGetInputs() = 0;
01177
01186 virtual int iGetInput(t_enCameraInput enIn) = 0;
01187
01196 virtual int iSetTimeout(int iTimeout) = 0;
01197
01208 virtual int iWaitForInput(t_enCameraInput enIn, int iState) = 0;
01209
01225 virtual int iWaitForInputs(int iMask, int iState) = 0;
01226
01235 virtual int iWaitForInputChange(t_enCameraInput enIn) = 0;
01236
01246 virtual int iWaitForInputsChange(int iMask) = 0;
01247
01255 virtual int iClearEdges(int iMask) = 0;
01256
01261 virtual int GetDriverFileDescriptor() = 0;
01262 };
01263
01264
01265
01266
01283 class OCameraOutputs
01284 {
01285 public:
01286
01288 typedef enum
01289 {
01290 OUTPUT_O0 = 1,
01291 OUTPUT_O1 = 2,
01292 OUTPUT_O2 = 4,
01293 OUTPUT_O3 = 8,
01294
01295 OUTPUT_OVERLOAD_UNLOCK = 16,
01296
01297 OUTPUT_ALL = OUTPUT_O0 | OUTPUT_O1 | OUTPUT_O2 | OUTPUT_O3
01298 }
01299 t_enCameraOutput;
01300
01301
01305 static OCameraOutputs *poCreateInterface();
01313 virtual void Destroy() = 0;
01314
01324 virtual int iOpen() = 0;
01328 virtual int iClose() = 0;
01329
01338 virtual int iGetOutputs() = 0;
01339
01348 virtual int iGetOutput(t_enCameraOutput enOut) = 0;
01349
01360 virtual int iSetOutputs(int iMask, int iState) = 0;
01361
01368 virtual int iSetOutput(t_enCameraOutput enOut, int iState) = 0;
01369
01376 virtual int iToggleOutputs(int iMask) = 0;
01377
01383 virtual int iToggleOutput(t_enCameraOutput enOut) = 0;
01384
01385 };
01386
01387
01388
01389
01407 class OCameraLEDs
01408 {
01409 public:
01410
01412 typedef enum
01413 {
01414 LED_0_RED = 0x01,
01415 LED_0_GREEN = 0x02,
01416 LED_1_RED = 0x04,
01417 LED_1_GREEN = 0x08,
01418 LED_2_RED = 0x10,
01419 LED_2_YELLOW = 0x20,
01420 LED_3_RED = 0x40,
01421 LED_3_YELLOW = 0x80,
01422
01423 LED_ALL_RED = LED_0_RED | LED_1_RED | LED_2_RED | LED_3_RED,
01424 LED_ALL_GREEN = LED_0_GREEN | LED_1_GREEN,
01425 LED_ALL_YELLOW = LED_2_YELLOW | LED_3_YELLOW,
01426 LED_ALL = LED_ALL_RED | LED_ALL_GREEN | LED_ALL_YELLOW
01427 }
01428 t_enCameraLED;
01429
01430
01434 static OCameraLEDs *poCreateInterface();
01442 virtual void Destroy() = 0;
01443
01453 virtual int iOpen() = 0;
01457 virtual int iClose() = 0;
01458
01467 virtual int iGetLEDs() = 0;
01468
01477 virtual int iGetLED(t_enCameraLED enLED) = 0;
01478
01487 virtual int iSetLEDs(int iMask, int iState) = 0;
01488
01495 virtual int iSetLED(t_enCameraLED enLED, int iState) = 0;
01496
01503 virtual int iToggleLEDs(int iMask) = 0;
01504
01510 virtual int iToggleLED(t_enCameraLED enLED) = 0;
01511 };
01512
01513 #endif // __OCAMERA_H__