⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ld_reader.h

📁 读卡器编程实例------Reader programming examples
💻 H
📖 第 1 页 / 共 4 页
字号:
/******************************************************************************
 *
 *                               LD_Reader.H
 *
 *                       VERSION 1.0.2.0 DOS/WINDOWS/OS2
 * 					  福建联迪公司读卡器&密码键盘API接口头文件
 *
 * Author        :-
 * System        :- Borland C++ V3.1,VMS,UNIX,WINDOWS,LINUX
 * Last modified :- 2006.12.19
 *
 * Copyright     : Copyright 2006 LANDI.
 * notice        : All rights reserved.
 *
 ******************************************************************************/
#ifndef __LD_READER_H
#define __LD_READER_H

//如果是LINUX,请将下面注释打开
#define _LINUX_
#define _DOS_

//#define _POS_
#ifdef _FOR_PLB_
#include "c:/foxlck/pro_ext.h"
#else
int						_StrCmp(const char *s1, const char *s2);
void					_PutChr(char ch);
void					_PutStr(char *str);
void					_MemMove(void *dest, void *src, unsigned int length);
void					_MemFill(void *ptr, int character, unsigned int length);
#endif
#ifndef _DOS_
	#ifndef WIN32
		#define WIN32		//
	#endif
#endif
#ifdef WIN32		//define in VC V6.0
	#include <windows.h>
#endif
#include <stdio.h>
#include <string.h>
#include <time.h>

#ifdef WINVER
	#if WINVER <= 0x30a /* Windows 3.1 */
		#include <windows.h>
		#ifndef LOADDS
			#define LOADDS	_loadds
		#endif
		#ifndef PASCAL
			#define PASCAL	_pascal
		#endif
		#define DllExport		WINAPI _export	//Use for make dll
		#define MAKEWORD(a, b)	((WORD) (a) | ((WORD) (b)) << 8)
		typedef WORD			HICC;
		typedef HICC FAR		*LPHICC;
	#else // Windows95 or later
		#include <windows.h>
		#define DllExport	WINAPI

		typedef WORD			HICC;
		typedef HICC FAR		*LPHICC;
	#endif
#else
	#ifndef FAR
		#define FAR
	#endif
	#define DllExport	FAR
	#define NEAR		near
	#define LONG		long
	#define VOID		void
	#define PASCAL
	#define LOADDS

	#define FALSE	0
	#define TRUE	1

	typedef unsigned char	BYTE;
	typedef BYTE FAR		*LPBYTE;
	typedef char FAR		*LPSTR;
	typedef unsigned short	WORD;			//Modify in V3.1
	typedef WORD FAR		*LPWORD;
	typedef unsigned long	DWORD;
	typedef DWORD FAR		*LPDWORD;
	typedef int				BOOL;
	typedef int FAR			*LPINT;
	typedef int (FAR PASCAL *FARPROC) ();
	typedef LPSTR		HANDLE;
	typedef HANDLE FAR	*LPHANDLE;
	typedef WORD		HWND;

	#define MAKELONG(a, b)	((LONG) (((WORD) (a)) | (((DWORD) ((WORD) (b))) << 16)))
	#define LOWORD(l)		((WORD) (l))
	#define HIWORD(l)		((WORD) ((((DWORD) (l)) >> 16) & 0xFFFF))
	#define LOBYTE(w)		((BYTE) (w))
	#define HIBYTE(w)		((BYTE) (((WORD) (w) >> 8) & 0xFF))
#define MAKEWORD(a, b)	((WORD) (a) | ((WORD) (b)) << 8)

	typedef WORD			HICC;
	typedef HICC FAR		*LPHICC;
#endif
#define NAP_TIME		10
#define MAX_DATA_LEN	1000
//#define DEFAULT_TIMEOUT 10000			//缺省通讯超时	10s
#define DEFAULT_TIMEOUT 1000			//缺省通讯超时	10s
#define READPIN_TIMEOUT 70000			//缺省读密码超时 61s
#define uchar			unsigned char
#define ushort			unsigned short
#define uint			unsigned int
#define ulong			unsigned long
typedef ulong			DevHandle;
typedef unsigned char	unsigned_byte_int;

