cardissuer_impl.h 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. #ifndef LIBFRAMEWORK_CARDISSUER_IMPL_H
  2. #define LIBFRAMEWORK_CARDISSUER_IMPL_H
  3. #include "CardIssuerClass.h"
  4. #include <string>
  5. #include "DeviceSimulator.h"
  6. #define EntityName "CardIssuer"
  7. using namespace std;
  8. class CardIssuerImpl : public CardIssuerClass
  9. {
  10. public:
  11. CardIssuerImpl();
  12. ~CardIssuerImpl();
  13. static void HttpsLogCallBack(const char* logtxt) {}
  14. //DeviceBaseClass
  15. ErrorCodeEnum GetDevCategory(DevCategoryInfo& devCategory);
  16. ErrorCodeEnum Reset();
  17. ErrorCodeEnum DevClose();
  18. ErrorCodeEnum GetLastErr(DevErrorInfo& devErrInfo);
  19. //本接口几乎废弃不用。连接卡机,请使用DevOpenEx替代本接口
  20. ErrorCodeEnum DevOpen(DWORD dwPort, DWORD dwBaudRate) { return Error_NotImpl; }//废弃
  21. // Get card issuer status
  22. //使用(卡库,卡机)
  23. ErrorCodeEnum GetDevStatus(CardIssuerStatus& devStatus);
  24. //
  25. // Get device serial number.
  26. // 设备唯一标识,且需贴在设备外壳上
  27. // 使用(pad)
  28. ErrorCodeEnum GetDeviceSN(char*& pDevSN);
  29. //
  30. // Move card to specified position.
  31. // hopperNo:多卡箱发卡时指定发卡箱号(面对发卡机,从左往右依次是1,2,3,...号卡箱)
  32. // 卡库:卡片从卡库加卡箱移动到读卡器,eCardPos为CI_MOVECARD_FROM_HOPPER,hopperNo固定传入99
  33. // 卡库:卡片从卡库加卡箱移动到读卡器,若加卡箱已经无卡,返回Error_Dev_HopperHasNoCard
  34. //使用(卡库,卡机)*****
  35. ErrorCodeEnum MoveCard(CardPosEnum eCardPos, int hopperNo = 1);
  36. //
  37. // Set card entry
  38. //使用(卡库,卡机)*****
  39. ErrorCodeEnum SetCardInType(CardInEnum eCardIn);
  40. //
  41. // Read data from magnetic track.
  42. //使用(卡库,卡机)
  43. ErrorCodeEnum MagRead(MagTracks& magTracks);
  44. // Write data to magnetic track.
  45. //使用(卡库)*****
  46. ErrorCodeEnum MagWrite(MagTracks magTracks, MagWriteModeEnum eWriteMode);
  47. //
  48. // Set retract counter
  49. ErrorCodeEnum SetRetractCounter(DWORD dwCount) { return Error_NotImpl; } //废弃
  50. //
  51. // Set issuer counter
  52. // hopperNo:多卡箱发卡时指定发卡箱号(面对发卡机,从左往右依次是1,2,3,...号卡箱)
  53. ErrorCodeEnum SetIssuerCounter(DWORD dwCount, int hopperNo = 1) { return Error_NotImpl; }//废弃
  54. //
  55. // Active contact IC card
  56. //使用(卡库,卡机)*****
  57. ErrorCodeEnum ActiveICCard();
  58. //
  59. // Move IC card to contact position
  60. //使用(卡库,卡机)*****
  61. ErrorCodeEnum ContactIC();
  62. //
  63. // Release IC contact
  64. //使用(卡库,卡机)*****
  65. ErrorCodeEnum ReleaseIC();
  66. //
  67. // Warm reset card(IC)
  68. //使用(卡库,卡机)*****
  69. ErrorCodeEnum WarmReset();
  70. // APDU:Application Protocol Data Unit
  71. // CmdSend.lpCmd:Command-APDU
  72. // CmdRecv.lpData:Response-APDU
  73. //使用(卡库,卡机)
  74. ErrorCodeEnum ICCommand(CmdInfo sendBuf, CmdInfo& recvBuf);
  75. //////////////////SAM 卡操作部分////////////////////
  76. ErrorCodeEnum SAMActive(BYTE vcc = 0x30);//使用(卡库,卡机)
  77. ErrorCodeEnum SAMDeactivate();//使用(卡库,卡机)
  78. ErrorCodeEnum SAMWarmReset();//使用(卡库,卡机)
  79. ErrorCodeEnum SAMQueryStatus(SAMStatus& samStatus);//使用(卡库,卡机)
  80. ErrorCodeEnum SAMSelect(const int sn);//使用(卡库,卡机)
  81. //即时制卡卡库需要实现SAMCommand,用来执行apdu指令
  82. ErrorCodeEnum SAMCommand(CmdInfo sendBuf, CmdInfo& recvBuf);//使用(卡库,卡机)
  83. //即时制卡卡库需要实现ActiveICCardATR,用来激活卡片,返回ATR
  84. ErrorCodeEnum ActiveICCardATR(CmdInfo& atrBuf);//使用(卡库,卡机)
  85. ////////////////卡面打印部分(非即时制卡的卡面印刷,即时制卡的卡面打印接口为PrintCardFaceRightNow),部分机型(例如合肥分行大机)有此功能//////////////////
  86. ErrorCodeEnum Print(BYTE*& data, const int dataSize, const int side) { return Error_NotImpl; }//废弃
  87. ErrorCodeEnum QueryPrinterStatus() { return Error_NotImpl; }//废弃
  88. ////////////////////////////////////////////////////////////////////////////
  89. ////////非接(IC)部分 start,没有此部分,在接口实现中直接返回Error_NotImpl///////////////
  90. ////////////////////////////////////////////////////////////////////////////
  91. // Active contactless IC card(Type A,B,Mifare)
  92. // The first,second,third activation order decided by fstType,scdType,thdType respectively
  93. // fstType,scdType,thdType can be one of 'A','B','M','0'(30H,no type)
  94. // outType indicates the type of activation result
  95. //
  96. ErrorCodeEnum ActiveContactlessICCard(char fstType, char scdType, char thdType, char& outType);//使用(卡库,卡机)
  97. //
  98. // Deactivate contact IC card *****
  99. //
  100. ErrorCodeEnum DeactivateICCard(); //使用(卡库,卡机)
  101. //
  102. // Deactivate contactless IC card *****
  103. //
  104. ErrorCodeEnum DeactContactlessICCard();//使用(卡库,卡机)
  105. //
  106. // RF Mifare Classic protocol operation
  107. // Arguments:
  108. // - eFunType:function type as load key,authentication and so on
  109. // - sendBuf:[parameter][data]
  110. // - recvBuf:[status(1byte)][return data]
  111. //
  112. ErrorCodeEnum MifareCommand(MifareFuctionEnum eFunType, CmdInfo sendBuf, CmdInfo& recvBuf) { return Error_NotImpl; }//废弃
  113. //
  114. // RF Type A,B command.
  115. // APDU:Application Protocol Data Unit
  116. // Arguments:
  117. // - CmdSend.lpCmd:Command-APDU
  118. // - CmdRecv.lpData:Response-APDU
  119. //
  120. ErrorCodeEnum RFTypeABCommand(CmdInfo sendBuf, CmdInfo& recvBuf);//使用(卡库,卡机)
  121. ////////非接(IC)部分 end/////////////////////////////////////////////////////////
  122. // 发卡机调用打开设备
  123. // 1. btOpenType:设定通过哪种方式连接设备,由DevOpenType的枚举值组合。usb及蓝牙设备连接可忽略dwPort,dwBaudRate
  124. // 2.通过pDevSN来指定连接对应设备号的蓝牙发卡机(考虑存在多台发卡机的情况)
  125. // 例如通过蓝牙或者usb连接设备,则btOpenType = (DEV_OPEN_TYPE_USB|DEV_OPEN_TYPE_BLUETOOTH)
  126. // 3. btType返回设备实际通过哪种方式相连,返回值参考DevOpenType(大机,卡库参考下一条)
  127. // 4.对于大机(柜式可视柜台,卡库)dwPort,dwBaudRate传入端口,波特率,btOpenType为DEV_OPEN_TYPE_COM,pDevSN为""
  128. // ,btType返回值表示卡槽数量(例如目前存在单卡槽1,双卡槽2,三卡槽3的机型)
  129. // *****
  130. ErrorCodeEnum DevOpenEx(DWORD dwPort, DWORD dwBaudRate, BYTE btOpenType, const char* pDevSN, BYTE& btType);//使用(卡库,卡机)
  131. /////////////////////////////////////////////////////////////////////////
  132. ///以下是便携式卡机特有API,接口实现中其他机型直接返回Error_NotImpl即可//
  133. /////////////////////////////////////////////////////////////////////////
  134. // 返回值Error_Succeed表示成功,其他值表示失败
  135. // iStatus 0:成功 -1:银行公钥不存在 -2:产生设备密钥故障 -x:其他厂商自定义故障
  136. // Cr1:随机数r1的密文; Cr3:随机数r3的密文,dKey:用银行公钥加密的设备公钥密文
  137. // r1,r3第16字节为数据完整性校验字节,例如r1为B1B2...B15B16,则B16=B1^B2^...^B15
  138. ErrorCodeEnum TransferEnInit(int& iStatus, BYTE*& Cr1, int& lenR1, BYTE*& Cr3, int& lenR3, BYTE*& dKey, int& lenKey);//使用(刷卡器)
  139. // 返回值Error_Succeed表示成功,其他值表示失败
  140. // iStatus 0:成功 -x:厂商自定义故障
  141. // r2第16字节为数据完整性校验字节,例如r2为B1B2...B15B16,则B16=B1^B2^...^B15
  142. ErrorCodeEnum SetR2(int& iStatus, BYTE* pCr2, int lenR2);//使用(刷卡器)
  143. //
  144. // 设置会话密钥
  145. // pWorkingKey:会话密钥,传递16进制的字符形式,例如0x123456FFAB --> "123456FFAB"
  146. ErrorCodeEnum SendWorkingKey(const char* pWorkingKey);//使用(刷卡器)
  147. //安全锁接口部分 begin
  148. ErrorCodeEnum SLLoadKey(const SCIKeyInfo key) { return Error_NotImpl; }// 使用(刷卡器) 废弃
  149. //case ParamBeep: value:0,close beep;value:1,open beep
  150. //case ParamLed: value:0,close led;value:1,open led
  151. //case ParamLevelTime: value:the duration of level,100ms per unit
  152. // ex. the value 10 means duration time is 1 second
  153. ErrorCodeEnum SLSetParam(SCIParamType eType, int value) { return Error_NotImpl; }//废弃
  154. ErrorCodeEnum SLLock() { return Error_NotImpl; }//废弃
  155. ErrorCodeEnum SLUnLock(const SCICheckCode checkCode, bool bTemp = true) { return Error_NotImpl; }//废弃
  156. ErrorCodeEnum SLGetTempData(SCITempData& ksnData, SCITempData& ramData) { return Error_NotImpl; }//废弃
  157. ErrorCodeEnum SLOpenDoor(const SCITempData data) { return Error_NotImpl; }//废弃
  158. //安全锁接口部分 end
  159. //蓝牙控制部分 start
  160. //蓝牙指令控制,命令参看SCIBluetoothCMD说明
  161. ErrorCodeEnum BluetoothControl(SCIBluetoothCMD eCmd) { return Error_NotImpl; }//废弃
  162. //修改配对密码
  163. ErrorCodeEnum BluetoothModifyKey(unsigned char* key) { return Error_NotImpl; }//废弃
  164. //修改蓝牙设备名称
  165. ErrorCodeEnum BluetoothModifyName(unsigned char* name) { return Error_NotImpl; }//废弃
  166. //获取版本信息
  167. ErrorCodeEnum BluetoothGetVersion(char*& version) { return Error_NotImpl; }//废弃
  168. //获取连接设备名称
  169. ErrorCodeEnum BluetoothGetConnectName(unsigned char*& name) { return Error_NotImpl; }//废弃
  170. //获取连接设备信号强度
  171. ErrorCodeEnum BluetoothGetSignalStrength(unsigned char*& signal) { return Error_NotImpl; }//废弃
  172. //蓝牙控制部分 end
  173. //控制灯光
  174. //eLight:所控制的灯 ;
  175. //bOnOff:true 亮灯;fasle 灭灯
  176. ErrorCodeEnum LightControl(SCILightType eLight, bool bOnOff) { return Error_NotImpl; }//废弃
  177. //以百分比数值返回剩余电量(1-100),例如剩余51%,则bat赋值为51
  178. ErrorCodeEnum QueryBatteryPower(int& bat) { return Error_NotImpl; }//废弃
  179. //oiltest
  180. //virtual ErrorCodeEnum EncryptData(TempData ramData, TempData bdk, TempData curksn, TempData &encryptedData) ;
  181. //把卡片从读卡器移动到指定卡槽位
  182. ErrorCodeEnum MoveCardToSlot(int slot);//使用(卡库,卡机)
  183. //把卡片从指定卡槽位移动到读卡器
  184. ErrorCodeEnum MoveCardFromSlot(int slot);//使用(卡库,卡机)
  185. //读取卡号
  186. //优先从IC卡解析卡号,如果纯磁条卡,则返回磁道解析的卡号
  187. ErrorCodeEnum ReadAccount(CardNo& cardNo);//使用(卡库,卡机)
  188. //获取总卡槽数
  189. ErrorCodeEnum GetSlotSum(int& sum);//使用(卡库,卡机)
  190. //获取卡槽状态
  191. ErrorCodeEnum QuerySlotsStatus(SlotStatus& slots, const int slot, bool bFull = false);//使用(卡库,卡机)
  192. //即时制卡卡库专用接口
  193. ErrorCodeEnum PrintCardFaceRightNow(const KakuPrintInfo printInfo);//使用(卡库,卡机)
  194. };
  195. #endif //LIBFRAMEWORK_CARDISSUER_IMPL_H