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     }
00125   eCameraType;
00126 
00128   typedef enum
00129     {
00130       ACQ_MODE_STOP                = 1,   
00131       ACQ_MODE_SINGLE_SHOT         = 2,   
00132       ACQ_MODE_FREE_RUN            = 3,   
00133       ACQ_MODE_SELECT_SHOT         = 4,   
00134       ACQ_MODE_FPGA_SINGLE_SHOT    = 5,   
00135       ACQ_MODE_FPGA_CONTINUOUS     = 6,   
00136       ACQ_MODE_FREE_RUN_SLAVE      = 8,   
00137       ACQ_MODE_SEQUENCE_MASTER     = 9,   
00138       ACQ_MODE_SEQUENCE_SLAVE      = 10,  
00139       ACQ_MODE_FREE_RUN_SLAVE_STOP = 11   
00140     }
00141   eAcqMode;
00142 
00144   typedef enum
00145     {
00146       TRIG_SRC_SOFTWARE        = 1,  
00147       TRIG_SRC_EXTERNAL_E0     = 2,  
00148       TRIG_SRC_EXTERNAL_E1     = 3   
00149     }
00150   eTrigSource;
00151 
00153   typedef enum
00154     {
00155       TRIG_POL_ACTIVE_HIGH  = 1,  
00156       TRIG_POL_ACTIVE_LOW   = 2   
00157     }
00158   eTrigPolarity;
00159 
00161   typedef enum
00162     {
00163       ILL_MODE_OFF     = 1,  
00164       ILL_MODE_NORMAL  = 2,  
00165       ILL_MODE_PULSED  = 3   
00166     }
00167   eIllMode;
00168 
00170   typedef enum
00171     {
00172       ILL_MODE_EXT_OFF         = 0,  
00173       ILL_MODE_EXT_ON_POSITIVE = 1,  
00174       ILL_MODE_EXT_ON_NEGATIVE = 2   
00175     }
00176   eIllModeExt;
00177 
00182   typedef enum
00183     {
00184       FREQU_20MHz = 0,              
00185       FREQU_40MHz = 1,              
00186       FREQU_50MHz = 2,              
00187       FREQU_60MHz = 3               
00188     }
00189   eFrequency;
00190 
00192   typedef enum
00193     {
00194       JPEG_QUALITY_LOW       = 0,   
00195       JPEG_QUALITY_MEDIUM    = 1,   
00196       JPEG_QUALITY_GOOD      = 2,   
00197       JPEG_QUALITY_EXCELLENT = 3    
00198     }
00199   eJPEGQuality;
00200 
00202   typedef enum
00203     {
00204       PRIO_FIRST_POINT   = 0,    
00205       PRIO_LAST_POINT    = 1,    
00206       PRIO_LARGEST_FIRST = 2,    
00209       PRIO_LARGEST_LAST  = 3     
00212     }
00213   ePointPriority;
00214 
00216   typedef enum
00217     {
00218       DIRECTION_TOP_DOWN  = 0,   
00219       DIRECTION_BOTTOM_UP = 1    
00220     }
00221   eProfileDirection;
00222 
00226 
00227 
00234   // object creation/deletion
00235   static OCamera *CreateCameraInterface(eCameraType eCam);
00242   virtual int Destroy() = 0;
00244 
00245   // -----------------------------------------------------------------
00246   // operations
00247   // -----------------------------------------------------------------
00251 
00252   // open and close the camera interface
00281   virtual int Open(int dFrameBufferSize = 4096*256, int dMaxBuffers = -1) = 0;
00292   virtual int Close() = 0;
00293 
00311   virtual int GetImage(OCameraImage *pImage) = 0;
00321   virtual int ReleaseImage(OCameraImage *pImage) = 0;
00330   virtual int GetMaxImageCount() = 0;
00339   virtual int GetImageCount() = 0;
00340 
00398   virtual int SetAcquisitionMode(eAcqMode eAcq) = 0;
00399 
00409   virtual int SetTriggerSource(eTrigSource eTrig,
00410                                eTrigPolarity ePol = TRIG_POL_ACTIVE_HIGH) = 0;
00411 
00418   virtual int SetIlluminationMode(eIllMode eIll) = 0;
00419 
00426   virtual int SetIlluminationModeExternal(eIllModeExt eIll) = 0;
00427 
00437   virtual int SetIlluminationTiming(int dDelay, int dPeriod) = 0;
00438 
00447   virtual int SwitchIllumination(bool bOn) = 0;
00448 
00458   virtual int SetShutterTime(int dShutter) = 0;
00459 
00473   virtual int SetCameraWindow(int dX0, int dY0, int dWidth, int dHeight) = 0;
00474 
00486   virtual int SetFrameRate(int dFps) = 0;
00499   virtual int SetFrameRate(float fFps) = 0;
00500 
00508   virtual int SetTriggerDelay(int dDelay) = 0;
00509 
00520   virtual int SetGain(int dFactor) = 0;
00521 
00530   virtual int SetReadTimeout(int dTimeout) = 0;
00531 
00538   virtual int GetDriverFileDescriptor() = 0;
00539 
00549   virtual int SetCircularOverwrite(bool bOverwrite) = 0;
00550 
00551   // JPEG codec interface
00561   virtual int SetJPEG(bool bEnable, eJPEGQuality eQuality = JPEG_QUALITY_MEDIUM) = 0;
00562 
00569   virtual int SetFrequency(eFrequency eFrequ) = 0;
00570 
00579   virtual int GetImage2Buffer(OCameraImage *pImage) = 0;
00580 
00593   virtual int ReadImageRAM(void *pDest, unsigned long ulAddr, unsigned long ulLen) = 0;
00606   virtual int WriteImageRAM(void *pSrc, unsigned long ulAddr, unsigned long ulLen) = 0;
00612   virtual int InitImageRAM(void) = 0;
00618   virtual int DisableImageRAM(void) = 0;
00625   virtual int GetImageToImageRAM(unsigned long ulAddr) = 0;
00626 
00628   virtual int Diag() = 0;
00629 
00630   // Triggered Images Sequence Acquisition
00639   virtual int SequenceInit(OCameraSequenceStorage &oStore) = 0;
00640 
00655   virtual int SequenceStart(long long dt, long long Z, bool bPrePost, bool bStartStop) = 0;
00656 
00658   virtual int SequenceTrigger() = 0;
00659 
00661   virtual int SequenceWaitFinish() = 0;
00662 
00673   virtual int SequenceIsFinished() = 0;
00674 
00682   virtual int SequenceGetResult(OCameraSequence &oSeq) = 0;
00683 
00685   virtual int SequenceAbort() = 0;
00686 
00688   virtual int SequenceCleanup() = 0;
00689 
00697  virtual int ResetSequenceCounter() = 0;
00698 
00713   virtual int PurgeImages() = 0;
00714 
00725   virtual int CalibrateSensor() = 0;
00726 
00741   virtual int SetSensorRegister(const char *pName, unsigned long nValue) = 0;
00742 
00758   virtual int GetSensorRegister(const char *pName, unsigned long *pValue) = 0;
00759 
00766   virtual char** GetSensorRegisterNames() = 0;
00767 
00783   virtual int TriggerImage() = 0;
00784 
00794   virtual int TriggerImageAbort() = 0;
00795 
00840   virtual int SetupLaserProfiling(bool bEnable,
00841                                   int dX0, int dY0, int dWidth, int dHeight,
00842                                   ePointPriority ePrio, eProfileDirection eDir,
00843                                   int dThreshMin, int dThreshMax,
00844                                   int dAreaMin, int dAreaMax) = 0;
00845 
00846   // Generic Hardware Applet interface
00873   virtual int SetHardwareApplet(bool bEnable, unsigned long nMaxSize) = 0;
00874 
00875   // Median filter interface
00881   virtual int SetMedian(bool bEnable) = 0;
00882 
00883   // FPGA-based triggering
00908   virtual int SetTriggerWindow(int dX0, int dY0, 
00909                                int dWidth, int dHeight, 
00910                                int dThreshMin, int dThreshMax) = 0;
00911 
00912   // Wait until N images available
00923   virtual int WaitForNImages(int nImages) = 0;
00924 
00926 
00927 };
00928 
00929 //****************************************************************************
00930 //                                                                OCameraTools
00931 //****************************************************************************
00935 class OCameraTools
00936 {
00937  public:
00938 
00939   typedef enum
00940     {
00941       BAYER_PATTERN_GRGR = 1,    
00942       BAYER_PATTERN_BGBG = 2,    
00943       BAYER_PATTERN_RGRG = 3,    
00944       BAYER_PATTERN_GBGB = 4     
00945     }
00946   eBayerPattern;
00947 
00948  public:
00956   static void Bayer2RGB(unsigned char *bayer, unsigned char *rgb,
00957                         int width, int height,
00958                         eBayerPattern ePattern = BAYER_PATTERN_GRGR);
00959 
00979   static void Bayer2RGBWhiteBalance(unsigned char *bayer, unsigned char *rgb,
00980                                     int width, int height,
00981                                     int red, int green, int blue,
00982                                     eBayerPattern ePattern = BAYER_PATTERN_GRGR);
00983 
01002   static int Bayer2RGBBuiltIn(unsigned char *bayer, unsigned char *rgb,
01003                               int width, int height,
01004                               eBayerPattern ePattern = BAYER_PATTERN_GRGR);
01005 
01022   static int GetWhiteBalanceFactors(int *red, int *green, int *blue);
01023 
01034   static int StoreWhiteBalanceFactors(int red, int green, int blue);
01035 };
01036 
01037 //****************************************************************************
01038 //                                                               OCameraInputs
01039 //****************************************************************************
01056 class OCameraInputs
01057 {
01058  public:
01059 
01061   typedef enum
01062     {
01063       INPUT_I0    = 1,    
01064       INPUT_I1    = 2,    
01065       INPUT_I0_RE = 4,    
01066       INPUT_I0_FE = 8,    
01067       INPUT_I1_RE = 16,   
01068       INPUT_I1_FE = 32,   
01069       OVERLOAD    = 64,   
01070 
01071       INPUT_ALL = INPUT_I0 | INPUT_I1  
01072     }
01073   t_enCameraInput;
01074 
01075   // object creation/deletion
01077   static OCameraInputs *poCreateInterface();
01084   virtual void Destroy() = 0;
01085 
01094   virtual int iOpen() = 0;
01096   virtual int iClose() = 0;
01097 
01109   virtual int iGetInputs() = 0;
01110 
01119   virtual int iGetInput(t_enCameraInput enIn) = 0;
01120 
01129   virtual int iSetTimeout(int iTimeout) = 0;
01130 
01141   virtual int iWaitForInput(t_enCameraInput enIn, int iState) = 0;
01142 
01158   virtual int iWaitForInputs(int iMask, int iState) = 0;
01159 
01168   virtual int iWaitForInputChange(t_enCameraInput enIn) = 0;
01169 
01179   virtual int iWaitForInputsChange(int iMask) = 0;
01180 
01188   virtual int iClearEdges(int iMask) = 0;
01189 
01194   virtual int GetDriverFileDescriptor() = 0;
01195 };
01196 
01197 //****************************************************************************
01198 //                                                              OCameraOutputs
01199 //****************************************************************************
01216 class OCameraOutputs
01217 {
01218  public:
01219 
01221   typedef enum
01222     {
01223       OUTPUT_O0  = 1,    
01224       OUTPUT_O1  = 2,    
01225       OUTPUT_O2  = 4,    
01226       OUTPUT_O3  = 8,    
01227 
01228       OUTPUT_OVERLOAD_UNLOCK = 16, 
01229 
01230       OUTPUT_ALL = OUTPUT_O0 | OUTPUT_O1 | OUTPUT_O2 | OUTPUT_O3  
01231     }
01232   t_enCameraOutput;
01233 
01234   // object creation/deletion
01238   static OCameraOutputs *poCreateInterface();
01246   virtual void Destroy() = 0;
01247 
01257   virtual int iOpen() = 0;
01261   virtual int iClose() = 0;
01262 
01271   virtual int iGetOutputs() = 0;
01272 
01281   virtual int iGetOutput(t_enCameraOutput enOut) = 0;
01282 
01293   virtual int iSetOutputs(int iMask, int iState) = 0;
01294 
01301   virtual int iSetOutput(t_enCameraOutput enOut, int iState) = 0;
01302 
01309   virtual int iToggleOutputs(int iMask) = 0;
01310 
01316   virtual int iToggleOutput(t_enCameraOutput enOut) = 0;
01317 
01318 };
01319 
01320 //****************************************************************************
01321 //                                                                 OCameraLEDs
01322 //****************************************************************************
01340 class OCameraLEDs
01341 {
01342  public:
01343 
01345   typedef enum
01346     {
01347       LED_0_RED    = 0x01,    
01348       LED_0_GREEN  = 0x02,    
01349       LED_1_RED    = 0x04,    
01350       LED_1_GREEN  = 0x08,    
01351       LED_2_RED    = 0x10,    
01352       LED_2_YELLOW = 0x20,    
01353       LED_3_RED    = 0x40,    
01354       LED_3_YELLOW = 0x80,    
01355 
01356       LED_ALL_RED    = LED_0_RED    | LED_1_RED | LED_2_RED | LED_3_RED,  
01357       LED_ALL_GREEN  = LED_0_GREEN  | LED_1_GREEN,                        
01358       LED_ALL_YELLOW = LED_2_YELLOW | LED_3_YELLOW,                       
01359       LED_ALL        = LED_ALL_RED  | LED_ALL_GREEN | LED_ALL_YELLOW      
01360     }
01361   t_enCameraLED;
01362 
01363   // object creation/deletion
01367   static OCameraLEDs *poCreateInterface();
01375   virtual void Destroy() = 0;
01376 
01386   virtual int iOpen() = 0;
01390   virtual int iClose() = 0;
01391 
01400   virtual int iGetLEDs() = 0;
01401 
01410   virtual int iGetLED(t_enCameraLED enLED) = 0;
01411 
01420   virtual int iSetLEDs(int iMask, int iState) = 0;
01421 
01428   virtual int iSetLED(t_enCameraLED enLED, int iState) = 0;
01429 
01436   virtual int iToggleLEDs(int iMask) = 0;
01437 
01443   virtual int iToggleLED(t_enCameraLED enLED) = 0;
01444 };
01445 
01446 #endif // __OCAMERA_H__

Generated on Wed Jun 25 17:43:25 2008 for Festo SBOx-C API by  doxygen 1.5.3