//定义读卡器类型
#define READER_STAR752	1
#define READER_STAR752P 2
#define READER_STAR750	3
#define READER_STAR750P 4
#define READER_STAR7100 5

#ifndef NORMAL
#define NORMAL	0
#endif
#ifndef EXCEPTION
#define EXCEPTION	- 1
#endif

/**********************************************************************
  758宏定义(用于V3.4.4以后版本)
 **********************************************************************/
#ifndef _POS_

//PINPAD CONTROL MODULE
#define EM_pin_SUCCESS		(uchar) 'S'
#define EM_pin_ERROR		(uchar) 'E'
#define EM_pin_ABOLISH		(uchar) 'C'
#define EM_pin_FAULT		(uchar) 'B'
#define EM_pin_CANCEL		(uchar) 'D'

#define EM_pin_KEYON		(uchar) 0x00
#define EM_pin_KEYOFF		(uchar) 0x01
#define EM_pin_ENCRYPTON	(uchar) 0x01
#define EM_pin_ENCRYPTOFF	(uchar) 0x00
#define EM_pin_CODEERR		(uchar) 0x00
#define EM_pin_MASTERKEY	(uchar) 0x00
#define EM_pin_WORKKEY		(uchar) 0x01
#define EM_pin_MACKEY		(uchar) 0x02
#define EM_pin_CTRLVER		(uchar) 'C'
#define EM_pin_USERVER		(uchar) 'U'

/**********************************************************************
  7100宏定义(用于V3.4以后版本)
 **********************************************************************/
#define USING_MIF		'1'
#define USING_PINPAD	'2'

//函数返回值定义
#define EM_mag_NORMAL		0x00		//正常读卡(已读卡)
#define EM_mag_MANUAL		0x03		//手动输入卡号
#define EM_mag_NEEDSTART	0x04		//之前没有调有EA_vStartTrackIn函数

//#define EM_mag_NODATA       0x05    	//缓冲区没有数据可读
//设置是否读取磁道一数据
#define EM_mag_TRKOFF	0x00			//设置磁道一关闭
#define EM_mag_TRKON	0x01			//设置磁道一打开

//设置获取磁卡数据方式
//#define EM_RECARD           0x00    	//无限等待方式
#define EM_TRACKIN			0x01		//读取缓冲区方式
#define EM_mag_ENMANUAL		0x00		//允许手动输入
#define EM_mag_DISMANUAL	0x01		//不允许手动输入

//磁道数据结构体中磁道状态标志字节ucTrkFlag的值
#define EM_mag_SUCCESS	0x00			//正确
#define EM_mag_NULL		0x01			//磁道数据为空
#define EM_mag_HEADERR	0x02			//未找到起始
#define EM_mag_PARERR	0x03			//某字节较验错
#define EM_mag_TAILERR	0x04			//未找到结束
#define EM_mag_LRCERR	0x05			//总较验错
#define EM_mag_ENDERR	0x06			//LRC后不是后导零
#define EM_ic_ATRERR	(uchar) 0xA2	//上电时读卡片回送ATR错误
#define EM_ic_DATAERR	(uchar) 0xE2	//读卡片回送数据错
#define EM_ic_NOPOWER	(uchar) 0xE3	//未上电
#define EM_ic_FORRESP	(uchar) 0xE6

#define EM_ic_SWDIFF	(uchar) 0xE7	//SW1!=0X90或者SW2!=0X00
#define EM_ic_NOCARD	(uchar) 0xFB	//缺卡(SAM卡无此返回)
#endif
#define EM_RECARD		0x00			//无限等待方式
#define EM_mag_NODATA	0x05			//缓冲区没有数据可读

// 数据结构声明
typedef struct				//用于保存返回读出的磁卡数据
{
	uchar	ucTrkFlag;		//保存的磁卡数据信息状态
	uchar	ucTrkLength;	//保存的磁卡有效数据长度
	uchar	ucTrkBuf[150];	//保存的磁卡有效数据
} ET_MAGCARD;

