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 
00913 
00914 };
00915 
00916 //****************************************************************************
00917 //                                                                OCameraTools
00918 //****************************************************************************
00922 class OCameraTools
00923 {
00924  public:
00925 
00926   typedef enum
00927     {
00928       BAYER_PATTERN_GRGR = 1,    
00929       BAYER_PATTERN_BGBG = 2,    
00930       BAYER_PATTERN_RGRG = 3,    
00931       BAYER_PATTERN_GBGB = 4     
00932     }
00933   eBayerPattern;
00934 
00935  public:
00943   static void Bayer2RGB(unsigned char *bayer, unsigned char *rgb,
00944                         int width, int height,
00945                         eBayerPattern ePattern = BAYER_PATTERN_GRGR);
00946 
00966   static void Bayer2RGBWhiteBalance(unsigned char *bayer, unsigned char *rgb,
00967                                     int width, int height,
00968                                     int red, int green, int blue,
00969                                     eBayerPattern ePattern = BAYER_PATTERN_GRGR);
00970 
00989   static int Bayer2RGBBuiltIn(unsigned char *bayer, unsigned char *rgb,
00990                               int width, int height,
00991                               eBayerPattern ePattern = BAYER_PATTERN_GRGR);
00992 
01009   static int GetWhiteBalanceFactors(int *red, int *green, int *blue);
01010 
01021   static int StoreWhiteBalanceFactors(int red, int green, int blue);
01022 };
01023 
01024 //****************************************************************************
01025 //                                                               OCameraInputs
01026 //****************************************************************************
01043 class OCameraInputs
01044 {
01045  public:
01046 
01048   typedef enum
01049     {
01050       INPUT_I0    = 1,    
01051       INPUT_I1    = 2,    
01052       INPUT_I0_RE = 4,    
01053       INPUT_I0_FE = 8,    
01054       INPUT_I1_RE = 16,   
01055       INPUT_I1_FE = 32,   
01056       OVERLOAD    = 64,   
01057 
01058       INPUT_ALL = INPUT_I0 | INPUT_I1  
01059     }
01060   t_enCameraInput;
01061 
01062   // object creation/deletion
01064   static OCameraInputs *poCreateInterface();
01071   virtual void Destroy() = 0;
01072 
01081   virtual int iOpen() = 0;
01083   virtual int iClose() = 0;
01084 
01096   virtual int iGetInputs() = 0;
01097 
01106   virtual int iGetInput(t_enCameraInput enIn) = 0;
01107 
01116   virtual int iSetTimeout(int iTimeout) = 0;
01117 
01128   virtual int iWaitForInput(t_enCameraInput enIn, int iState) = 0;
01129 
01145   virtual int iWaitForInputs(int iMask, int iState) = 0;
01146 
01155   virtual int iWaitForInputChange(t_enCameraInput enIn) = 0;
01156 
01166   virtual int iWaitForInputsChange(int iMask) = 0;
01167 
01175   virtual int iClearEdges(int iMask) = 0;
01176 
01181   virtual int GetDriverFileDescriptor() = 0;
01182 };
01183 
01184 //****************************************************************************
01185 //                                                              OCameraOutputs
01186 //****************************************************************************
01203 class OCameraOutputs
01204 {
01205  public:
01206 
01208   typedef enum
01209     {
01210       OUTPUT_O0  = 1,    
01211       OUTPUT_O1  = 2,    
01212       OUTPUT_O2  = 4,    
01213       OUTPUT_O3  = 8,    
01214 
01215       OUTPUT_OVERLOAD_UNLOCK = 16, 
01216 
01217       OUTPUT_ALL = OUTPUT_O0 | OUTPUT_O1 | OUTPUT_O2 | OUTPUT_O3  
01218     }
01219   t_enCameraOutput;
01220 
01221   // object creation/deletion
01225   static OCameraOutputs *poCreateInterface();
01233   virtual void Destroy() = 0;
01234 
01244   virtual int iOpen() = 0;
01248   virtual int iClose() = 0;
01249 
01258   virtual int iGetOutputs() = 0;
01259 
01268   virtual int iGetOutput(t_enCameraOutput enOut) = 0;
01269 
01280   virtual int iSetOutputs(int iMask, int iState) = 0;
01281 
01288   virtual int iSetOutput(t_enCameraOutput enOut, int iState) = 0;
01289 
01296   virtual int iToggleOutputs(int iMask) = 0;
01297 
01303   virtual int iToggleOutput(t_enCameraOutput enOut) = 0;
01304 
01305 };
01306 
01307 //****************************************************************************
01308 //                                                                 OCameraLEDs
01309 //****************************************************************************
01327 class OCameraLEDs
01328 {
01329  public:
01330 
01332   typedef enum
01333     {
01334       LED_0_RED    = 0x01,    
01335       LED_0_GREEN  = 0x02,    
01336       LED_1_RED    = 0x04,    
01337       LED_1_GREEN  = 0x08,    
01338       LED_2_RED    = 0x10,    
01339       LED_2_YELLOW = 0x20,    
01340       LED_3_RED    = 0x40,    
01341       LED_3_YELLOW = 0x80,    
01342 
01343       LED_ALL_RED    = LED_0_RED    | LED_1_RED | LED_2_RED | LED_3_RED,  
01344       LED_ALL_GREEN  = LED_0_GREEN  | LED_1_GREEN,                        
01345       LED_ALL_YELLOW = LED_2_YELLOW | LED_3_YELLOW,                       
01346       LED_ALL        = LED_ALL_RED  | LED_ALL_GREEN | LED_ALL_YELLOW      
01347     }
01348   t_enCameraLED;
01349 
01350   // object creation/deletion
01354   static OCameraLEDs *poCreateInterface();
01362   virtual void Destroy() = 0;
01363 
01373   virtual int iOpen() = 0;
01377   virtual int iClose() = 0;
01378 
01387   virtual int iGetLEDs() = 0;
01388 
01397   virtual int iGetLED(t_enCameraLED enLED) = 0;
01398 
01407   virtual int iSetLEDs(int iMask, int iState) = 0;
01408 
01415   virtual int iSetLED(t_enCameraLED enLED, int iState) = 0;
01416 
01423   virtual int iToggleLEDs(int iMask) = 0;
01424 
01430   virtual int iToggleLED(t_enCameraLED enLED) = 0;
01431 };
01432 
01433 #endif // __OCAMERA_H__

Generated on Fri Oct 12 10:31:11 2007 for Festo SBOx-C API by  doxygen 1.5.1-4