
 
#ifndef __RV_EEH_H_INCLUDED_
#define __RV_EEH_H_INCLUDED_


#define EEH_API   WINAPI

#include <rvb\rvtypes.h>







//与hotdog一致
#define RV_LFT_TRIAL_USE         0  //全部权限
#define RV_LFT_GENERIC_USE       1  //全部权限
#define RV_LFT_TIMELIMITED_USE   2  //全部权限
#define RV_LFT_INDUSTRY_USE      3  //全部权限
#define RV_LFT_CUSTOM_USE        4
#define RV_LFT_CRITICAL_USE      5  
#define RV_LFT_SUPREME_USE       6  //全部权限


/**
 * \brief A type definition for an application supplied error handling function.
 *
 */
typedef void (WINAPI *RV_ERROR_REPORTER_FUNC) (void);

typedef void (WINAPI *RV_LICENCE_CHECK_FUNC) (void*);

/**
 *  Defines to specify error reporting behaviour.
 *  Used by rveSetReporter().
 */
#define RV_EPF_DEFAULT ((RV_ERROR_REPORTER_FUNC) 0) /* Set default error reporter*/
#define RV_EPF_IGNORE  ((RV_ERROR_REPORTER_FUNC) 1) /* Ignore error reporting*/

   
//算子模块
#define RV_BLOB_MODULE                 1      //物体提取
#define RV_PATTMAT_MODULE             (1<<1)  //灰度模板识别, 模板定位, 
#define RV_TEXTURE_DEFECT_MODULE      (1<<2)  //纹理缺陷识别
#define RV_RESERVED_MODULE1           (1<<3)  //保留将来使用 
#define RV_BARCODE_MODULE      (1<<4)         //条码，含二维码
#define RV_OCR_MODULE          (1<<5)         //字符识别
#define RV_GAUGE_MODULE        (1<<6)         //测量，直线，圆，角点，边缘距离等基础检测算子
#define RV_COLOR_MODULE        (1<<7)         //颜色，颜色分辨等
#define RV_EDGEMAT_MODULE      (1<<8)         //轮廓匹配，边缘匹配
#define RV_SCANNER_MODULE      (1<<9)         //扫描器模块
#define RV_SYMMETRY_CHECK_MODULE    (1<<10)   //长度距离识别  
#define RV_OCV_MODULE            (1<<11)      //字符验证
#define RV_RESERVED_MODULE2      (1<<12)      //RV_RESERVED_MODULE1
#define RV_RESERVED_MODULE3      (1<<13)      //保留将来使用
#define RV_RESERVED_MODULE       (1<<14)     //保留将来使用
#define RV_PARTSPACE_MODULE      (1<<15)     //长度距离识别
#define RV_CONTOUR_DEFECT_MODULE    (1<<16)  //轮廓缺陷
#define RV_RESERVED_MODULE4         (1<<17)  //保留将来使用
#define RV_RESERVED_MODULE5         (1<<18)  //保留将来使用
#define RV_FEATURE_DETECT_MODULE    (1<<19)  //特征分类算子,双态识别, 多态识别
#define RV_RESERVED_MODULE6         (1<<20)  //保留将来使用
#define RV_RESERVED_MODULE7         (1<<21)  //保留将来使用
#define RV_RESERVED_MODULE8         (1<<22)  //保留将来使用

//扩展
#define RV_CALI_RSM_MODULE             (1<<23)    //手眼标定
#define RV_AUTO_CALI_RSM_MODULE        (1<<24)    //自动RSM标定
#define RV_AUTO_TAB_EDITION_MODULE     (1<<25)    //AutoTab图形化编辑
#define RV_AUTO_TAB_ROBOT_MODULE       (1<<26)    //AutoTab Robot
#define RV_ANTI_LENS_DISTORT_MODULE    (1<<27)    //自动镜头畸变标定
#define RV_RESERVED_MODULE28           (1<<28)    //保留将来使用
#define RV_ANY_COMM                     (1<<29)    //ANYCOMM协议
#define RV_RESERVED_MODULE30           (1<<30)    //保留将来使用
 


extern "C"  BOOL EEH_API rvAuthorize(const TCHAR* strFilePath ,const TCHAR* strAppName, const TCHAR* strLicence );
extern "C"  BOOL EEH_API rvIsAuthorized();

//参数strPin仅为引用，请保持strPin有效。
extern "C"  void EEH_API rvSetLicenceCheckCallback(RV_LICENCE_CHECK_FUNC pLicenceCheckFunc, const TCHAR* strPin );

  

//以下函数不支持多线称
extern "C"  BOOL EEH_API rvInitialize (const TCHAR* strLicence = NULL, const TCHAR* strAppName = NULL,BOOL bPromptWhenFailed =TRUE ,const TCHAR* strFilePath = NULL );
//超级许可初始化
extern "C"  BOOL EEH_API rvInitializeE1 (const TCHAR* strLicenceFile, const TCHAR* strAppName, const TCHAR* strField1, const TCHAR* strField2, const TCHAR* strField3, const TCHAR* strField4 );

//自定义模块，使用模块权限id, 和pin进行验证
extern "C"  BOOL EEH_API rvInitializeE2 (const TCHAR* strLicenceFile,  int accessId, int pin );


extern "C"  void EEH_API rvFinalize ();

//该函数将会主动报错（有messagebox）。
extern "C"  BOOL EEH_API rvCheckModules(int moduleCode); 

//模块是否授权，无messagebox
extern "C"  BOOL EEH_API rvIsModuleAuthorized(int moduleCode); 


extern "C"  int EEH_API rvGetLicenceType(); 

extern "C" const TCHAR* EEH_API rvGetVersion(int* pMain =NULL, int* pSub=NULL);

extern "C"  const TCHAR* EEH_API rvGetAppPath();



//根据字体名称获得其对应文件目录
extern "C"  int EEH_API rvGetFontFilePath(const TCHAR* strFaceName, TCHAR* strFilePath, int  nByteCount   );
//根据字体文件(ttf)获得其字体名称
extern "C"  int EEH_API rvGetFontNameFromFile(const TCHAR* strFilePath, TCHAR* strFontName, int  nByteCount );
//设置自定义font路径
extern "C"  void EEH_API rvSetFontCustomDirectory(const TCHAR* strDirectory);
extern "C"  const TCHAR* EEH_API rvGetFontCustomDirectory();
extern "C"  int          EEH_API rvGetFontCountInRegister() ;
extern "C"  int EEH_API  rvGetFontNameInRegister(int index, TCHAR* strFontName, int  nByteCount   );
extern "C"  int EEH_API  rvGetFontPathInRegister(const char* strFontName, BOOL bItalic, BOOL bBold, TCHAR* strFontPath, int  nByteCount    );



#endif