#define EM_SUCCESS			(uchar) 0x00	//成功
#define EM_ERROR			(uchar) 0x01	//错误
#define EM_ABOLISH			(uchar) 0xF6	//
#define EM_DEVICE_USED		(uchar) 0xF7	//设备已经打开
#define EM_TIMEOUT			(uchar) 0xF8	//超时
#define EM_ERRPARAM			(uchar) 0xF9	//错误的参数
#define EM_ERRHANDLE		(uchar) 0xFA	//错误的句柄
#define EM_DEVICE_DISABLE	(uchar) 0xFC	//设备未打开
#define EM_ALLOCERR			(uchar) 0xFD	//
#define EM_FAILED			(uchar) 0xFE	//其它错误	
#define EM_UNKNOWCOMMAND_FF (uchar) 0xFF	//不支持的命令

//返回值定义
#define EM_4428_NOVERIFY	0xE7			//卡片密码未校验	E7	
#define EM_4428_CHGABLE		0x43			//该地址数据可修改	43
#define EM_4428_CHGDISABLE	0x44			//该地址数据不可修改44

//函数参数定义
#define EM_4428_ENABLE	0x00				//允许修改
#define EM_4428_DISABLE 0x01				//不许修改

/* PinPad通讯速率 */
#define PAD57600	4
#define PAD28800	3
#define PAD19200	2
#define PAD9600		1

#define DES_E		0x00
#define EDE			0x10
#define DED			0x20
#define XOR			0x80

/* PinPad输入模式,用于input_str中ubMode参数,控制输入时的显示模式 */
#define DISP		0x00					/*正常显示*/
#define ASTERISK	0x01					/*隐藏模式,只显示"*"*/
#define HEX			0x02					/*允许输入0~9,a~f的十六进制符号*/
#define CHAR		0x04					/*允许输入0~9,a~z*/
#define PINDATA		0x08					/*输入不可读出*/
#define CLR_ALL		0x40
#define VAR_LEN		0x80					/*可变长度输入,直到按"确认"*/
#define RET_IMMEDI	0x20					/*达到指定长度后立即返回*/

/* PinPad文件读写认证权限,用于PAD_FILE_ACC._bit.read_auth和write_auth
   可以用"或"合并使用 */
#define PLAIN_MODE_PAD_FILE		0x00		/*明文方式*/
#define CIPHER_MODE_PAD_FILE	0x01		/*密文方式*/
#define CERTIFY_MODE_PAD_FILE	0x02		/*校验方式,即用MAC计算明文求出校验位,
									 取出前4位加在数据后面*/

/* 以下为函数返回码 */
#ifndef SUCC
#define SUCC	0				/*正确执行*/
#endif
#ifndef FAIL
#define FAIL	- 1				/*失败*/
#endif
#define NO_KEY			- 2		/*所需的密钥不存在*/
#define OUT_MEM			- 3		/*某一数据区已存满*/
#define KEY_USAGE_ERR	- 4		/*密钥使用方法不当*/
#define BUSY_INPUT		- 5		/*PinPad正在等待输入*/
#define ACC_DENY		- 6		/*数据校验不正确/密钥使用方法不当/文件打开方式错*/
#define ERR_NO_DATA		- 7		/*指定的数据区不存在*/
#define FILE_EXIST		- 8		/*创建文件时,文件已经存在*/
#define FILE_RECNO_ERR	- 9		/*文件记录号错*/
#define FILE_NAME_ERR	- 10	/*文件不存在*/
#define NO_RANDOM		- 11	/*未事先申请随机数*/
#define KEY_EXIST		- 12	/*指定密钥已经存在*/
#define BLACK_FILE_ERR	- 13	/* 黑名单文件被破坏*/
#define FILE_NOT_INIT	- 14	/*文件未初始化 */
#define FILE_SPACE_ERR	- 15	/*该文件的空间不足 */

