cardissuerimpl.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. #ifndef LIBFRAMEWORK_CARDISSUER_IMPL_H
  2. #define LIBFRAMEWORK_CARDISSUER_IMPL_H
  3. #include "CardIssuerClass.h"
  4. #include "idcsankyoimpl.h"
  5. #include "log4vendor.h"
  6. #define FILE_VERSION 1
  7. #define DEVICE_NOT_OPEN -1
  8. #define RETAIN_BIN_ERROR -2
  9. #define DEVICE_NO_MEDIA -3
  10. #define DEVICE_NOT_SUPP -4
  11. #define DEVICE_NO_DATA -5
  12. class CardIssuerClassImpl : public CardIssuerClass
  13. {
  14. public:
  15. CardIssuerClassImpl();
  16. ~CardIssuerClassImpl();
  17. //DeviceBaseClass
  18. ErrorCodeEnum GetDevCategory(DevCategoryInfo &devCategory);
  19. ErrorCodeEnum Reset();
  20. ErrorCodeEnum DevClose();
  21. ErrorCodeEnum GetLastErr(DevErrorInfo &devErrInfo);
  22. public:
  23. virtual ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate);
  24. virtual ErrorCodeEnum GetDevStatus(CardIssuerStatus& devStatus);
  25. virtual ErrorCodeEnum GetDeviceSN(char*& pDevSN);
  26. virtual ErrorCodeEnum MoveCard(CardPosEnum eCardPos, int hopperNo = 1);
  27. //
  28. // Set card entry
  29. //
  30. virtual ErrorCodeEnum SetCardInType(CardInEnum eCardIn);
  31. //
  32. // Read data from magnetic track.
  33. //
  34. virtual ErrorCodeEnum MagRead(MagTracks& magTracks);
  35. //
  36. // Write data to magnetic track.
  37. //
  38. virtual ErrorCodeEnum MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode);
  39. //
  40. // Set retract counter
  41. //
  42. virtual ErrorCodeEnum SetRetractCounter(DWORD dwCount)
  43. {
  44. return Error_NotImpl;
  45. }
  46. //
  47. // Set issuer counter
  48. // hopperNo:多卡箱发卡时指定发卡箱号(面对发卡机,从左往右依次是1,2,3,...号卡箱)
  49. //
  50. virtual ErrorCodeEnum SetIssuerCounter(DWORD dwCount, int hopperNo = 1)
  51. {
  52. return Error_NotImpl;
  53. }
  54. //
  55. // Active contact IC card
  56. //
  57. virtual ErrorCodeEnum ActiveICCard();
  58. //
  59. // Move IC card to contact position
  60. //
  61. virtual ErrorCodeEnum ContactIC();
  62. //
  63. // Release IC contact
  64. //
  65. virtual ErrorCodeEnum ReleaseIC();
  66. //
  67. // Warm reset card(IC)
  68. //
  69. virtual ErrorCodeEnum WarmReset();
  70. //
  71. // APDU:Application Protocol Data Unit
  72. // CmdSend.lpCmd:Command-APDU
  73. // CmdRecv.lpData:Response-APDU
  74. //
  75. virtual ErrorCodeEnum ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf);
  76. //////////////////SAM 卡操作部分////////////////////
  77. virtual ErrorCodeEnum SAMActive(BYTE vcc = 0x30) { return Error_NotImpl; };
  78. virtual ErrorCodeEnum SAMDeactivate() { return Error_NotImpl; };
  79. virtual ErrorCodeEnum SAMWarmReset() { return Error_NotImpl; };
  80. virtual ErrorCodeEnum SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf) { return Error_NotImpl; };
  81. virtual ErrorCodeEnum SAMQueryStatus(SAMStatus& samStatus) { return Error_NotImpl; };
  82. virtual ErrorCodeEnum SAMSelect(const int sn) { return Error_NotImpl; };
  83. virtual ErrorCodeEnum ActiveICCardATR(CmdInfo& atrBuf) { return Error_NotImpl; }
  84. ////////////////卡面打印部分,部分机型有此功能//////////////////
  85. virtual ErrorCodeEnum Print(BYTE*& data, const int dataSize, const int side) { return Error_NotImpl; };
  86. virtual ErrorCodeEnum QueryPrinterStatus() { return Error_NotImpl; };
  87. ////////////////////////////////////////////////////////////////////////////
  88. ////////非接(IC)部分 start,没有此部分,在接口实现中直接返回Error_NotImpl///////////////
  89. ////////////////////////////////////////////////////////////////////////////
  90. // Active contactless IC card(Type A,B,Mifare)
  91. // The first,second,third activation order decided by fstType,scdType,thdType respectively
  92. // fstType,scdType,thdType can be one of 'A','B','M','0'(30H,no type)
  93. // outType indicates the type of activation result
  94. //
  95. virtual ErrorCodeEnum ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType)
  96. {
  97. return Error_NotImpl;
  98. }
  99. //
  100. // Deactivate contact IC card
  101. //
  102. virtual ErrorCodeEnum DeactivateICCard()
  103. {
  104. return Error_NotImpl;
  105. }
  106. //
  107. // Deactivate contactless IC card
  108. //
  109. virtual ErrorCodeEnum DeactContactlessICCard()
  110. {
  111. return Error_NotImpl;
  112. }
  113. //
  114. // RF Mifare Classic protocol operation
  115. // Arguments:
  116. // - eFunType:function type as load key,authentication and so on
  117. // - sendBuf:[parameter][data]
  118. // - recvBuf:[status(1byte)][return data]
  119. //
  120. virtual ErrorCodeEnum MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo& recvBuf)
  121. {
  122. return Error_NotImpl;
  123. }
  124. //
  125. // RF Type A,B command.
  126. // APDU:Application Protocol Data Unit
  127. // Arguments:
  128. // - CmdSend.lpCmd:Command-APDU
  129. // - CmdRecv.lpData:Response-APDU
  130. //
  131. virtual ErrorCodeEnum RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf)
  132. {
  133. return Error_NotImpl;
  134. }
  135. ////////非接(IC)部分 end/////////////////////////////////////////////////////////
  136. virtual ErrorCodeEnum DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE& btType);
  137. /////////////////////////////////////////////////////////////////////////
  138. ///以下是便携式卡机特有API,接口实现中其他机型直接返回Error_NotImpl即可//
  139. /////////////////////////////////////////////////////////////////////////
  140. // 返回值Error_Succeed表示成功,其他值表示失败
  141. // iStatus 0:成功 -1:银行公钥不存在 -2:产生设备密钥故障 -x:其他厂商自定义故障
  142. // Cr1:随机数r1的密文; Cr3:随机数r3的密文,dKey:用银行公钥加密的设备公钥密文
  143. // r1,r3第16字节为数据完整性校验字节,例如r1为B1B2...B15B16,则B16=B1^B2^...^B15
  144. virtual ErrorCodeEnum TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR1, BYTE*& Cr3, int& lenR3, BYTE*& dKey, int& lenKey)
  145. {
  146. return Error_NotImpl;
  147. }
  148. // 返回值Error_Succeed表示成功,其他值表示失败
  149. // iStatus 0:成功 -x:厂商自定义故障
  150. // r2第16字节为数据完整性校验字节,例如r2为B1B2...B15B16,则B16=B1^B2^...^B15
  151. virtual ErrorCodeEnum SetR2(int& iStatus, BYTE* pCr2, int lenR2)
  152. {
  153. return Error_NotImpl;
  154. }
  155. //
  156. // 设置会话密钥
  157. // pWorkingKey:会话密钥,传递16进制的字符形式,例如0x123456FFAB --> "123456FFAB"
  158. virtual ErrorCodeEnum SendWorkingKey(const char* pWorkingKey)
  159. {
  160. return Error_NotImpl;
  161. }
  162. //安全锁接口部分 begin
  163. virtual ErrorCodeEnum SLLoadKey(const SCIKeyInfo key)
  164. {
  165. return Error_NotImpl;
  166. }
  167. //case ParamBeep: value:0,close beep;value:1,open beep
  168. //case ParamLed: value:0,close led;value:1,open led
  169. //case ParamLevelTime: value:the duration of level,100ms per unit
  170. // ex. the value 10 means duration time is 1 second
  171. virtual ErrorCodeEnum SLSetParam(SCIParamType eType, int value)
  172. {
  173. return Error_NotImpl;
  174. }
  175. virtual ErrorCodeEnum SLLock()
  176. {
  177. return Error_NotImpl;
  178. }
  179. virtual ErrorCodeEnum SLUnLock(const SCICheckCode checkCode, bool bTemp = true)
  180. {
  181. return Error_NotImpl;
  182. }
  183. virtual ErrorCodeEnum SLGetTempData(SCITempData& ksnData, SCITempData& ramData)
  184. {
  185. return Error_NotImpl;
  186. }
  187. virtual ErrorCodeEnum SLOpenDoor(const SCITempData data)
  188. {
  189. return Error_NotImpl;
  190. }
  191. //安全锁接口部分 end
  192. //蓝牙控制部分 start
  193. //蓝牙指令控制,命令参看SCIBluetoothCMD说明
  194. virtual ErrorCodeEnum BluetoothControl(SCIBluetoothCMD eCmd)
  195. {
  196. return Error_NotImpl;
  197. }
  198. //修改配对密码
  199. virtual ErrorCodeEnum BluetoothModifyKey(unsigned char* key)
  200. {
  201. return Error_NotImpl;
  202. }
  203. //修改蓝牙设备名称
  204. virtual ErrorCodeEnum BluetoothModifyName(unsigned char* name)
  205. {
  206. return Error_NotImpl;
  207. }
  208. //获取版本信息
  209. virtual ErrorCodeEnum BluetoothGetVersion(char*& version)
  210. {
  211. return Error_NotImpl;
  212. }
  213. //获取连接设备名称
  214. virtual ErrorCodeEnum BluetoothGetConnectName(unsigned char*& name)
  215. {
  216. return Error_NotImpl;
  217. }
  218. //获取连接设备信号强度
  219. virtual ErrorCodeEnum BluetoothGetSignalStrength(unsigned char*& signal)
  220. {
  221. return Error_NotImpl;
  222. }
  223. //蓝牙控制部分 end
  224. //控制灯光
  225. //eLight:所控制的灯 ;
  226. //bOnOff:true 亮灯;fasle 灭灯
  227. virtual ErrorCodeEnum LightControl(SCILightType eLight, bool bOnOff)
  228. {
  229. return Error_NotImpl;
  230. }
  231. //以百分比数值返回剩余电量(1-100),例如剩余51%,则bat赋值为51
  232. virtual ErrorCodeEnum QueryBatteryPower(int& bat)
  233. {
  234. return Error_NotImpl;
  235. }
  236. //把卡片从读卡器移动到指定卡槽位
  237. virtual ErrorCodeEnum MoveCardToSlot(int slot) { return Error_NotImpl; }
  238. //把卡片从指定卡槽位移动到读卡器
  239. virtual ErrorCodeEnum MoveCardFromSlot(int slot) { return Error_NotImpl; }
  240. //读取卡号
  241. //优先从IC卡解析卡号,如果纯磁条卡,则返回磁道解析的卡号
  242. virtual ErrorCodeEnum ReadAccount(CardNo& cardNo) { return Error_NotImpl; }
  243. //获取总卡槽数
  244. virtual ErrorCodeEnum GetSlotSum(int& sum) { return Error_NotImpl; }
  245. //获取卡槽状态
  246. virtual ErrorCodeEnum QuerySlotsStatus(SlotStatus& slots, const int slot, bool bFull = false) { return Error_NotImpl; }
  247. private:
  248. ErrorCodeEnum HandleDevError(int nRt, LPCTSTR lpszFormat, ...);
  249. char* FormatRetainBinStatus(RtBinStatusEnum status);
  250. char* FormatCuBoxStatus(IssHopperStatusEnum status);
  251. char* FormatCardStatus(CardStatusEnum status);
  252. char* FormatCardPosStatus(CardPosEnum status);
  253. char* FormatCardIn(CardInEnum status);
  254. char* FormatTrackRange(TrackRange status);
  255. private:
  256. bool m_bIsOpen;
  257. int m_mode;
  258. IDCSankyoImpl* m_pDriver;
  259. DevErrorInfo m_DevErrInfo;
  260. //行里流程为进卡后上电判断IC,之后读磁,会再次读取,此处为缓存磁条数据
  261. int m_bCardRead;
  262. int m_iReadReturn;
  263. void ReadMagData();
  264. char m_saMagData[3][512];
  265. char m_pformatStatus[64];
  266. bool m_T;
  267. };
  268. #endif //LIBFRAMEWORK_CARDISSUER_IMPL_H