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 
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   // JPEG codec interface
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   // Triggered Images Sequence Acquisition
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   // Generic Hardware Applet interface
00929   virtual int SetHardwareApplet(bool bEnable, unsigned long nMaxSize) = 0;
00930 
00931   // Median filter interface
00948   virtual int SetMedian(bool bEnable) = 0;
00949 
00950   // FPGA-based triggering
00975   virtual int SetTriggerWindow(int dX0, int dY0,
00976                                int dWidth, int dHeight,
00977                                int dThreshMin, int dThreshMax) = 0;
00978 
00979   // Wait until N images available
00990   virtual int WaitForNImages(int nImages) = 0;
00991 
00993 
00994 };
00995 
00996 //****************************************************************************
00997 //                                                                OCameraTools
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 //                                                               OCameraInputs
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   // object creation/deletion
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 //                                                              OCameraOutputs
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   // object creation/deletion
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 //                                                                 OCameraLEDs
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   // object creation/deletion
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__

Generated on Fri Jul 18 16:20:30 2008 for Festo Camera API by  doxygen 1.5.3