using System; using System.Runtime.InteropServices; using System.Text; namespace EC.AutoWeightServer.IfManager.FingerPrint { /// /// 指纹动态库有两套独立的对外接口,一套是简单接口,一套是复杂接口; /// 简单接口以函数名 FPI 开始,调用接口较少,开发者不用关心底层调用,直接调用对外接口即可,使用非常简单。但是这种方式相呆板,不能够进行配置。 /// 复杂接口以函数名 Tc 开始,调用接口较多,需要自己对指纹设备或者算法进行控制,当然,也可以使用默认值。复杂接口可以非常灵活的使用,可以对一些功能进行配置,例如,是否显示对话框,配置超时时间等功能。 /// public class TesoLiveSDK { #region FPI(No Test) /// /// 获得注册指纹模板。驱动 USB 指纹设备时,可以获得图像 /// /// 端口号,0=USB,1=COM1,2=COM2,3=COM3... /// 输出的 B64 模板缓冲,最大 513 字节(含'\0'结束符) /// 返回注册指纹模板实际长度(不含'\0'结束符) /// 返回出错时字符串信息,最大 64 字节(含'\0'结束符) /// 成功时:返回值大于等于0,失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int FPIGetTemplate(int nPort, byte[] pRegBuf, ref int pnRegLen, byte[] pszErrMsg); //public static extern int FPIGetTemplate(int nPort, ref string pRegBuf, ref int pnRegLen, ref string pszErrMsg); //int FPIGetTemplate(int nPort, char* pRegBuf, int* pnRegLen, char* pszErrMsg); /// /// 获得验证用的指纹特征;驱动 USB 指纹设备时,可以获得图像 /// /// 端口号,0=USB,1=COM1,2=COM2,3=COM3... /// 输出的 B64 特征缓冲,最大 513 字节(含'\0'结束符) /// 返回验证指纹特征实际长度(不含'\0'结束符) /// 返回出错时字符串信息,最大 64 字节(含'\0'结束符) /// 成功时:返回值大于等于0,失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int FPIGetFeature(int nPort, ref byte pVerBuf, ref int pnVerLen, ref byte pszErrMsg); //int FPIGetFeature(int nPort, char* pVerBuf, int* pnVerLen, char* pszErrMsg); /// /// 比对采集时得到的模板和特征数据,可指定安全级 /// /// 输入的 B64 模板数据,最大 513 字节(含'\0'结束符) /// 输入的 B64 特征数据,最大 513 字节(含'\0'结束符) /// 全级别,数字[1, 5],默认为 3 级别 /// 成功时:返回值大于等于0,失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int FPIMatch(string pRegBuf, string pVerBuf, int nLevel = 3); //int FPIMatch(const char* pRegBuf, const char* pVerBuf,int nLevel); /// /// 取得指纹图像 /// /// 要取得指纹图像的索引数字[1, 3] /// 成功时:返回B64编码纯数据区图像,失败时:返回NULL [DllImport("TesoLive.dll")] public static extern string FPIGetImageData(int nImageIdx); //char* FPIGetImageData(int nImageIdx); /// /// 通过前期采集的一幅指纹图象数据,产生验证用特征数据 /// /// B64 编码图像,请参见 FPIGetImageData 函数中的说明 /// 输出的B64特征缓冲,最大513字节(含'\0'结束符) /// 返回验证指纹特征实际长度(不含'\0'结束符) /// 返回出错时字符串信息,最大 64 字节(含'\0'结束符) /// 成功时:返回值大于等于0,失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int FPIGetFeatureByImg(string pImg, ref byte pVerBuf, ref int pnVerLen, ref byte pszErrMsg); //int FPIGetFeatureByImg(const char* pImg,char* pVerBuf, int* pnVerLen,char* pszErrMsg); /// /// 通过前期采集的三幅指纹图象数据,产生注册用模版数据 /// /// B64 编码图像 1,请参见 FPIGetImageData 函数中的说明 /// B64 编码图像 2,请参见 FPIGetImageData 函数中的说明 /// B64 编码图像 3,请参见 FPIGetImageData 函数中的说明 /// 输出的B64模板缓冲,最大513字节(含'\0'结束符) /// 返回注册指纹模板实际长度(不含'\0'结束符) /// 返回出错时字符串信息,最大 64 字节(含'\0'结束符) /// 成功时:返回值大于等于0,失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int FPIGetTemplateByImg(string pImg1, string pImg2, string pImg3, ref byte pRegBuf, ref int pnRegLen, ref byte pszErrMsg); //int FPIGetTemplateByImg(const char* pImg1, const char* pImg2, const char* pImg3, char* pRegBuf, int* pnRegLen,char* pszErrMsg); #endregion FPI(No Test) #region Tc(Test) /// /// 创建通讯句柄,并初始化环境 /// /// 通讯端口号(USB=0,COM=[1, 255]) /// 协议号(USB=0,COM=2) /// 索引号(波特率级别,默认给 3,如表 1 所示) /// 串口是否提速(如果是 USB 则,该值为 0,如果是串口,则该值为 2) /// 成功时:返回值大于等于0(句柄),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcCreateHDL(int port, int nPort, int nRidx, int nSped); //int TcCreateHDL(int Port, int nPort, int nRidx, int nSped); /// /// 释放句柄所占用资源,若设备已连接则会自行断开 /// /// 由 TcCreateHDL 获取的上下文控制句柄 /// 成功时:返回值大于等于0,失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcDeleteHDL(int vHdl); //int TcDeleteHDL(int vHdl); /// /// 连接设备,等待用户按捺 3 或者 4 次直到超时(超时默认 30 秒),成功后返回模板 /// /// 由 TcCreateHDL 获取的上下文控制句柄 /// 返回的模板数据(最大不会超过 513 字节) /// 成功时:返回值大于等于0(模板长度),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcDoTemplet(int vHdl, byte[] hTpl); //int TcDoTemplet(int vHdl, void* hTpl); /// /// 连接设备,等待用户按捺一次直到超时(默认超时 18 秒),成功后返回特征 /// /// 由 TcCreateHDL 获取的上下文控制句柄 /// 返回的特征数据(最大不会超过 513 字节) /// 成功时:返回值大于等于0(特征长度),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcDoFeature(int vHdl, byte[] hFea); //int TcDoFeature(int vHdl, void* hFea); /// /// 基于安全级别,比对给定的特征和模板,判断它俩是否匹配 /// /// 由 TcCreateHDL 获取的上下文控制句柄(一般传 0 值即可) /// 指纹特征数据 /// 指纹模板数据 /// 安全等级[1-5] /// 成功时:返回值大于等于0,失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcSafeMatch(int vHdl, string hFea, string hTpl, int nLvl = 3); //int TcSafeMatch(int vHdl, const void* hFea,const void* hTpl, int nLvl); /// /// 配置是否弹出对话框,采集指纹特征超时时间等 /// /// 由 TcCreateHDL 获取的上下文控制句柄 /// 操作方向(0=设定新值,1=读取配置值) /// 准备要操作的功能代码(详见配置参数宏定义说明) /// 要配置的新值(详见配置参数宏定义说明) /// 固定 NULL /// 成功时:返回值大于等于0,失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcExtnEntry(int vHdl, int nRead, int nIdx, int nVal, string hVoid); //int TcExtnEntry(int vHdl, int nRead, int nIdx, int nVal, void* hVoid); /// /// 控制设备上的 LED 闪灯和 BUZZER 蜂鸣,声光同时提示 /// /// 由 TcCreateHDL 获取的上下文控制句柄 /// 方式:0=短嘀,1=长嘀,2=嘀嘀 /// 成功时:返回值大于等于0,失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcBeepLight(int vHdl, int nMode); //int TcBeepLight(int vHdl, int nMode); /// /// 获取设备的 32 字节的 SN 产品序列号+1 字节'\0' /// /// 由 TcCreateHDL 获取的上下文控制句柄 /// 返回的 SN 字符串(建议提供 64 个字节缓存) /// 成功时:返回值大于等于0( SN 的长度),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcReadDevSn(int vHdl, StringBuilder chSn); //int TcReadDevSn(int vHdl, char* chSn); /// /// 获取内核版本 /// /// 由 TcCreateHDL 获取的上下文控制句柄 /// 返回的 SN 字符串(建议提供 64 个字节缓存) /// 成功时:返回值大于等于0( SN 的长度),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcGetDevVsin(int vHdl, StringBuilder devSn); #endregion Tc(Test) #region Tc(No Test) /// /// 读取 Win32 的标准 BMP 文件到内存里 /// /// 要读取的来源 BMP 文件的路径 /// 要写入的目标内存缓存区 /// 固定为 3 /// 成功时:返回值大于等于0(编码后图像长度),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcLoadFrBmp(string chFile, IntPtr hFpr, int nStyle); //int TcLoadFrBmp(const char* chFile, void* hFpr, int nStyle); /// /// 指定句柄内五个图像缓冲区中的一个,获取图像数据区数据; /// 在调用此函数前,一定要先调用 TcDoTemplet 或者 TcDoFeature。否则调用失败 /// /// 由 TcCreateHDL 获取的上下文控制句柄 /// 图像缓冲号[0, 4],特征区号 128+[0, 4] /// 返回图像或特征数据区数据,如果是图像建议大小 90K 空间大小 /// 成功时:返回值大于等于0(图像/特征数据长度),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcGetImgDat(int vHdl, int nIdx, IntPtr hFpr); //int TcGetImgDat(int vHdl, int nIdx, void* hFpr); /// /// 另存指纹图像为 Win32 的标准 BMP 文件格式 /// /// 要保存的目标 BMP 文件,已存在则覆盖 /// 由 TcGetImgDat 获取的,将要保存的图像数据 /// 成功时:返回值大于等于0(保存的 BMP 文件字节大小),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcSaveAsBmp(string chFile, IntPtr hFpr); //int TcSaveAsBmp(const char* chFile, const void* hFpr); /// /// 由给定的一枚指纹图像,提取出一枚指纹特征 /// /// TcCreateHDL 获取的上下文控制句柄 /// 由 TcGetImgDat 或者 TcLoadFrBmp 的一枚图像数据 /// 指纹特征数据(最大 513 字节,非定长) /// 成功时:返回值大于等于0(特征长度),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcFeaFrmImg(int vHdl, IntPtr hFpr, StringBuilder hFea); //int TcFeaFrmImg(int vHdl, const void* hFpr, void* hFea); /// /// 由给定的四枚指纹 BMP 图像(或特征),合成出一枚指纹模板 /// /// 由 TcCreateHDL 获取的上下文控制句柄 /// 由 TcGetImgDat 或者 TcLoadFrBmp 获取的四枚图像数据 /// /// /// 其中第四枚图像可以传入 NULL /// 指纹模板数据(最大 513 字节,非定长) /// 成功时:返回值大于等于0(模板长度),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcTplFrmImg(int vHdl, IntPtr hFp0, IntPtr hFp1, IntPtr hFp2, IntPtr hFp3, StringBuilder hTpl); //int TcTplFrmImg(int vHdl, const void* hFp0, const void* hFp1, const void* hFp2, const void* hFp3, void* hTpl); /// /// 给定端口区间,速率,返回首个设备所在的端口号 /// /// 要搜索的目标端口区间[],0 为 USB,>=1 为 COM /// /// 串口波特率索引号[0, 7],对应为[1200, 115200] /// 默认 0 /// BP 盒的前后缀字串儿,可为 NULL,默认用'|'分隔 /// 成功时:返回值大于等于0(0 为 USB,>=1 为 COM,1-com1,2-com2…),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcWhereAreu(int nBgn, int nEnd, int nRidx, int nMask, string chFix); //int TcWhereAreu(int nBgn, int nEnd, int nRidx, int nMask, const char* chFix); /// /// 判断是否有手指按捺(仅限于 USB 设备使用) /// /// TcCreateHDL 获取的上下文控制句柄 /// 成功时:返回值大于等于0(有手指按捺),失败时:返回值小于0(详见函数返回码说明) [DllImport("TesoLive.dll")] public static extern int TcChkPressed(int vHdl); //int TcChkPressed(int vHdl); #endregion Tc(No Test) } }