?? ld_reader.h
字號:
/******************************************************************************
*
* 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 + -