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
00094
00095
00113 class OCamera
00114 {
00115 public:
00116
00117
00118
00120 typedef enum
00121 {
00122 CAM_TYPE_MT9V403 = 3,
00123 CAM_TYPE_GENERIC = 4,
00124 CAM_TYPE_IBIS1300 = 5,
00125 CAM_TYPE_MT9V022 = 6,
00126 CAM_TYPE_MT9V023 = 7,
00127 }
00128 eCameraType;
00129
00131 typedef enum
00132 {
00133 ACQ_MODE_STOP = 1,
00134 ACQ_MODE_SINGLE_SHOT = 2,
00135 ACQ_MODE_FREE_RUN = 3,
00136 ACQ_MODE_SELECT_SHOT = 4,
00137 ACQ_MODE_FPGA_SINGLE_SHOT = 5,
00138 ACQ_MODE_FPGA_CONTINUOUS = 6,
00139 ACQ_MODE_FREE_RUN_SLAVE = 8,
00140 ACQ_MODE_SEQUENCE_MASTER = 9,
00141 ACQ_MODE_SEQUENCE_SLAVE = 10,
00142 ACQ_MODE_FREE_RUN_SLAVE_STOP = 11,
00143 ACQ_MODE_Q3D_SNAPSHOT = 12
00144 }
00145 eAcqMode;
00146
00148 typedef enum
00149 {
00150 TRIG_SRC_SOFTWARE = 1,
00151 TRIG_SRC_EXTERNAL_E0 = 2,
00152 TRIG_SRC_EXTERNAL_E1 = 3
00153 }
00154 eTrigSource;
00155
00157 typedef enum
00158 {
00159 TRIG_POL_ACTIVE_HIGH = 1,
00160 TRIG_POL_ACTIVE_LOW = 2
00161 }
00162 eTrigPolarity;
00163
00165 typedef enum
00166 {
00167 ILL_MODE_OFF = 1,
00168 ILL_MODE_NORMAL = 2,
00169 ILL_MODE_PULSED = 3
00170 }
00171 eIllMode;
00172
00174 typedef enum
00175 {
00176 ILL_MODE_EXT_OFF = 0,
00177 ILL_MODE_EXT_ON_POSITIVE = 1,
00178 ILL_MODE_EXT_ON_NEGATIVE = 2
00179 }
00180 eIllModeExt;
00181
00188 typedef enum
00189 {
00190 FREQU_20MHz = 0,
00191 FREQU_40MHz = 1,
00192 FREQU_50MHz = 2,
00193 FREQU_60MHz = 3
00194 }
00195 eFrequency;
00196
00198 typedef enum
00199 {
00200 JPEG_QUALITY_LOW = 0,
00201 JPEG_QUALITY_MEDIUM = 1,
00202 JPEG_QUALITY_GOOD = 2,
00203 JPEG_QUALITY_EXCELLENT = 3
00204 }
00205 eJPEGQuality;
00206
00208 typedef enum
00209 {
00210 PRIO_FIRST_POINT = 0,
00211 PRIO_LAST_POINT = 1,
00212 PRIO_LARGEST_FIRST = 2,
00215 PRIO_LARGEST_LAST = 3
00218 }
00219 ePointPriority;
00220
00222 typedef enum
00223 {
00224 DIRECTION_TOP_DOWN = 0,
00225 DIRECTION_BOTTOM_UP = 1
00226 }
00227 eProfileDirection;
00228
00230 typedef enum
00231 {
00232 LASER_OUTPUT_16_4 = 0x04,
00233 LASER_OUTPUT_8_0 = 0x10,
00234 LASER_OUTPUT_8_1 = 0x11,
00235 LASER_OUTPUT_8_2 = 0x12,
00236 LASER_OUTPUT_8_3 = 0x13,
00237 LASER_OUTPUT_8_4 = 0x14
00238 }
00239 eLaserOutputFormat;
00240
00242 typedef enum
00243 {
00244 FILTER_OFF = 0,
00245 FILTER_BINARIZE_ONLY = 1,
00246 FILTER_MEDIAN = 2,
00247 FILTER_MEAN = 3,
00248 FILTER_SNN = 4,
00249 FILTER_SOBEL = 5,
00250 FILTER_RESERVED_1 = 6,
00251 FILTER_RESERVED_2 = 7,
00252 FILTER_RESERVED_3 = 8
00253 }
00254 eFilterType;
00255
00257 typedef enum
00258 {
00259 BAYER_OUTPUT_RAW = 0,
00260 BAYER_OUTPUT_H = 1,
00261 BAYER_OUTPUT_S = 2,
00262 BAYER_OUTPUT_V = 3,
00263 BAYER_OUTPUT_I = 4,
00264 BAYER_OUTPUT_R = 5,
00265 BAYER_OUTPUT_G = 6,
00266 BAYER_OUTPUT_B = 7
00267 }
00268 eBayer2XType;
00269
00271 typedef enum
00272 {
00273 BAYER_PATTERN_GRGR = 1,
00274 BAYER_PATTERN_BGBG = 2,
00275 BAYER_PATTERN_RGRG = 3,
00276 BAYER_PATTERN_GBGB = 4
00277 }
00278 eBayerPattern;
00279
00281 typedef enum
00282 {
00283 APPLET_IN16_OUT32_INT = 0,
00284 APPLET_IN8_OUT32_INT = 1,
00285 APPLET_IN16_OUT16 = 2,
00286 APPLET_IN8_OUT16 = 3
00287 }
00288 eAppletType;
00289
00291 typedef enum
00292 {
00293 CORRECTION_REPLACE = 0,
00294 CORRECTION_MASK_AND = 1,
00295 CORRECTION_MASK_OR = 2,
00296 CORRECTION_RESERVED_1 = 3
00297 }
00298 eCorrectionType;
00299
00301 typedef enum
00302 {
00303 SPLIT_OFF = 0,
00304 SPLIT_RAW = 1,
00305 SPLIT_PROCESSED = 2,
00306 }
00307 eSplitType;
00308
00310 typedef struct sFilterParam
00311 {
00312 unsigned long nNumParam;
00313 unsigned long nParam1;
00314 unsigned long nParam2;
00315 } sFilterParamType;
00316
00318 typedef struct sBinarizationParam
00319 {
00320 bool bInvert;
00321 unsigned char nNumThreshold;
00322 unsigned char nThreshold1;
00323 unsigned char nThreshold2;
00324 } sBinarizationParamType;
00325
00327 typedef struct sCalibrateSensorParam
00328 {
00329 unsigned long nNumParam;
00330 unsigned long nParam1;
00331 unsigned long nParam2;
00332 } sCalibrateSensorParamType;
00333
00334
00338
00339
00358
00359 static OCamera *CreateCameraInterface(eCameraType eCam);
00366 virtual int Destroy() = 0;
00368
00369
00370
00371
00375
00376
00410 virtual int Open(int dFrameBufferSize = 4096*256, int dMaxBuffers = -1) = 0;
00411
00422 virtual int Close() = 0;
00423
00441 virtual int GetImage(OCameraImage *pImage) = 0;
00442
00452 virtual int ReleaseImage(OCameraImage *pImage) = 0;
00453
00467 virtual int GetNImages(OCameraImage **pImages, int dMaxImages) = 0;
00468
00478 virtual int ReleaseNImages(OCameraImage **pImages, int dImages) = 0;
00479
00488 virtual int GetMaxImageCount() = 0;
00489
00498 virtual int GetImageCount() = 0;
00499
00559 virtual int SetAcquisitionMode(eAcqMode eAcq) = 0;
00560
00570 virtual int SetTriggerSource(eTrigSource eTrig,
00571 eTrigPolarity ePol = TRIG_POL_ACTIVE_HIGH) = 0;
00572
00579 virtual int SetIlluminationMode(eIllMode eIll) = 0;
00580
00587 virtual int SetIlluminationModeExternal(eIllModeExt eIll) = 0;
00588
00598 virtual int SetIlluminationTiming(int dDelay, int dPeriod) = 0;
00599
00608 virtual int SwitchIllumination(bool bOn) = 0;
00609
00619 virtual int SetShutterTime(int dShutter) = 0;
00620
00630 virtual int GetShutterTime(void) = 0;
00631
00645 virtual int SetCameraWindow(int dX0, int dY0, int dWidth, int dHeight) = 0;
00646
00658 virtual int SetFrameRate(int dFps) = 0;
00659
00672 virtual int SetFrameRate(float fFps) = 0;
00673
00681 virtual int SetTriggerDelay(int dDelay) = 0;
00682
00693 virtual int SetGain(int dFactor) = 0;
00694
00707 virtual int InitColor() = 0;
00708
00721 virtual int SetReadTimeout(int dTimeout) = 0;
00722
00729 virtual int GetDriverFileDescriptor() = 0;
00730
00740 virtual int SetCircularOverwrite(bool bOverwrite) = 0;
00741
00761 virtual int SetJPEG(bool bEnable, eJPEGQuality eQuality = JPEG_QUALITY_MEDIUM,
00762 bool bByteStuffEnable = false, eBayerPattern ePattern = BAYER_PATTERN_GRGR,
00763 bool bForceGreyscale = false) = 0;
00764
00779 virtual int SetFrequency(eFrequency eFrequ) = 0;
00780
00789 virtual int GetImage2Buffer(OCameraImage *pImage) = 0;
00790
00805 virtual int ReadImageRAM(void *pDest, unsigned long ulAddr, unsigned long ulLen) = 0;
00806
00821 virtual int WriteImageRAM(void *pSrc, unsigned long ulAddr, unsigned long ulLen) = 0;
00822
00840 virtual int ReadImageRAMReducedData(void *pDest, unsigned long ulAddr, unsigned long ulLen,
00841 unsigned long *ulRetLen) = 0;
00842
00856 virtual int ImageRAMToImageRAM(unsigned long ulSrcAddr, unsigned long ulSrcLen,
00857 unsigned long ulDestAddr, unsigned long ulDestLen) = 0;
00858
00867 virtual int InitImageRAM(void) = 0;
00874 virtual int DisableImageRAM(void) = 0;
00883 virtual int GetImageToImageRAM(unsigned long ulAddr) = 0;
00884
00886 virtual int Diag() = 0;
00887
00888
00897 virtual int SequenceInit(OCameraSequenceStorage &oStore) = 0;
00898
00913 virtual int SequenceStart(long long dt, long long Z, bool bPrePost, bool bStartStop) = 0;
00914
00916 virtual int SequenceTrigger() = 0;
00917
00919 virtual int SequenceWaitFinish() = 0;
00920
00931 virtual int SequenceIsFinished() = 0;
00932
00940 virtual int SequenceGetResult(OCameraSequence &oSeq) = 0;
00941
00943 virtual int SequenceAbort() = 0;
00944
00946 virtual int SequenceCleanup() = 0;
00947
00955 virtual int ResetSequenceCounter() = 0;
00956
00971 virtual int PurgeImages() = 0;
00972
00983 virtual int CalibrateSensor(sCalibrateSensorParamType *pParam = 0) = 0;
00984
00999 virtual int SetSensorRegister(const char *pName, unsigned long nValue) = 0;
01000
01016 virtual int GetSensorRegister(const char *pName, unsigned long *pValue) = 0;
01017
01024 virtual char** GetSensorRegisterNames() = 0;
01025
01041 virtual int TriggerImage() = 0;
01042
01052 virtual int TriggerImageAbort() = 0;
01053
01108 virtual int SetupLaserProfiling(bool bEnable,
01109 int dX0, int dY0, int dWidth, int dHeight,
01110 ePointPriority ePrio, eProfileDirection eDir,
01111 int dThreshMin, int dThreshMax,
01112 int dAreaMin, int dAreaMax, eLaserOutputFormat dSubRes = LASER_OUTPUT_16_4,
01113 unsigned char *pRefData = 0) = 0;
01114
01115
01143 virtual int SetHardwareApplet(bool bEnable, unsigned long nMaxSize, eAppletType eApplet = APPLET_IN16_OUT32_INT) = 0;
01144
01145
01165 virtual int SetMedian(bool bEnable) = 0;
01166
01185 virtual int SetFilter(eFilterType eFilter, sFilterParamType *pParam = 0) = 0;
01186
01200 virtual int SetBinarization(bool bEnable, sBinarizationParamType *pParam = 0) = 0;
01201
01213 virtual int SetBayer2X(eBayer2XType eBayer2xOutput, eBayerPattern ePattern) = 0;
01214
01229 virtual int SetWhiteBalance(eBayerPattern ePattern, unsigned char* pLut = 0) = 0;
01230
01242 virtual int SetImageRAMPictureSize(int dWidth, int dHeight) = 0;
01243
01244
01269 virtual int SetTriggerWindow(int dX0, int dY0,
01270 int dWidth, int dHeight,
01271 int dThreshMin, int dThreshMax) = 0;
01272
01273
01284 virtual int WaitForNImages(int nImages) = 0;
01285
01286
01305 virtual int SetupImageCorrection(bool bEnable, eCorrectionType eType, unsigned long ulStartAddr, unsigned long ulSize, unsigned long ulImages) = 0;
01306
01321 virtual int SetupImageSplitting(eSplitType eType, unsigned long ulDestAddr, unsigned long ulSize) = 0;
01322
01323
01325
01326 };
01327
01328
01329
01330
01334 class OCameraTools
01335 {
01336 public:
01337
01338 typedef enum
01339 {
01340 BAYER_PATTERN_GRGR = 1,
01341 BAYER_PATTERN_BGBG = 2,
01342 BAYER_PATTERN_RGRG = 3,
01343 BAYER_PATTERN_GBGB = 4
01344 }
01345 eBayerPattern;
01346
01347 public:
01355 static void Bayer2RGB(unsigned char *bayer, unsigned char *rgb,
01356 int width, int height,
01357 eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01358
01378 static void Bayer2RGBWhiteBalance(unsigned char *bayer, unsigned char *rgb,
01379 int width, int height,
01380 int red, int green, int blue,
01381 eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01382
01401 static int Bayer2RGBBuiltIn(unsigned char *bayer, unsigned char *rgb,
01402 int width, int height,
01403 eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01404
01421 static int GetWhiteBalanceFactors(int *red, int *green, int *blue);
01422
01433 static int StoreWhiteBalanceFactors(int red, int green, int blue);
01434
01443 static int SetupHardwareWhitebalancingFactors(unsigned char WBtable[768]);
01444
01445 };
01446
01447
01448
01449
01466 class OCameraInputs
01467 {
01468 public:
01469
01471 typedef enum
01472 {
01473 INPUT_I0 = 1,
01474 INPUT_I1 = 2,
01475 INPUT_I0_RE = 4,
01476 INPUT_I0_FE = 8,
01477 INPUT_I1_RE = 16,
01478 INPUT_I1_FE = 32,
01479 OVERLOAD = 64,
01480
01481 INPUT_ALL = INPUT_I0 | INPUT_I1
01482 }
01483 t_enCameraInput;
01484
01485
01487 static OCameraInputs *poCreateInterface();
01494 virtual void Destroy() = 0;
01495
01504 virtual int iOpen() = 0;
01506 virtual int iClose() = 0;
01507
01519 virtual int iGetInputs() = 0;
01520
01529 virtual int iGetInput(t_enCameraInput enIn) = 0;
01530
01539 virtual int iSetTimeout(int iTimeout) = 0;
01540
01551 virtual int iWaitForInput(t_enCameraInput enIn, int iState) = 0;
01552
01568 virtual int iWaitForInputs(int iMask, int iState) = 0;
01569
01578 virtual int iWaitForInputChange(t_enCameraInput enIn) = 0;
01579
01589 virtual int iWaitForInputsChange(int iMask) = 0;
01590
01598 virtual int iClearEdges(int iMask) = 0;
01599
01604 virtual int GetDriverFileDescriptor() = 0;
01605 };
01606
01607
01608
01609
01626 class OCameraOutputs
01627 {
01628 public:
01629
01631 typedef enum
01632 {
01633 OUTPUT_O0 = 1,
01634 OUTPUT_O1 = 2,
01635 OUTPUT_O2 = 4,
01636 OUTPUT_O3 = 8,
01637
01638 OUTPUT_OVERLOAD_UNLOCK = 16,
01639
01640 OUTPUT_ALL = OUTPUT_O0 | OUTPUT_O1 | OUTPUT_O2 | OUTPUT_O3
01641 }
01642 t_enCameraOutput;
01643
01644
01648 static OCameraOutputs *poCreateInterface();
01656 virtual void Destroy() = 0;
01657
01667 virtual int iOpen() = 0;
01671 virtual int iClose() = 0;
01672
01681 virtual int iGetOutputs() = 0;
01682
01691 virtual int iGetOutput(t_enCameraOutput enOut) = 0;
01692
01703 virtual int iSetOutputs(int iMask, int iState) = 0;
01704
01711 virtual int iSetOutput(t_enCameraOutput enOut, int iState) = 0;
01712
01719 virtual int iToggleOutputs(int iMask) = 0;
01720
01726 virtual int iToggleOutput(t_enCameraOutput enOut) = 0;
01727
01728 };
01729
01730
01731
01732
01750 class OCameraLEDs
01751 {
01752 public:
01753
01755 typedef enum
01756 {
01757 LED_0_RED = 0x01,
01758 LED_0_GREEN = 0x02,
01759 LED_1_RED = 0x04,
01760 LED_1_GREEN = 0x08,
01761 LED_2_RED = 0x10,
01762 LED_2_YELLOW = 0x20,
01763 LED_3_RED = 0x40,
01764 LED_3_YELLOW = 0x80,
01765
01766 LED_ALL_RED = LED_0_RED | LED_1_RED | LED_2_RED | LED_3_RED,
01767 LED_ALL_GREEN = LED_0_GREEN | LED_1_GREEN,
01768 LED_ALL_YELLOW = LED_2_YELLOW | LED_3_YELLOW,
01769 LED_ALL = LED_ALL_RED | LED_ALL_GREEN | LED_ALL_YELLOW
01770 }
01771 t_enCameraLED;
01772
01773
01777 static OCameraLEDs *poCreateInterface();
01785 virtual void Destroy() = 0;
01786
01796 virtual int iOpen() = 0;
01800 virtual int iClose() = 0;
01801
01810 virtual int iGetLEDs() = 0;
01811
01820 virtual int iGetLED(t_enCameraLED enLED) = 0;
01821
01830 virtual int iSetLEDs(int iMask, int iState) = 0;
01831
01838 virtual int iSetLED(t_enCameraLED enLED, int iState) = 0;
01839
01846 virtual int iToggleLEDs(int iMask) = 0;
01847
01853 virtual int iToggleLED(t_enCameraLED enLED) = 0;
01854 };
01855
01856 #endif // __OCAMERA_H__