cardissuer.nantian.1.1.h 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. #ifndef LIBFRAMEWORK_CARDISSUER_IMPL_H
  2. #define LIBFRAMEWORK_CARDISSUER_IMPL_H
  3. #include "../../DevAdapter/include/CardIssuerClass.h"
  4. #include "../include/CILIX_AUX_UTILS.h"
  5. //DRV头文件
  6. #include "../include/DRV_CardDispenser.h"
  7. #include "dlfcn.h"
  8. #include "stddef.h"
  9. typedef DRV_CardDispenser *(*pCreate_DRV_CardDispenser)();
  10. typedef void (*pDestroy_DRV_CardDispenser)(DRV_CardDispenser *p);
  11. class CardIssuerClassImpl : public CardIssuerClass
  12. {
  13. public:
  14. CardIssuerClassImpl();
  15. ~CardIssuerClassImpl();
  16. //DeviceBaseClass
  17. ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
  18. ErrorCodeEnum Reset();
  19. ErrorCodeEnum DevClose();
  20. ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
  21. public:
  22. virtual ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate);
  23. virtual ErrorCodeEnum GetDevStatus(CardIssuerStatus& devStatus);
  24. virtual ErrorCodeEnum GetDeviceSN(char*& pDevSN);
  25. virtual ErrorCodeEnum MoveCard(CardPosEnum eCardPos, int hopperNo = 1);
  26. //
  27. // Set card entry
  28. //
  29. virtual ErrorCodeEnum SetCardInType(CardInEnum eCardIn);
  30. //
  31. // Read data from magnetic track.
  32. //
  33. virtual ErrorCodeEnum MagRead(MagTracks& magTracks);
  34. //
  35. // Write data to magnetic track.
  36. //
  37. virtual ErrorCodeEnum MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode);
  38. //
  39. // Set retract counter
  40. //
  41. virtual ErrorCodeEnum SetRetractCounter(DWORD dwCount);
  42. //
  43. // Set issuer counter
  44. // hopperNo:多卡箱发卡时指定发卡箱号(面对发卡机,从左往右依次是1,2,3,...号卡箱)
  45. //
  46. virtual ErrorCodeEnum SetIssuerCounter(DWORD dwCount, int hopperNo = 1);
  47. //
  48. // Active contact IC card
  49. //
  50. virtual ErrorCodeEnum ActiveICCard();
  51. //
  52. // Move IC card to contact position
  53. //
  54. virtual ErrorCodeEnum ContactIC();
  55. //
  56. // Release IC contact
  57. //
  58. virtual ErrorCodeEnum ReleaseIC();
  59. //
  60. // Warm reset card(IC)
  61. //
  62. virtual ErrorCodeEnum WarmReset();
  63. //
  64. // APDU:Application Protocol Data Unit
  65. // CmdSend.lpCmd:Command-APDU
  66. // CmdRecv.lpData:Response-APDU
  67. //
  68. virtual ErrorCodeEnum ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf);
  69. //////////////////SAM 卡操作部分////////////////////
  70. virtual ErrorCodeEnum SAMActive(BYTE vcc = 0x30);
  71. virtual ErrorCodeEnum SAMDeactivate();
  72. virtual ErrorCodeEnum SAMWarmReset();
  73. virtual ErrorCodeEnum SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf);
  74. virtual ErrorCodeEnum SAMQueryStatus(SAMStatus& samStatus);
  75. virtual ErrorCodeEnum SAMSelect(const int sn);
  76. virtual ErrorCodeEnum ActiveICCardATR(CmdInfo& atrBuf);
  77. ////////////////卡面打印部分,部分机型有此功能//////////////////
  78. virtual ErrorCodeEnum Print(BYTE*& data, const int dataSize, const int side);
  79. virtual ErrorCodeEnum QueryPrinterStatus();
  80. ////////////////////////////////////////////////////////////////////////////
  81. ////////非接(IC)部分 start,没有此部分,在接口实现中直接返回Error_NotImpl///////////////
  82. ////////////////////////////////////////////////////////////////////////////
  83. // Active contactless IC card(Type A,B,Mifare)
  84. // The first,second,third activation order decided by fstType,scdType,thdType respectively
  85. // fstType,scdType,thdType can be one of 'A','B','M','0'(30H,no type)
  86. // outType indicates the type of activation result
  87. //
  88. virtual ErrorCodeEnum ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType);
  89. //
  90. // Deactivate contact IC card
  91. //
  92. virtual ErrorCodeEnum DeactivateICCard();
  93. //
  94. // Deactivate contactless IC card
  95. //
  96. virtual ErrorCodeEnum DeactContactlessICCard();
  97. //
  98. // RF Mifare Classic protocol operation
  99. // Arguments:
  100. // - eFunType:function type as load key,authentication and so on
  101. // - sendBuf:[parameter][data]
  102. // - recvBuf:[status(1byte)][return data]
  103. //
  104. virtual ErrorCodeEnum MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo& recvBuf);
  105. //
  106. // RF Type A,B command.
  107. // APDU:Application Protocol Data Unit
  108. // Arguments:
  109. // - CmdSend.lpCmd:Command-APDU
  110. // - CmdRecv.lpData:Response-APDU
  111. //
  112. virtual ErrorCodeEnum RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf);
  113. ////////非接(IC)部分 end/////////////////////////////////////////////////////////
  114. virtual ErrorCodeEnum DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE& btType);
  115. /////////////////////////////////////////////////////////////////////////
  116. ///以下是便携式卡机特有API,接口实现中其他机型直接返回Error_NotImpl即可//
  117. /////////////////////////////////////////////////////////////////////////
  118. // 返回值Error_Succeed表示成功,其他值表示失败
  119. // iStatus 0:成功 -1:银行公钥不存在 -2:产生设备密钥故障 -x:其他厂商自定义故障
  120. // Cr1:随机数r1的密文; Cr3:随机数r3的密文,dKey:用银行公钥加密的设备公钥密文
  121. // r1,r3第16字节为数据完整性校验字节,例如r1为B1B2...B15B16,则B16=B1^B2^...^B15
  122. virtual ErrorCodeEnum TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR1, BYTE*& Cr3, int& lenR3, BYTE*& dKey, int& lenKey);
  123. // 返回值Error_Succeed表示成功,其他值表示失败
  124. // iStatus 0:成功 -x:厂商自定义故障
  125. // r2第16字节为数据完整性校验字节,例如r2为B1B2...B15B16,则B16=B1^B2^...^B15
  126. virtual ErrorCodeEnum SetR2(int& iStatus, BYTE* pCr2, int lenR2);
  127. //
  128. // 设置会话密钥
  129. // pWorkingKey:会话密钥,传递16进制的字符形式,例如0x123456FFAB --> "123456FFAB"
  130. virtual ErrorCodeEnum SendWorkingKey(const char* pWorkingKey);
  131. //安全锁接口部分 begin
  132. virtual ErrorCodeEnum SLLoadKey(const SCIKeyInfo key);
  133. //case ParamBeep: value:0,close beep;value:1,open beep
  134. //case ParamLed: value:0,close led;value:1,open led
  135. //case ParamLevelTime: value:the duration of level,100ms per unit
  136. // ex. the value 10 means duration time is 1 second
  137. virtual ErrorCodeEnum SLSetParam(SCIParamType eType, int value);
  138. virtual ErrorCodeEnum SLLock();
  139. virtual ErrorCodeEnum SLUnLock(const SCICheckCode checkCode, bool bTemp = true);
  140. virtual ErrorCodeEnum SLGetTempData(SCITempData& ksnData, SCITempData& ramData);
  141. virtual ErrorCodeEnum SLOpenDoor(const SCITempData data);
  142. //安全锁接口部分 end
  143. //蓝牙控制部分 start
  144. //蓝牙指令控制,命令参看SCIBluetoothCMD说明
  145. virtual ErrorCodeEnum BluetoothControl(SCIBluetoothCMD eCmd);
  146. //修改配对密码
  147. virtual ErrorCodeEnum BluetoothModifyKey(unsigned char* key);
  148. //修改蓝牙设备名称
  149. virtual ErrorCodeEnum BluetoothModifyName(unsigned char* name);
  150. //获取版本信息
  151. virtual ErrorCodeEnum BluetoothGetVersion(char*& version);
  152. //获取连接设备名称
  153. virtual ErrorCodeEnum BluetoothGetConnectName(unsigned char*& name);
  154. //获取连接设备信号强度
  155. virtual ErrorCodeEnum BluetoothGetSignalStrength(unsigned char*& signal);
  156. //蓝牙控制部分 end
  157. //控制灯光
  158. //eLight:所控制的灯 ;
  159. //bOnOff:true 亮灯;fasle 灭灯
  160. virtual ErrorCodeEnum LightControl(SCILightType eLight, bool bOnOff);
  161. //以百分比数值返回剩余电量(1-100),例如剩余51%,则bat赋值为51
  162. virtual ErrorCodeEnum QueryBatteryPower(int& bat);
  163. private:
  164. int m_mode;
  165. public:
  166. //DRV实现对象
  167. void *dplHandle;
  168. pCreate_DRV_CardDispenser Create_DRV_CardDispenser;
  169. pDestroy_DRV_CardDispenser Destroy_DRV_CardDispenser;
  170. DRV_CardDispenser *DRVCardDispenser;
  171. DevErrorInfo m_errorInfo;
  172. bool m_isDevOpened;
  173. bool m_isCanceled;
  174. int m_SetCardInTypeFlag;
  175. bool LoadNTDRVDLL();
  176. void WAITING_LOOP();
  177. bool m_busy_flag;
  178. bool m_signal_get_flag;
  179. bool m_CardInTypeFlag;
  180. ErrorCodeEnum m_StatusErrorCode;
  181. CardIssuerStatus tempStatus;
  182. int RetainBox;
  183. CILIXTrace *m_trace;
  184. };
  185. #endif //LIBFRAMEWORK_CARDISSUER_IMPL_H