#ifndef LIBFRAMEWORK_CARDISSUER_IMPL_H #define LIBFRAMEWORK_CARDISSUER_IMPL_H #include "../../DevAdapter/include/CardIssuerClass.h" #include "../include/CILIX_AUX_UTILS.h" //DRV头文件 #include "../include/DRV_CardDispenser.h" #include "dlfcn.h" #include "stddef.h" typedef DRV_CardDispenser *(*pCreate_DRV_CardDispenser)(); typedef void (*pDestroy_DRV_CardDispenser)(DRV_CardDispenser *p); class CardIssuerClassImpl : public CardIssuerClass { public: CardIssuerClassImpl(); ~CardIssuerClassImpl(); //DeviceBaseClass ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory); ErrorCodeEnum Reset(); ErrorCodeEnum DevClose(); ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo); public: virtual ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate); virtual ErrorCodeEnum GetDevStatus(CardIssuerStatus& devStatus); virtual ErrorCodeEnum GetDeviceSN(char*& pDevSN); virtual ErrorCodeEnum MoveCard(CardPosEnum eCardPos, int hopperNo = 1); // // Set card entry // virtual ErrorCodeEnum SetCardInType(CardInEnum eCardIn); // // Read data from magnetic track. // virtual ErrorCodeEnum MagRead(MagTracks& magTracks); // // Write data to magnetic track. // virtual ErrorCodeEnum MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode); // // Set retract counter // virtual ErrorCodeEnum SetRetractCounter(DWORD dwCount); // // Set issuer counter // hopperNo:多卡箱发卡时指定发卡箱号(面对发卡机,从左往右依次是1,2,3,...号卡箱) // virtual ErrorCodeEnum SetIssuerCounter(DWORD dwCount, int hopperNo = 1); // // Active contact IC card // virtual ErrorCodeEnum ActiveICCard(); // // Move IC card to contact position // virtual ErrorCodeEnum ContactIC(); // // Release IC contact // virtual ErrorCodeEnum ReleaseIC(); // // Warm reset card(IC) // virtual ErrorCodeEnum WarmReset(); // // APDU:Application Protocol Data Unit // CmdSend.lpCmd:Command-APDU // CmdRecv.lpData:Response-APDU // virtual ErrorCodeEnum ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf); //////////////////SAM 卡操作部分//////////////////// virtual ErrorCodeEnum SAMActive(BYTE vcc = 0x30); virtual ErrorCodeEnum SAMDeactivate(); virtual ErrorCodeEnum SAMWarmReset(); virtual ErrorCodeEnum SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf); virtual ErrorCodeEnum SAMQueryStatus(SAMStatus& samStatus); virtual ErrorCodeEnum SAMSelect(const int sn); virtual ErrorCodeEnum ActiveICCardATR(CmdInfo& atrBuf); ////////////////卡面打印部分,部分机型有此功能////////////////// virtual ErrorCodeEnum Print(BYTE*& data, const int dataSize, const int side); virtual ErrorCodeEnum QueryPrinterStatus(); //////////////////////////////////////////////////////////////////////////// ////////非接(IC)部分 start,没有此部分,在接口实现中直接返回Error_NotImpl/////////////// //////////////////////////////////////////////////////////////////////////// // Active contactless IC card(Type A,B,Mifare) // The first,second,third activation order decided by fstType,scdType,thdType respectively // fstType,scdType,thdType can be one of 'A','B','M','0'(30H,no type) // outType indicates the type of activation result // virtual ErrorCodeEnum ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType); // // Deactivate contact IC card // virtual ErrorCodeEnum DeactivateICCard(); // // Deactivate contactless IC card // virtual ErrorCodeEnum DeactContactlessICCard(); // // RF Mifare Classic protocol operation // Arguments: // - eFunType:function type as load key,authentication and so on // - sendBuf:[parameter][data] // - recvBuf:[status(1byte)][return data] // virtual ErrorCodeEnum MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo& recvBuf); // // RF Type A,B command. // APDU:Application Protocol Data Unit // Arguments: // - CmdSend.lpCmd:Command-APDU // - CmdRecv.lpData:Response-APDU // virtual ErrorCodeEnum RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf); ////////非接(IC)部分 end///////////////////////////////////////////////////////// virtual ErrorCodeEnum DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE& btType); ///////////////////////////////////////////////////////////////////////// ///以下是便携式卡机特有API,接口实现中其他机型直接返回Error_NotImpl即可// ///////////////////////////////////////////////////////////////////////// // 返回值Error_Succeed表示成功,其他值表示失败 // iStatus 0:成功 -1:银行公钥不存在 -2:产生设备密钥故障 -x:其他厂商自定义故障 // Cr1:随机数r1的密文; Cr3:随机数r3的密文,dKey:用银行公钥加密的设备公钥密文 // r1,r3第16字节为数据完整性校验字节,例如r1为B1B2...B15B16,则B16=B1^B2^...^B15 virtual ErrorCodeEnum TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR1, BYTE*& Cr3, int& lenR3, BYTE*& dKey, int& lenKey); // 返回值Error_Succeed表示成功,其他值表示失败 // iStatus 0:成功 -x:厂商自定义故障 // r2第16字节为数据完整性校验字节,例如r2为B1B2...B15B16,则B16=B1^B2^...^B15 virtual ErrorCodeEnum SetR2(int& iStatus, BYTE* pCr2, int lenR2); // // 设置会话密钥 // pWorkingKey:会话密钥,传递16进制的字符形式,例如0x123456FFAB --> "123456FFAB" virtual ErrorCodeEnum SendWorkingKey(const char* pWorkingKey); //安全锁接口部分 begin virtual ErrorCodeEnum SLLoadKey(const SCIKeyInfo key); //case ParamBeep: value:0,close beep;value:1,open beep //case ParamLed: value:0,close led;value:1,open led //case ParamLevelTime: value:the duration of level,100ms per unit // ex. the value 10 means duration time is 1 second virtual ErrorCodeEnum SLSetParam(SCIParamType eType, int value); virtual ErrorCodeEnum SLLock(); virtual ErrorCodeEnum SLUnLock(const SCICheckCode checkCode, bool bTemp = true); virtual ErrorCodeEnum SLGetTempData(SCITempData& ksnData, SCITempData& ramData); virtual ErrorCodeEnum SLOpenDoor(const SCITempData data); //安全锁接口部分 end //蓝牙控制部分 start //蓝牙指令控制,命令参看SCIBluetoothCMD说明 virtual ErrorCodeEnum BluetoothControl(SCIBluetoothCMD eCmd); //修改配对密码 virtual ErrorCodeEnum BluetoothModifyKey(unsigned char* key); //修改蓝牙设备名称 virtual ErrorCodeEnum BluetoothModifyName(unsigned char* name); //获取版本信息 virtual ErrorCodeEnum BluetoothGetVersion(char*& version); //获取连接设备名称 virtual ErrorCodeEnum BluetoothGetConnectName(unsigned char*& name); //获取连接设备信号强度 virtual ErrorCodeEnum BluetoothGetSignalStrength(unsigned char*& signal); //蓝牙控制部分 end //控制灯光 //eLight:所控制的灯 ; //bOnOff:true 亮灯;fasle 灭灯 virtual ErrorCodeEnum LightControl(SCILightType eLight, bool bOnOff); //以百分比数值返回剩余电量(1-100),例如剩余51%,则bat赋值为51 virtual ErrorCodeEnum QueryBatteryPower(int& bat); private: int m_mode; public: //DRV实现对象 void *dplHandle; pCreate_DRV_CardDispenser Create_DRV_CardDispenser; pDestroy_DRV_CardDispenser Destroy_DRV_CardDispenser; DRV_CardDispenser *DRVCardDispenser; DevErrorInfo m_errorInfo; bool m_isDevOpened; bool m_isCanceled; int m_SetCardInTypeFlag; bool LoadNTDRVDLL(); void WAITING_LOOP(); bool m_busy_flag; bool m_signal_get_flag; bool m_CardInTypeFlag; ErrorCodeEnum m_StatusErrorCode; CardIssuerStatus tempStatus; int RetainBox; CILIXTrace *m_trace; }; #endif //LIBFRAMEWORK_CARDISSUER_IMPL_H