You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

294 lines
16 KiB

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