OCamera.h

Go to the documentation of this file.
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 //                                                                     OCamera
00093 //****************************************************************************
00111 class OCamera
00112 {
00113  public:
00114 
00115   // enums
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   // object creation/deletion
00250   static OCamera *CreateCameraInterface(eCameraType eCam);
00257   virtual int Destroy() = 0;
00259 
00260   // -----------------------------------------------------------------
00261   // operations
00262   // -----------------------------------------------------------------
00266 
00267   // open and close the camera interface
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   // JPEG codec interface
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   // Triggered Images Sequence Acquisition
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   // Generic Hardware Applet interface
00927   virtual int SetHardwareApplet(bool bEnable, unsigned long nMaxSize) = 0;
00928 
00929   // Median filter interface
00946   virtual int SetMedian(bool bEnable) = 0;
00947 
00948   // FPGA-based triggering
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 //                                                                OCameraTools
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 //                                                               OCameraInputs
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   // object creation/deletion
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 //                                                              OCameraOutputs
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   // object creation/deletion
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 //                                                                 OCameraLEDs
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   // object creation/deletion
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__

Generated on Wed Apr 2 15:57:03 2008 for Festo Camera API by  doxygen 1.5.3