#ifndef SSSE32_H
#define SSSE32_H
#include <windows.h>
//状态码
#define IFD_OK 0 //执行成功
#define IFD_ICC_TypeError -1 //卡片类型不对
#define IFD_ICC_NoExist -2 //无卡
#define IFD_ICC_NoPower -3 //有卡未上电
#define IFD_ICC_NoResponse -4 //卡片无应答
#define IFD_ConnectError -11 //读卡器连接错
#define IFD_UnConnected -12 //未建立连接(没有执行打开设备函数)
#define IFD_BadCommand -13 //(动态库)不支持该命令
#define IFD_ParameterError -14 //(发给动态库的)命令参数错
#define IFD_CheckSumError -15 //信息校验和出错
#define IFD_PIN_LEN -35 //密码长度不对
#define IFD_PIN_CANCEL -34 //按下取消键
#define IFD_KEY_LEN -36 //下载密钥长度错误
#define IFD_KEY_NUM -37 //密钥套数错误
#define IFD_KEY_EXIS -38 //密钥不存在
#ifdef __cplusplus
extern "C" {
#endif
long WINAPI ICC_Reader_Open(char* dev_Name);
long WINAPI ICC_Reader_Close(long ReaderHandle);
long WINAPI ICC_Reader_Libinfo(char* info);
long WINAPI ICC_Reader_ReadEEPROM (long ReaderHandle,int offset,int length,unsigned char *buffer);//从eeprom读取数据
long WINAPI ICC_Reader_WriteEEPROM (long ReaderHandle,int offset,int length,unsigned char *buffer);//从eeprom写入数据
long WINAPI ICC_Reader_GetDeviceVersion(long ReaderHandle,char *VSoftware,char *VHardware,char *VBoot,char *VDate); //如果VBoot为V0.0表示不带该该版本
long WINAPI ICC_Reader_GetDeviceCSN(long ReaderHandle,char* dev_Ser); //获取唯一序列号,从芯片获取
long WINAPI ICC_Reader_GetDeviceSN(long ReaderHandle,char* dev_Ser); //获取设备序列号,从设备获取
long WINAPI ICC_Reader_SetDeviceSN(long ReaderHandle,char* dev_Ser); //设置设备序列号
long WINAPI ICC_Reader_GetKeyBoardVersion(long ReaderHandle,char* ver); //获取键盘版本号
long WINAPI ICC_Reader_ChangeSlot(long ReaderHandle,unsigned char slot ); //切换卡座
long WINAPI ICC_Reader_SetDeviceReadMode(long ReaderHandle,unsigned char type ); //设置读卡器为主动/被动读卡模式 type==1 主动 type==0被动
long WINAPI ICC_Reader_SetIDReadMode(long ReaderHandle,unsigned char type); //设置读卡器为按公安部标准模式读取身份证 每次操作身份证前调用 type==0 开启 type==1 结束
long WINAPI ICC_Reader_DisCardType(long ReaderHandle); //1:CPU卡;2:4428卡;3:4442卡
long WINAPI ICC_Reader_GetMagCardMode(long ReaderHandle,unsigned short *Mode,unsigned short *Track); //获取磁卡读卡模式 Mode=1 通过软件控制读取 Mode=2模拟键盘
long WINAPI ICC_Reader_SetMagCardMode(long ReaderHandle,unsigned short Mode,unsigned short Track); //设置磁卡读卡模式 Mode=1 通过软件控制读取 Mode=2模拟键盘
long WINAPI ICC_Reader_pre_PowerOn(long ReaderHandle,unsigned char ICC_Slot_No,unsigned char* Response);//上电 冷 返回数据长度
long WINAPI ICC_Reader_hot_PowerOn(long ReaderHandle,unsigned char ICC_Slot_No,unsigned char* Response);//上电 热 返回数据长度
long WINAPI ICC_Reader_PowerOn(long ReaderHandle,unsigned char ICC_Slot_No,unsigned char* Response);//上电 冷+热 返回数据长度
long WINAPI ICC_Reader_PowerOnHEX(long ReaderHandle,unsigned char ICC_Slot_No,unsigned char* Response);//上电 冷+热 返回数据长度
/*
大卡座ICC_Slot_No:0x01
SAM1:0x11
SAM2:0x12
SAM3:0x13
SAM4:0x14
下同
*/
long WINAPI ICC_Reader_PowerOff(long ReaderHandle,unsigned char ICC_Slot_No);
long WINAPI ICC_Reader_GetStatus(long ReaderHandle,unsigned char ICC_Slot_No);//获取卡座状态
long WINAPI ICC_Reader_Application(long ReaderHandle,unsigned char ICC_Slot_No,
long Lenth_of_Command_APDU,unsigned char* Command_APDU,
unsigned char* Response_APDU); //执行apdu命令 返回数据长度
long WINAPI ICC_Reader_ApplicationHEX(long ReaderHandle,unsigned char ICC_Slot_No,
char* Command_APDU,
char* Response_APDU); //执行apdu命令 返回数据长度
//long WINAPI ICC_Reader_Libinfo(char* info);
long WINAPI ICC_PosBeep(long ReaderHandle, unsigned char time);//蜂鸣
//如果读取9600的卡则cpuetu应为96 如果读取38400的卡则cpuetu应为20
long WINAPI ICC_SetCpupara(long ReaderHandle,unsigned char ICC_Slot_No,unsigned char cpupro,unsigned char cpuetu);//设置速率
/*############ 4442基本操作函数#################*/
long WINAPI ICC_Reader_4442_PowerOn(long ReaderHandle,unsigned char *data); //4442卡上电
long WINAPI ICC_Reader_4442_PowerOnHEX(long ReaderHandle,unsigned char *dataHex); //4442卡上电,返回HEX串
long WINAPI ICC_Reader_4442_PowerOff(long ReaderHandle); //4442卡下电
long WINAPI ICC_Reader_4442_Read(long ReaderHandle,int offset,int len,unsigned char *data); //4442卡读数据
long WINAPI ICC_Reader_4442_ReadHEX(long ReaderHandle,int offset,int len,unsigned char *dataHex); //4442卡读数据,返回HEX串
long WINAPI ICC_Reader_4442_Write(long ReaderHandle,int offset,int len,unsigned char *data); //4442卡写数据
long WINAPI ICC_Reader_4442_WriteHEX(long ReaderHandle,int offset,int len,unsigned char *dataHex); //4442卡写数据,传入数据为HEX串
long WINAPI ICC_Reader_4442_Verify(long ReaderHandle,unsigned char *key); //4442卡认证密钥
long WINAPI ICC_Reader_4442_VerifyHEX(long ReaderHandle,unsigned char *keyHex); //4442卡认证密钥,传入密钥为HEX串
long WINAPI ICC_Reader_4442_Change(long ReaderHandle,unsigned char *newkey); //4442卡修改密钥
long WINAPI ICC_Reader_4442_ChangeHEX(long ReaderHandle,unsigned char *newkeyHex); //4442卡修改密钥,传入密钥为HEX串
long WINAPI ICC_Reader_4442_ReadProtect(long ReaderHandle,int offset,int len,unsigned char *data); //4442卡读保护数据
long WINAPI ICC_Reader_4442_WriteProtect(long ReaderHandle,int offset,int len,unsigned char *data); //4442卡写保护数据
long WINAPI ICC_Reader_4442_ReadCount(long ReaderHandle); //读取4442卡密钥剩余认证次数 返回次数0~3次
/*############ 24cXX基本操作函数#################*/
long WINAPI ICC_Reader_24c_PowerOn(long ReaderHandle,unsigned char *data,unsigned char flag); //24cxx卡上电 flag=0为24C01~16 flag=1为24C32~1024
long WINAPI ICC_Reader_24c_PowerOff(long ReaderHandle,unsigned char flag); //24cxx卡下电 flag=0为24C01~16 flag=1为24C32~1024
long WINAPI ICC_Reader_24c_Read(long ReaderHandle,int offset,int len,unsigned char *data,unsigned char flag); //24cxx卡读数据 flag=0为24C01~16 flag=1为24C32~1024
long WINAPI ICC_Reader_24c_Write(long ReaderHandle,int offset,int len,unsigned char *data,unsigned char flag); //24cxx卡写数据 flag=0为24C01~16 flag=1为24C32~1024
/*############ 4428 基本操作函数#################*/
long WINAPI ICC_Reader_4428_PowerOn(long ReaderHandle,unsigned char *data); //4428卡上电
long WINAPI ICC_Reader_4428_PowerOnHEX(long ReaderHandle,unsigned char *dataHex); //4428卡上电,返回HEX串
long WINAPI ICC_Reader_4428_PowerOff(long ReaderHandle); //4428卡下电
long WINAPI ICC_Reader_4428_Read(long ReaderHandle,int offset,int len,unsigned char *data); //4428卡读数据
long WINAPI ICC_Reader_4428_ReadHEX(long ReaderHandle,int offset,int len,unsigned char *dataHex); //4428卡读数据,返回HEX串
long WINAPI ICC_Reader_4428_Write(long ReaderHandle,int offset,int len,unsigned char *data); //4428卡写数据
long WINAPI ICC_Reader_4428_WriteHEX(long ReaderHandle,int offset,int len,unsigned char *dataHEX); //4428卡写数据,传入HEX串
long WINAPI ICC_Reader_4428_Verify(long ReaderHandle,unsigned char *key); //4428卡认证密钥
long WINAPI ICC_Reader_4428_VerifyHEX(long ReaderHandle,unsigned char *keyHex); //4428卡认证密钥,传入密钥为HEX串
long WINAPI ICC_Reader_4428_Change(long ReaderHandle,unsigned char *newkey); //4428卡修改密钥
long WINAPI ICC_Reader_4428_ChangeHEX(long ReaderHandle,unsigned char *newkeyHex); //4428卡修改密钥,传入密钥为HEX串
long WINAPI ICC_Reader_4428_ReadProtect(long ReaderHandle,int offset,int len,unsigned char *data); //4428卡读保护数据
long WINAPI ICC_Reader_4428_WriteProtect(long ReaderHandle,int offset,int len,unsigned char *data); //4428卡写保护数据
long WINAPI ICC_Reader_4428_ReadCount(long ReaderHandle); //读取4428卡密钥剩余认证次数 返回次数0~8次
long WINAPI Rcard(long ReaderHandle,unsigned char ctime,int track,unsigned char *rlen,char *getdata);//读磁条卡
long WINAPI ICC_DispInfo(long ReaderHandle,unsigned char row,unsigned char list,char *data); //显示信息
long WINAPI ICC_DispSound(long ReaderHandle,unsigned char type,unsigned char nMode); //声音提示信息 type(1~14) nMode==0内置键盘语音,nMode==1外置键盘语音
/*
1、请插卡 2、请刷卡 3、读卡错误 4、请输入密码 5、密码错误 6、操作成功 7、操作超时 8、操作失败 9、请取回卡 10、请重新输入密码 11、请再次输入密码 12、请输入新密码 13、请输入旧密码 14、请确认新密码
*/
long WINAPI ICC_CtlLight(long ReaderHandle);//清屏,关屏
long WINAPI ICC_ChangeLight(long ReaderHandle,unsigned char mode);//改变屏幕亮度 mode=1 调亮 mode=0调暗
long WINAPI ICC_DownLoadKey(long ReaderHandle,unsigned char group,unsigned char *Key);//下载工作密钥到键盘里面,group:01、02、03共3组;Key16字符密钥,例如:1122334455667788
long WINAPI ICC_DownLoadMainKey(long ReaderHandle,int mainkeyno,unsigned char *Key);//下载主密钥,0~7组,用于对密文的工作密钥解密 Key==16字节 3DES 8字节 DES
long WINAPI ICC_DownLoadUserKey(long ReaderHandle,int MainKeyNo,int UserKeyNo,unsigned char *Key);//下载工作密钥到键盘里面,0~1组,用主密钥对密文的工作密钥解密 Key==16字节 3DES 8字节 DES
long WINAPI ICC_SetKeyBoardLength(long ReaderHandle,int KeyLen);//设置键盘获取密钥长度,密码长度未达到该长度时,应报错
long WINAPI ICC_ActiveKey(long ReaderHandle,int MainKeyNo,int UserKeyNo);//激活主密钥、工作密钥
long WINAPI ICC_GetInputPass(long ReaderHandle, unsigned char ctime, unsigned char *rlen, unsigned char start,unsigned char stop,unsigned char *cpass);//获取密码,带超时 start==0用内置键盘,start==1用外置键盘
long WINAPI ICC_GetInputPassENC(long ReaderHandle, unsigned char ctime, unsigned char *rlen, unsigned char start,unsigned char group,unsigned char *cpass);//获取密码,密文,带超时 start==0用内置键盘,start==1用外置键盘,group用第几组密钥
long WINAPI ICC_GetEnPass(long ReaderHandle, unsigned char ctime,int MainKeyNo, int UserkeyNo, unsigned char* CardNo,unsigned char *rlen,unsigned char *cpass);//获取密码,密文,MainKeyNo 主密钥号,UserkeyNo 工作密钥号 CardNo 卡号
long WINAPI ICC_GetInputPassEx(long ReaderHandle, unsigned char ctime, int *rlen, unsigned char * cpass, int disinfo,unsigned char type);//xians yuyin
long WINAPI ICC_GetDESMAC(long ReaderHandle,int Type,int MainKeyNo, int UserkeyNo, unsigned char *InData,unsigned char *rlen,unsigned char *OutData);// Type 0-加密 1-POS MAC 2- ANSIX9.19 MAC
long WINAPI ICC_GetInputPassID(long ReaderHandle, unsigned char ctime, unsigned char *rlen, unsigned char start,unsigned char stop,unsigned char * cardID,unsigned char * cpass);//获取密码,带超时,带ID
long WINAPI ICC_GetTimeOut(long ReaderHandle,unsigned char flag);//获取密码、读磁条超时
long WINAPI ICC_PassGet(long ReaderHandle,unsigned char *rlen,unsigned char time,unsigned char start,unsigned char stop,unsigned char * cpass);//获取密码
long WINAPI ICC_PassGetENC(long ReaderHandle,unsigned char *rlen,unsigned char start,unsigned char group,unsigned char * cpass);//获取密码,密文
long WINAPI ICC_PassGetID(long ReaderHandle,unsigned char *rlen,unsigned char time,unsigned char start,unsigned char stop,unsigned char * cardID,unsigned char * cpass);//获取密码,带卡号
long WINAPI ICC_PassCheck(long ReaderHandle,unsigned char *rlen,unsigned char * cpass); //查下数据是否到了
long WINAPI ICC_PassCheck1(long ReaderHandle,unsigned char *rlen,unsigned char * cpass); //查下数据是否到了
long WINAPI ICC_PassSetDES(long ReaderHandle,unsigned char DES); //设置加密模式3des or des
long WINAPI ICC_PassSetDevID(long ReaderHandle,unsigned char *devID);//设置键盘设备ID
long WINAPI ICC_PassGetDevID(long ReaderHandle,unsigned char *devID);//获取键盘设备ID
long WINAPI ICC_PassSetKeyLen(long ReaderHandle,unsigned char len);//设置密码长度
long WINAPI ICC_PassDes(long ReaderHandle,unsigned char flag,unsigned char *InData,unsigned char *OutData); //对数据加解密 flag 0 加密 1 解密
long WINAPI ICC_PassSetFD(long ReaderHandle,unsigned char fd);//密码键盘设置波特率
long WINAPI ICC_GetInputPassACOUNT(long ReaderHandle, unsigned char ctime, unsigned char *rlen,unsigned char * cardID,unsigned char * cpass);//获取密码,带超时,带16 ID
long WINAPI ICC_PassGetACOUNT(long ReaderHandle,unsigned char *rlen,unsigned char time,unsigned char * cardID,unsigned char * cpass);//获取密码,带16卡号
long WINAPI ICC_PassMAC(long ReaderHandle,unsigned char *InData,unsigned char *OutData); //对数据算MAC flag 0 未结束 1 结束
long WINAPI ICC_PassECB(long ReaderHandle,unsigned char *rlen,unsigned char *InData,unsigned char *OutData); //对数据算ECB
long WINAPI ICC_PassChangeMkey(long ReaderHandle,unsigned char MkeyId ,unsigned char *Newmkey); //修改主密钥
long WINAPI ICC_PassChangeWkey(long ReaderHandle,unsigned char MkeyId ,unsigned char Wkeyid,unsigned char *Newmkey); //修改工作密钥
long WINAPI ICC_PassActiveWkey(long ReaderHandle,unsigned char MkeyId ,unsigned char Wkeyid); //激活工作密钥
/*############非接基本操作函数#################*/
long WINAPI PICC_Reader_SetTypeA(long ReaderHandle);//设置读typeA
long WINAPI PICC_Reader_SetTypeB(long ReaderHandle);//设置读typeB
long WINAPI PICC_Reader_Select(long ReaderHandle,unsigned char cardtype);//选择卡片,41为typea,M1 42为typeb,TypeB卡片需先上电后选卡
long WINAPI PICC_Reader_Request(long ReaderHandle);//typea M1请求卡片
long WINAPI PICC_Reader_RFControl(long ReaderHandle);//关闭天线
long WINAPI PICC_Reader_anticoll(long ReaderHandle,unsigned char *uid);//防碰撞 typea M1卡片
long WINAPI PICC_Reader_FindCard(long ReaderHandle);//寻找磁场区域是否有卡
/*############ M1卡操作函数#################*/
long WINAPI PICC_Reader_Authentication(long ReaderHandle,unsigned char Mode, unsigned char SecNr);//认证密钥 M1
long WINAPI PICC_Reader_Authentication_Pass(long ReaderHandle,unsigned char Mode, unsigned char SecNr,unsigned char *PassWord);//认证密钥M1 带密钥参数
long WINAPI PICC_Reader_Readval(long ReaderHandle,unsigned char Addr,unsigned long *value); //读值
long WINAPI PICC_Reader_Initval(long ReaderHandle,unsigned char Addr,unsigned long value);//初始化值
long WINAPI PICC_Reader_Increment(long ReaderHandle,unsigned char Addr,unsigned long value); //增值
long WINAPI PICC_Reader_Decrement(long ReaderHandle,unsigned char Addr,unsigned long value);//减值
long WINAPI PICC_Reader_Read(long ReaderHandle,unsigned char Addr,unsigned char *Data); //读取卡片M1
long WINAPI PICC_Reader_Write(long ReaderHandle,unsigned char Addr,unsigned char *Data);//写入数据M1
long WINAPI PICC_Reader_LoadKey(long ReaderHandle,unsigned char Mode,unsigned char SecNr,unsigned char *Key);//装载密钥
long WINAPI PICC_Reader_ReadHEX(long ReaderHandle,unsigned char Addr,unsigned char *DataHex); //读取卡片M1
long WINAPI PICC_Reader_WriteHEX(long ReaderHandle,unsigned char Addr,unsigned char *DataHex);//写入数据M1
long WINAPI PICC_Reader_LoadKeyHEX(long ReaderHandle,unsigned char Mode,unsigned char SecNr,unsigned char *KeyHex);//装载密钥
/*
SecNr:扇区号
Mode:01 02 03 分别为第一、二、三套密钥KeyA
04 05 06 分别为第一、二、三套密钥KEYB
*/
/*############ TypeA CPU 卡操作函数 #################*/
long WINAPI PICC_Reader_PowerOnTypeA(long ReaderHandle,unsigned char* Response);//上电 返回数据长度 失败小于0
/*############ TypeB CPU 卡操作函数#################*/
long WINAPI PICC_Reader_PowerOnTypeB(long ReaderHandle,unsigned char* Response);//上电 返回数据长度 失败小于0
long WINAPI PICC_Reader_Application(long ReaderHandle,
long Lenth_of_Command_APDU,unsigned char* Command_APDU,
unsigned char* Response_APDU); //type a/b执行apdu命令 返回数据长度 失败小于0
/*身份证读写函数*/
long WINAPI PICC_Reader_ID_Request(long ReaderHandle);//身份证寻卡
long WINAPI PICC_Reader_ID_Select(long ReaderHandle);//身份证选卡
long WINAPI PICC_Reader_ID_Read(long ReaderHandle,unsigned char* Response);//身份证读卡
long WINAPI PICC_Reader_ID_ReadUID(long ReaderHandle,unsigned char* UID);//身份证UID读取
long WINAPI PICC_Reader_ReadIDMsg(long ReaderHandle, const char* pBmpFile, char *pName, char *pSex, char *pNation, char *pBirth, char *pAddress, char *pCertNo, char *pDepartment , char *pEffectData, char *pExpire,char * pErrMsg);
//如果pBmpFile==NULL,则不生成照片,如需生成照片,这里请传入路径。例如:C:/zhaopian/zp.bmp
long WINAPI PICC_Reader_ReadIDInfo(long ReaderHandle, char* pBmpFileData, char *pName, char *pSex, char *pNation, char *pBirth, char *pAddress, char *pCertNo, char *pDepartment , char *pEffectData, char *pExpire,char * pErrMsg);
//如果pBmpFileData==NULL,则不生成照片,如需生成照片,这里输出照片数据信息,需分配77725空间
long WINAPI StrToHex(unsigned char *strIn,int inLen,unsigned char *strOut);//将字符命令流转为16进制流
long WINAPI HexToStr(unsigned char *strIn,int inLen,unsigned char *strOut);//将16进制命令流转为字符流
#ifdef __cplusplus
}
#endif
#endif