1. 开发包的作用 2
2. 开发包文件 2
3. 开发包的稳定性 2
4. 开发包环境支持 2
5. 演示程序环境支持 2
6. 演示程序说明 2
1) C# 2
2) Delphi 3
3) VC 3
7. 检票机配置说明 3
8. 开发包原理图和函数结构 3
1) 软件调用结构 3
2) 开发包函数调用的顺序 4
3) C#演示程序的结构 4
4) Delphi演示程序结构 4
5) 顺极检票机控制板的IO接口 4
9. 检票控制板和闸机之间的连接 4
1) 概述 4
2) 检票机的接法 4
a) 单板单向接法 4
b) 单板双向接法 4
10. 开发包动态库的函数详细说明 4
1. 开发包的作用
1) 控制检票机的开闸、液晶屏/LED屏显示(声音播放)、卡回收机的动作等
2) 以相似的方式接收检票机上各个方向的阅读器的卡号、指纹流、相片流等
3) 监视检票机的过人信号
4) 询问检票机是否在线
2. 开发包文件
1) 开发包动态在SDK\win32\目录中
2) sjudptrans.dll、sjkj_pctomac.dll运行时必须放在主程序同目录下,或者系统环境变量设置的其它路径
3) SJKJ_PC2MAC_CS_DLL.dll是.net程序调用时的二次封装文件
4) sjkj_pctomac.lib 是VC静态调用sjkj_pctomac.dll的.lib文件
5) sjkj_pctomac.h是包内函数的C头文件,其中包含了函数调用说明
6) SDK\C#win7x64demo\目录中,含有sjudptrans.dll、sjkj_pctomac.dll的x64版本,用于.net主程在win7 64位下调用
3. 开发包的稳定性
1) 开发包动态库与检票机实时通信,通信数据进行了封包、校验、分拆,通过开发包收发数据,可靠、高效
2) 开发包动态库内部与检票机之间存在对接时序检验,只要网络硬件可靠,一方发送的数据,总能被对方可靠收到
3) 一个开发包,管理局域网中所有检票机,函数数量少,易于更换成其它厂家开发包
4) 检票机自动维护开发包发来的多个开闸命令,在超时未到之前,自动计数过人,也就是说,通过开发包发送命令,不需要过问时机是否合适
4. 开发包环境支持
1) 本开发包运行于windows xp、win7 32/64位系统
2) 请首先打开:Demos\delphi\Win32\Debug\testPcToMac.exe,如果运行正常,则说明开发包系统环境已支持
5. 演示程序环境支持
1) C#演示程序需要系统支持.net2.0程序
2) 可以打开:Demo\CS\CS.DEMO\bin\Debug\sjkj_pctomac.exe,如果运行正常,说明系统支持.net2.0程序
3) Win7 64位下,可以打开: SDK\C#win7x64demo\sjkj_pctomac.exe,如果运行正常,说明系统支持.net2.0程序;注意:此目录下的开发包DLL是64位的
4) C#演示程序使用Visual Studio 2010编写
5) Delphi演示程序使用 Delphi xe5编写
6) VC演示程序使用Visual Studio 2010编写,VC演示程序演示闸机不间断录入的指纹
7) 演示程序有全部源码,可以用对应的开发工具打开工程,进行再开发
6. 演示程序说明
1) C#
a) C#演示程序将开发包的函数封装成了另一个.net类库,该类库的目录名为“SJKJ_PC2MAC_CS_DLL”,该类库工程包含了全部的源代码,它是托管的DLL,主要目的是将主程序尽可能简化。您可以不关心此类库的源码,只需要将“SDK_DEMOS\CS\SJKJ_PC2MAC_CS_DLL\bin\Release\SJKJ_PC2MAC_CS_DLL.dll”复制到您的工程下,并在工程中添加此类库的引用,然后创建类的全局变量就可以使用了;
b) “Demos\CS\CS.DEMO”是演示程序,就是按照上一步的方法,先将“SJKJ_PC2MAC_CS_DLL.dll”复制到“SDK_DEMOS\CS\CS.DEMO\bin\Debug”中,然后添加引用到工程
c) 开发包的两个DLL动态库“sjkj_pctomac.dll”、“sjudptrans.dll”要与您的“.exe”主程序在同一个目录,本例中是“Debug”目录
d) 使用“SJKJ_PC2MAC_CS_DLL.dll”可以不关心字符编码问题
e) “SJKJ_PC2MAC_CS_DLL.dll”中的函数,和二进制开发包“sjkj_pctomac.dll”中的函数是一一对应的,它的源码在“Demos\CS\SJKJ_PC2MAC_CS_DLL\ sjkjpc2mac.cs”中
2) Delphi
a) Delphi演示程序是将动态库的函数转成对应的全局函数,使用时,将“dllimports.pas”复制到您的工程下
b) 开发包的两个DLL动态库“sjkj_pctomac.dll”、“sjudptrans.dll”要与您的“.exe”主程序在同一个目录,本例中是“Debug”目录
3) VC
a) VC演示程序演示了检票机自动采集指纹到开发包比对的功能
b) VS2010工程静态调用DLL需要用到“Demos\VC\vctest.flg\sjkj_pctomac.lib”
7. 检票机配置说明
1) 您在开发时,检票机相当一台网络上的电脑,有自己的IP地址,开发包通过TCP/IP协议与检票机通信,顺极检票机出厂IP地址从192.168.1.2向192.168.1.99累计
2) 检票机默认与192.168.1.100通信,所以,您的开发电脑(服务器)需要设置成192.168.1.100,否则只能发送数据,不能接收数据
3) 检票机上可以同时接多个阅读器设备,这些阅读器分别安装在检票机的正向(进入)或反向(出门);
4) 如果检票机上有多个相同类型的阅读器,则这些阅读器序号是不同的
5) 检票机上如果安装了液晶屏或LED点阵屏,则在发送命令的同时,还应填充函数的文本参数
6) 无论您是否使用开发包中的相关函数,开发包DLL和检票机的内部通信始终存在
开发包和检票机的通信是实时异步的,不受上层软件调用的影响,上层软件只是获取了通信中的相关数据
8. 开发包原理图和函数结构
1) 软件调用结构
2) 开发包函数调用的顺序
a) 视版本不同,可能函数数量不一样,但形式都一样
b) 发送与接收是两套不相关的函数,比如,只需要向机器发送数据,则不需要接收函数
c) 接收函数是超时阻塞式,应使用单独的线程处理,提高效率;
d) 接收函数一旦收到检票机发来的数据,应立即调用相应的下一个函数取出缓存中的数据,否则数据可能会被覆盖
3) C#演示程序的结构
4) Delphi演示程序结构
5) 顺极检票机控制板的IO接口
9. 检票控制板和闸机之间的连接
1) 概述
检票控制板用于上层软件和闸机之间的通信,是整个检票系统的硬件核心,其作用为开发包的硬件形式,功能和开发包的函数一一对应
检票控制板基于TCP/IP协议,底层采用UDP分包校验处理,每块控制板有一个IP地址
2) 检票机的接法
检票和门禁系统,都有进、出方向的概念,闸机可以双向转动或者开闸。但是,过去不少检票场所都只利用了检票机的一个方向,要么进,要么出,至于哪个进,哪个出,由上层软件人为决定,这样,无论进出,闸机都只朝“一个方向”(进向)转动或开闸
a) 单板单向接法
是指1块控制板控制1组闸机通道,闸机是单向通行的,在检票区附近可设置一块液晶屏
这种接法几乎是收费检票系统唯一的接法,检票机的“进”、“出”方向是由上层软件通过IP地址自行处理,此时开发板的方向都是“正”向控制
在开发包中,如果接收到“方向”的参数“dir”时,应完全忽略,而发送时,永远使用数值“1”
b) 单板双向接法
是指1组闸机通道使用1块控制板,1块控制板分别控制两个方向
这种接法,需要利用开发包中的“方向”参数“dir”,检票机上有检票时,会将阅读器的“进、出”方向通过“dir”参数传到开发包上,而开闸时,将数值(1代表进向开闸,0代表反向开闸)通过“dir”参数再发送过去,检票机就可以按照命令的方向开闸并在相应屏上显示文本
10. 开发包动态库的函数详细说明
请使用“vs2010”或者其它能格式化c函数的开发环境打开“sjkj_pctomac.h”头文件参阅
“sjkj_pctomac.h”头文件内容
#define TRAN_ALL_BUFFSIZE (1024*1024*1)//允接收的最大缓存为1M
////send,发送到控制板各命令的意义
enum TY_SEND_FUNTP{
SEND_FUNTP_NONE=0,//占空,无意义
SEND_FUNTP_OPEN,//开闸
SEND_FUNTP_NOTICE,//通知
SEND_FUNTP_OPED,//常开
SEND_FUNTP_RESU,//常开恢复
SEND_FUNTP_INV,//检票无效
SEND_FUNTP_ASK,//询问状态
SEND_FUNTP_STIP,//设置IP.此值已丢弃,非开发包一部分
/*以下是硬件比对指纹的函数*/
SEND_FUNTP_GFGR,//请求指纹
SEND_FUNTP_MTFGR,//比对指纹
SEND_FUNTP_REBOOT,//重新启动.此值已丢弃,非开发包一部分
SEND_FUNTP_CMMIT//提交系统写入.此值已丢弃,非开发包一部分
,SEND_FUNTP_DISMAC//检票机外设禁能
,SEND_FUNTP_ENMAC//检票机外设使能
,SEND_FUNTP_GETIMG//命令检票机拍照
};
//************************************
// Method: sjkjsopen 命令检票机开闸
// Returns: int 值为1表示发送命令成功,0表示失败;返回值是32位的整型
// Parameter: char dir 检票机的开闸方向,1为右,0为左;是8位整数
// Parameter: char idx 针对上次发送来的阅读器的序号;是8位整数(可以不使用)
// Parameter: char flg 上次发送来的阅读器是否在卡机中;1为是,0为否;是8位整数(可以不使用)
// Parameter: char * nacn30 票名称,不超过30字节;GBK编码
// Parameter: char * naen120 票名称的英文翻译,不超过120字节;GBK编码
// Parameter: char * mncn50 票的描述,不超过50字节;GBK编码
// Parameter: char * mnen200 票的英文描述,不超过200字节;GBK编码
// Parameter: char suid 控制检票机播放的声音:8位的整数,是数学值(注意,不是字符);0为播放检票机内预定的声音(常用)
// Parameter: int tid 发送给检票机的标记值,是32位的整型,如果不需此标记,设置成0;该值的作用是:如果一次检票过程没有结束,检票机返回时,会将此值再次发送过来,通过该值,在多个检票机同时通信时,可以模拟“处理事务”
// Parameter: char * macip 检票机的IP地址,在字节序列上,必须以'\0'结尾的字符串,形式如“192.168.1.111\0”;GBK编码
//************************************
int sjkjsopen(char dir,char idx,char flg,char* nacn30,char* naen120,char* mncn50,char* mnen200,char suid,int tid,char* macip);
//************************************
// Method: sjkjsnotice 向检票机发送通知;通知只是显示文本和声音,检票机不会产生机械动作
// Returns: int
// Parameter: char dir 针对的检票机的方向,1为右,0为左;是8位整数
// Parameter: char idx 针对上次发送来的阅读器的序号;是8位整数(可以不使用)
// Parameter: char flg 上次发送来的阅读器是否在卡机中;1为是,0为否;是8位整数(可以不使用)
// Parameter: char * mncn50 描述,不超过50字节;GBK编码
// Parameter: char * mnen200 英文描述,不超过200字节;GBK编码
// Parameter: char suid 控制检票机播放的声音:8位的整数,是数学值(注意,不是字符);0为播放检票机内预定的声音(常用)
// Parameter: int tid 发送给检票机的标记值,是32位的整型,如果不需此标记,设置成0;该值的作用是:如果一次检票过程没有结束,检票机返回时,会将此值再次发送过来,通过该值,在多个检票机同时通信时,可以模拟“处理事务”
// Parameter: char * macip 检票机的IP地址,在字节序列上,必须以'\0'结尾的字符串,形式如“192.168.1.111\0”;GBK编码
//************************************
int sjkjsnotice(char dir,char idx,char flg,char* mncn50,char* mnen200,char suid,int tid,char* macip);
/************************************
Method: sjkjsoped 命令检票机常开;常开后,除非取消,否则其它命令将不再执行;如果检票机不支持常开命令,将忽略
参数意义同sjkjsopen
************************************/
int sjkjsoped(char dir,char idx,char flg,char* nacn30,char* naen120,char* mncn50,char* mnen200,char suid,int tid,char* macip);
/************************************
Method: sjkjsresu 取消检票机的常开命令
参数意义同sjkjsnotice
************************************/
int sjkjsresu(char dir,char idx,char flg,char* mncn50,char* mnen200,char suid,int tid,char* macip);
/************************************
Method: sjkjsinv 向检票机发送票无效命令
参数意义同sjkjsnotice
************************************/
int sjkjsinv(char dir,char idx,char flg,char* mncn50,char* mnen200,char suid,int tid,char* macip);
/************************************
Method: sjkjsask 向检票机发送询问,将得到检票机的回复,从回复中可以得到为:1、在线,2、检票机状态,3、人正在检票通行的人数
参数意义同sjkjsopen
************************************/
int sjkjsask(int tid,char* macip);
/************************************
Method: sjkjsip 向检票机发送新的IP,检票机将设置成新的静态IP;带写保护的检票机会自动重启应用新的IP
Returns: int
Parameter: char * ip
新的IP地址,在字节序列上,必须以'\0'结尾的字符串,形式如“192.168.1.112\0”
Parameter: char * mk
新的掩码地址,在字节序列上,必须以'\0'结尾的字符串,形式如“255.255.255.0\0”
Parameter: char * gt
新的网关地址,在字节序列上,必须以'\0'结尾的字符串,形式如“192.168.1.1\0”
************************************/
int sjkjsip(char* ip,char* mk,char* gt,char* macip);
//************************************
// Method: sjkjscommit 提交数据;如果检票板带在写保护,在写入数据后,先执行提交后再重启生效;无论写入多少次数据,提交只要1次
// Returns: int
//************************************
int sjkjscommit(int tid,char* macip);
//************************************
// Method: sjkjsboot 命令检票板重新启动;如果检票板带在写保护,在写入数据后,先执行提交后再重启生效
// Returns: int
//************************************
int sjkjsboot(int tid,char* macip);
/************************************
Method: sjkjsgetfgr
请求录入指纹
检票机将请求用户录入指纹,并处理成指纹的二进制特征值
参数意义同sjkjsnotice
************************************/
int sjkjsgetfgr(char dir,char idx,char flg,char* mncn50,char* mnen200,char suid,int tid,char* macip);
/************************************
Method: sjkjsmathfgr
请求比对指纹
检票机将接收发送的指纹特征值,并请求用户录入指纹,进行比对
参数意义同sjkjsnotice
Parameter: char * pdat
要传给检票机进行比对指纹特征值二进制文件流;应将文件流转成字节数组或者内存流,dat为内存的首地址
Parameter: int datlen
数据的有效长度
Parameter:int ivl
指纹数据分片传输的间隔,单位是毫秒。如果所在机器性能较低,可以为0,间隔越大,传输越慢,但接收端更可靠。
************************************/
int sjkjsmathfgr(char dir,char idx,char flg,char* mncn50,char* mnen200,char suid,int tid,char* pdat,int datlen,char* macip,int ivl);
/************************************
Method: sjkjsdismac
检票机外设禁能
禁能后,该方向上的录入设备录入无效
禁能后,检票机显示屏上保持发送的文本,直到发送使能命令
禁能命令是主动发出,重启后,默认是使能状态
Returns: int
4字节int型,返回1表示命令发送成功
Parameter: char dir
1字节char型,数值为0表示反方向,1表示正方向
Parameter: char flg
1字节char型,如果值为1,会吐出卡机中的卡
Parameter: char * mncn50
描述,不超过50字节;GBK编码
Parameter: char * mnen200
英文描述,不超过200字节;GBK编码
Parameter: char suid
1字节char型,控制检票机播放的声音:8位的整数,是数学值(注意,不是字符);0为播放检票机内预定的声音(常用)
Parameter: int tid 发送给检票机的标记值,是32位的整型,如果不需此标记,设置成0;该值的作用是:如果一次检票过程没有结束,检票机返回时,会将此值再次发送过来,通过该值,在多个检票机同时通信时,可以模拟“处理事务”
Parameter: char * macip 检票机的IP地址,在字节序列上,必须以'\0'结尾的字符串,形式如“192.168.1.111\0”;GBK编码
************************************/
int sjkjsdismac(char dir,char idx,char flg,char* mncn50,char* mnen200,char suid,int tid,char* macip);
/************************************
Method: sjkjsenmac
检票机外设使能
使能后,该方向上显示发送的提示文本一段时间,然后回到初始化界面
Returns: int
4字节int型,返回1表示命令发送成功
Parameter: char dir
1字节char型,数值为0表示反方向,1表示正方向
Parameter: char flg
1字节char型,如果值为1,会吞卡
Parameter: char * mncn50
描述,不超过50字节;GBK编码
Parameter: char * mnen200
英文描述,不超过200字节;GBK编码
Parameter: char suid
1字节char型,控制检票机播放的声音:8位的整数,是数学值(注意,不是字符);0为播放检票机内预定的声音(常用)
Parameter: int tid 发送给检票机的标记值,是32位的整型,如果不需此标记,设置成0;该值的作用是:如果一次检票过程没有结束,检票机返回时,会将此值再次发送过来,通过该值,在多个检票机同时通信时,可以模拟“处理事务”
Parameter: char * macip 检票机的IP地址,在字节序列上,必须以'\0'结尾的字符串,形式如“192.168.1.111\0”;GBK编码
************************************/
int sjkjsenmac(char dir,char idx,char flg,char* mncn50,char* mnen200,char suid,int tid,char* macip);
/************************************
Method: sjkjsgetimg
命令检票机拍照
拍照是后台动作,没有提示
Returns: int
4字节int型,返回1表示命令发送成功
Parameter: char dir
1字节char型,数值为0表示反方向,1表示正方向
Parameter: char flg
1字节char型,如果值为1,会吞卡
Parameter: int tid 发送给检票机的标记值,是32位的整型,如果不需此标记,设置成0;该值的作用是:如果一次检票过程没有结束,检票机返回时,会将此值再次发送过来,通过该值,在多个检票机同时通信时,可以模拟“处理事务”
Parameter: char * macip 检票机的IP地址,在字节序列上,必须以'\0'结尾的字符串,形式如“192.168.1.111\0”;GBK编码
************************************/
int sjkjsgetimg(char dir,char idx,char flg,int tid,char* macip);
////receive
//////////////////////////////////////////////////////////////////////////
//查询检票机发送来的数据,用到的值
//////////////////////////////////////////////////////////////////////////
//接收控制板端的数据
enum TY_REV_CMD_PAM{
rev_no_data=0,//没有收到数据
rev_crd_cd,//收到有人检票
rev_per_ovr,//收到有人通过检票机
rev_get_fgr,//收到检票机录入指纹成功
rev_mach_fgr,//收到检票机上比对指纹的结果
rev_get_ms//收到检票机的状态
,rev_get_atfgr//收到检票机上自动录入指纹
,rev_get_img//收到检票机上的拍照
};
enum TY_CARD_TP{
sc_id=1,//ID卡
sc_ic,//IC卡
sc_idt,//身份证
sc_ew,//一维码
sc_yw,//二维码
sc_ot//其它
};
//检票机的状态
enum McStateDef{
MC_MAC_OK=1,//机器已就绪
MC_MAC_UN,//机器没就绪
MC_MAC_ERROR,//闸机出错,已经停止
MC_ALARM//闸机有人站在报警区
};
//////////////////////////////////////////////////////////////////////////
/************************************
Method: sjkjstart
开始接收检票机端的数据
Returns: int
如果返回1,表示开始成功,否则失败,只有成功了,才能进行下一步
************************************/
int sjkjstart();
/************************************
Method: sjkjhavedata
查找是否有数据来到
应该在多线程中,循环中调用此函数
Returns: int 数值对应的意思为 TY_REV_CMD_PAM 类型
返回32位整形值
需要通过返回的值,决定要执行以后的函数!
0:没有收到数据;
1:有人检票
此时需要调用sjkjrcrd获取号码等详细数据
2:有人通过
此时要调用sjkjrovred查找过人的详细数据
如果只需知道远程ip地址,也可以用sjkjrip代替sjkjrovred
如果不需知道人通过的其它信息,可以不调用sjkjrovred或者sjkjrip
3:有人录入指纹
此时需要调用sjkjrfgr获取指纹特征值
4:指纹比对的结果
此时需要调用sjkjrcore获取比对的结果
5:检票机在线
此时需要调用sjkjrip查找远程ip地址
如果不需知道远程ip地址,可以不调用sjkjrip
6:有人自动录入指纹
此时需要调用sjkjratfgr获取指纹的详细数据
7: 拍照片
此时需要调用sjkjrimg获取图片数据
Parameter: int timeout
32位int型,该值只是在没有数据时阻塞的时间,如果有数据时,将立即返回
也就是说,该间隔的长短,并不影响实际数据的接收
时间越长,对CPU占用越小,该值可以是大于10毫秒的任意值,比如200
本函数是阻塞执行的,但其内部接收数据的机制却是非阻塞的
************************************/
int sjkjhavedata(int timeout);
/************************************
Method: sjkjrcrd
获取检票信息;注意,所有指针都要先按规定的字节分配内存空间,用于接收
如果检票时,反方向还有行人,或者检票机状态不正常,此函数不会发生
Parameter: char * pcst 8位数值型指针,其中会填充数字,代表阅读器的类型; 填充的值代表的类型:1为ID卡,2为IC卡,3为身份证(注意,是数值)
Parameter: char * pdir 8位数值型指针,其中会填充数字; 1为右,0为左
Parameter: char * pcidx 8位数值型指针,其中会填充数字,代表阅读器的序号
该数值只在检票机的同一方向上包含两个及以上相同的阅读器时,才有可能派上用场
顺极科技检票机可以同时支持多个阅读器,数值从0开始编号
该值与检票机的接法有关系
以北京地铁的检票机为例:
在进入时,临时IC卡和充值IC卡使用同一个读卡器,则cidx的值没有作用
而出口时,临时IC卡回收,充值IC卡刷卡,上位机软件通过cidx的值判断出用户刷卡的位置,如果用户误将充值卡塞入回收机,或者用临时卡刷上方的阅读器,均为错误操作,软件应做出相应的拒绝回复
Parameter: char * pflg 8位数值型指针,其中会填充数字,代表是否在回收机中;1为是,0为否;如果不通过 pcidx判断是否在回收机中,则可以通过此值判断
Parameter: char * c40 是字符指针,其中将填充卡号,卡号是以'\0'结尾的;须分配的内存不小于40字节;如果是身份证,则为身份证号;为GBK编码
Parameter: char * c150 是字符指针,其中将其它信息,是以'\0'结尾的;须分配的内存不小于150字节;如果是身份证,内容是:姓名|姓别|出生年月|住址;为GBK编码
Parameter: int *ptid
是32位的整型,被检票机发来的标记值填充
该值的是由发送函数发过去的标记值,检票机只是将该值原样发送过来
Parameter: char * remoteip
是字符串指针,其中填充了检票机的IP地址,结尾为“\0”,该字符的缓冲区的不小于24字节;为GBK编码
************************************/
void sjkjrcrd(char* pcst,char* pdir,char* pcidx,char* pflg,char* c40,char* c150,int* ptid,char* premoteip);
/************************************
Method: sjkjrovred
获取人通过的详细信息
人通过后,此函数就会发生一次,如果需要计算实际通过的人数,只需要计算此函数发生的次数即
如果检票机上通过遥控、门禁信号、按钮开闸后,有人通过检票机,此函数会发生
如果没有检票通过检票机,此函数不会发生
Parameter: int *ppers
目前还有多少人检票后正在通过检票机
如果排队检票,则前人还未通过时,后面又有人检票,则检票机将计数,则产生此值
如果行人排队时,长时间不通过,则会超时清0而关闸,通过此检票机的人数可能小于ppers
Parameter: char * pdir 代表ppers人通行的方向;1为右,0为左
************************************/
void sjkjrovred(int * ppers,char *pdir,int* ptid,char* premoteip);
/************************************
Method: sjkjrip
获取远程检票机的IP地址
在sjkjhavedata的返回值大于0后,可以调用此函数简单的获取检票机的IP地址
该函数调用后,不影响其它函数
************************************/
void sjkjrip(char* premoteip);
/************************************
Method: sjkjrfgr
获取二进制指纹文件的特征值,得到的文件应编号后保存起来,以便下次用于核对
注意:只有主动发送sjkjsgetfgr,并且指纹获取正确,此函数才会发生
Parameter: char * pdir
8位数值型指针,其中会填充数字
1为进,0为出
Parameter: char * pidx
8位数值型指针,其中会填充数字,代表的序号
该数值只在检票机的同一方向上包含两个及以上相同的指纹仪时,才有可能派上用场
一般情况下,检票机上只有一个指纹仪,因此无需关心此值
Parameter: int *ptid
Parameter: char * pdat
将被填充为指纹特征文件的字节流
指纹特征文件不大于512字节,要分配512字节的内存缓冲区用于接收
Parameter: int * pdatlen
32位整形值,其中填充的数值表示pdat的有效长度
************************************/
void sjkjrfgr(char* pdir,char* pidx,char* pflg,int* ptid,char* pdat,int* pdatlen,char* premoteip);
/************************************
Method: sjkjrcore
当发送一个本地存在的指纹文件,让用户在检票机上比对指纹后,会得到相似度结果
注意:只有主动发送sjkjsmathfgr,此函数才会发生
Parameter: int * score
是32字节的整形,其中填充了指纹比对的结果
结果为0~255,只要大于30,就可以认为是同一个人,此值和指纹仪硬件相关
************************************/
void sjkjrcore(char* pdir,char* pidx,char* pflg,int* ptid,int* score,char* premoteip);//取指纹比对的结果
/************************************
Method: sjkjratfgr
获取二进制的即时录入的指纹文件,该文件是特征值流或者是图片流;具体是哪种数据,是在检票机中事先配置好的
Parameter: char * pdir
8位数值型指针,其中会填充数字
1为进向,0为出向
Parameter: char * pidx
8位数值型指针,其中会填充数字,代表的序号
该数值只在检票机的同一方向上包含两个及以上相同的指纹仪时,才有可能派上用场
一般情况下,检票机上只有一个指纹仪,因此无需关心此值
Parameter: int *ptid
Parameter: char * pdat
将被填充为指纹文件的字节流
指纹特征值不大于512字节,而图片不大于64K,需要提前分配不小于该容量的内存缓冲区用于接收
Parameter: int * pdatlen
32位整形值,其中填充的数值表示pdat的有效长度
Parameter: char * remoteip
是字符串指针,其中填充了检票机的IP地址,结尾为“\0”,该字符的缓冲区的不小于24字节;为GBK编码
************************************/
void sjkjratfgr(char* pdir,char* pidx,char* pflg,int* ptid,char* pdat,int* pdatlen,char* premoteip);
//************************************
// Method: sjkjgetsa 取得检票机状态
// Returns: void
// Qualifier:
// Parameter: char * psta 8位指针,代表检票机的状态
//************************************
void sjkjgetsa(int* ptid,char* psta,char* premoteip);
/************************************
Method: sjkjrimg
获取二进制的录入的拍照文件,该文件是图片流
Parameter: char * pdir
8位数值型指针,其中会填充数字
1为进向,0为出向
Parameter: char * pidx
8位数值型指针,其中会填充数字,代表的序号
该数值只在检票机的同一方向上包含两个及以上相同的指纹仪时,才有可能派上用场
一般情况下,检票机上只有一个指纹仪,因此无需关心此值
Parameter: int *ptid
Parameter: char * pdat
将被填充为图片文件的字节流
图片不大于1M,需要提前分配不小于该容量的内存缓冲区用于接收
Parameter: int * pdatlen
32位整形值,其中填充的数值表示pdat的有效长度
Parameter: char * remoteip
是字符串指针,其中填充了检票机的IP地址,结尾为“\0”,该字符的缓冲区的不小于24字节;为GBK编码
************************************/
void sjkjrimg(char* pdir,char* pidx,char* pflg,int* ptid,char* pdat,int* pdatlen,char* premoteip);
/************************************
Method: sjkjstop
停止接收检票闸机端的数据
如果sjkjstart执行成功了,在程序结束时,必须执行此函数;反之,不应执行
************************************/
void sjkjstop();