/* Usage Error */
#define TOO_LONG	- 21		/*数据太长*/
#define NO_DOT_FILE - 22		/*调用显示函数时,在当前目录下无字符点阵文件*/
#define ERR_COMMAND - 23		/*错误的命令调用*/

/* Communication Error */
#define CONNECT_ERR - 96		/*属主设备建立连接错误 */
#define SNDCMD_ERR	- 97		/*属主设备发送指令出错*/
#define VERIFY_ERR	- 98		/*属主设备接收数据,校验出错*/
#define RCV_TIMEOUT - 99		/*接收数据超时*/
#define INIT_ERR	- 100		/*PinPad初始化错:未初始化而调用其他函数,
							   或者初始化多次.*/
#define UNDEF_CODE	- 101		/*未定义的返回码*/
#define PARA_ERR	- 102		/*参数错误*/

//用于dll输出全局变量
//PAD03生成动态库用
//__declspec(dllimport)  unsigned char CARD_STATUS , CARD_SW1,CARD_SW2;
//SSSE生成动态库用
extern unsigned char	CARD_STATUS, CARD_SW1, CARD_SW2;

#define ICC_OPER_OK						(CARD_STATUS == 0 && CARD_SW1 == 0x90 && CARD_SW2 == 0) ? 1 : 0
#define ICC_STATUS(status, sw1, sw2)	(CARD_STATUS == status && CARD_SW1 == sw1 && CARD_SW2 == sw2) ? 1 : 0

/*
 * 宏定义:清空缓冲区。
 */
#define BUFCLR(szBuf)		memset(szBuf, 0, sizeof(szBuf))
#define ENQ					0x05
#define STX					0x02
#define ETX					0x03
#define EOT					0x04
#define ACK_750				0x06
#define NAK					0x15
#define ESC					0x1b

#define SUCC_PAD			0
#define FAIL_PAD			1
#define TOO_LONG_PAD		2
#define RCVCMD_ERR_PAD		3
#define NO_KEY_PAD			4
#define WK_FULL_PAD			5
#define KEY_USAGE_ERR_PAD	6
#define BUSY_INPUT_PAD		7
#define NO_DATA_PAD			8
#define ACC_DENY_PAD		9
#define FILE_EXIST_PAD		10
#define OUT_MEM_PAD			11
#define FILE_RECNO_ERR_PAD	12
#define FILE_NAME_ERR_PAD	13
#define NO_RANDOM_PAD		14
#define KEY_EXIST_PAD		15
#define INIT_ERR_PAD		16
#define ERR_COMMAND_PAD		17
#define FAIL_SECU_PAD		18

/* 用于75016新的文件系统*/
#define FILE_FAIL_PAD			0xfc	//失败
#define FILE_NOT_INIT_PAD		0xfd	//未初始化
#define FILE_FALSH_ERR_PAD		0xfb	//FLASH剩余空间不足
#define FILE_SPACE_ERR_PAD		0xf8	//该文件的空间不足,记录已经达到最大,无法继续添加
#define FILE_HMD_ERR_PAD		0xfa	//黑名单被破坏
#define FILE_NOT_FOUND_PAD		21		//文件不存在
#define FILE_REC_FOUND_PAD		22		//存在该记录
#define FILE_REC_NOT_FOUND_PAD	23		//不存在该记录
typedef enum
{
	S9600	= 0x000c,
	S19200	= 0x0006,
	S28800	= 0x0004,
	S57600	= 0x0002
} BPS;
typedef enum
{
	INIT_PORT			= 0,
	GET_SERIALNO		= 0x01,
	INIT_PAD			= 0x02,
	PAD_SOUND			= 0x03,
	DISPS				= 0x04,
	DISPLAY				= 0x05,
	DISPDOT				= 0x06,
	GET_KEY				= 0x07,
	CHECK_KEY			= 0x08,
	INPUT_STR			= 0x09,
	GET_STR				= 0x0a,
	CMP_STR				= 0x0b,
	CHG_MASTERKEY		= 0x10,
	WRITE_WORKKEY		= 0x11,
	DEL_WORKKEY			= 0x12,
	ALLC_TMP_KEY		= 0x13,
	DEL_TMP_KEY			= 0x14,
	GET_RANDOM			= 0x20,
	DATA_DES			= 0x21,
	X919_GKEY			= 0x22,
	DATA_3_DES			= 0x23,
	GEN_MAC				= 0x24,
	GEN_3DES_MAC		= 0x25,
	X98_OUT_PAD			= 0x26,
	ICC_IN				= 0x30,
	POWER_UP_750		= 0x31,
	POWER_DOWN_750		= 0x32,
	INCOME				= 0x33,
	OUTGO				= 0x34,
	EXCHG				= 0x35,
	INIT_FILE			= 0x40,
	CREATE_FILE			= 0x41,
	GET_FILE_HEAD		= 0x42,
	OPEN_FILE			= 0x43,
	READ_FILE			= 0x44,
	WRITE_FILE			= 0x45,
	DEL_REC				= 0x46,
	CLOSE_FILE			= 0x47,
	DEL_FILE			= 0X48,
	FREE_REC			= 0x49,
	FIND_HMD			= 0x4a,
	UPDATE_HMD			= 0x4b,
	APPEND_FILE			= 0x4c,
	MODIFY_FILE			= 0x4d,
	INSERT_HMD			= 0x4e,
	DEL_HMD				= 0x4f,
	GET_K_INDEX			= 0x50,
	SET_K_INDEX			= 0x51,
	WRITE_PBOCKEY		= 0x52,
	VERIFY_PBOC_PIN		= 0x53,
	START_DEBIT			= 0x54,
	CHK_DEBIT_CERT		= 0x55,
	CHANGE_PBOC_PIN		= 0x56,
	GEN_SESSKEY			= 0x57,
	WRITE_USER_WORKKEY	= 0x58,
	WRITE_WORK			= 0x59,
	SAMID				= 0x61,
	MEMICC				= 0x60,
	CLR_PBOC			= 0x62,
	TEST_PAD			= 0x63,
	POS_LOGIN			= 0x64,
	POS_TIME			= 0x65,
	WRITE_MAST			= 0x67,
	WRITE_KEY			= 0x68,
	SET_TRACK			= 0x70,
	OPEN_MAG			= 0x71,
	CLOSE_MAG			= 0x72,
	RE_CARD				= 0x73,
	START_TRACK_IN		= 0x74,
	TRACK_IN			= 0x75,
	READ_PARA			= 0x76,
	WRITE_PARA			= 0x77,
	GET_SERIAL			= 0x78,
	SET_MODE_7100		= 0x80,
	RESET_PAD			= 0xff
} INST;

/* PinPad文件读写权限 */
struct Acc_bit
{
	unsigned int	black : 1;			/*置1-黑名单文件标志*/
	unsigned int	read_auth : 1;		/*置1-以'读'方式打开文件前,必需申请随机数,用"读密钥"
								  加密后,送入open_pad_file中auth_data参数*/
	unsigned int	read_check : 2;		/*读文件认证权限*/
	unsigned int	RFU2 : 1;			/*保留*/
	unsigned int	write_auth : 1;		/*置1-以'写'方式打开文件前,必需申请随机数,用"写密钥"
								  加密后,送入open_pad_file中auth_data参数*/
	unsigned int	write_check : 2;	/*写文件认证权限*/
};

union PAD_FILE_ACC
{
	unsigned char	_byte;
	struct Acc_bit	_bit;
};

/*文件头结构*/
struct PAD_FILE_STRU
{
	unsigned char		name[9];		/*文件名*/
	union PAD_FILE_ACC	acc;			/*文件读写权限*/
	unsigned char		r_keyname[4];	/*读密钥*/
	unsigned char		w_keyname[4];	/*写密钥*/
	unsigned char		open_flag;		/*文件打开标志*/
	short				recnum;			/*一般文件此域保存记录数,
									  黑名单文件保存黑名单记录长度*/
};

#ifdef __cplusplus

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -