pinpadxzf31.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #ifndef PINPADXZF31_H
  2. #define PINPADXZF31_H
  3. #include "serial.h"
  4. #include "public.h"
  5. #include "smutex.h"
  6. #include "sunsonStatusInfo.h"
  7. #include "DevErrorCode.h"
  8. #include "ErrorCode.h"
  9. #define MAX_CMD_LEN 2080
  10. #define MAX_RSP_LEN 1024
  11. class PinPadXZF31
  12. {
  13. public:
  14. PinPadXZF31();
  15. ~PinPadXZF31();
  16. bool Open(const char* sPort, int iBaud);
  17. //close com
  18. void closeDevice();
  19. //reset Epp
  20. int resetEpp();
  21. //get sankey
  22. int scankeyPress(unsigned char& ucKeyValue);
  23. //允许/禁止系统键盘模式
  24. int SysKeyEnable(bool b);
  25. // 取产品版本号
  26. int getEppVersion(unsigned char *version);
  27. // 取产品序列号
  28. int getSerialNo(unsigned char *version);
  29. // 描述:按照约定的方式下载主密钥和工作密钥。可以是明文也可是密文。
  30. int LoadUserKey(int ucKeyId, int ucDecryptKeyId,
  31. unsigned char KeyAttribute, unsigned char ucKeyLen,
  32. unsigned char* KeyValue, unsigned char* ReturnInfo);
  33. // 描述:按键按下时是否产生蜂鸣。
  34. int SetBuzzerEnabled(unsigned char ucBuzzerStatus, unsigned char* ReturnInfo);
  35. // 描述:设定 CBC 数据时的 8 字节初始向量。
  36. int SetStartValue(unsigned char* StartValue, unsigned char* ReturnInfo);
  37. int DataCompute(int KeyId, unsigned char JM_mode,
  38. unsigned char SF_mode, unsigned char padchar,
  39. int datalen, unsigned char* data,
  40. unsigned char* ReturnInfo, int& iOutLen);
  41. int GetPin(unsigned char ucPinMinLen, unsigned char ucPinMaxLen,
  42. unsigned char AutoReturnFlag, unsigned char* ReturnInfo);
  43. int GetPinBlock(int UserKeyId, int JM_mode, unsigned char padchar, unsigned char ucCardLen,
  44. unsigned char* ucCardNumber, unsigned char* ReturnInfo, int& iOutLen);
  45. int MakeMac(int UserKeyId, int Mac_mode, int nMacDataLen,
  46. unsigned char* ucMacData, unsigned char* ReturnInfo, int& iOutLen);
  47. int UseEppPlainTextMode(unsigned char PlaintextLength, unsigned char AutoEnd, unsigned char* ReturnInfo);
  48. // 描述:任何时候只要发送该命令就关闭键盘,禁止输入。
  49. int CloseEppPlainTextMode(unsigned char* ReturnInfo);
  50. // 描述:获取当前键盘算法。
  51. int GetEPPSMMode(unsigned char* ReturnInfo);
  52. int SetEPPSMMode(unsigned char ucSMMode);
  53. int CheckEPPSMMode(bool bSM);
  54. int SM4MakeMac(int UserKeyId, int Mac_mode, int nMacDataLen,
  55. unsigned char* ucMacData, unsigned char* ReturnInfo);
  56. int SM4DataCompute(int KeyId, unsigned char JM_mode,
  57. int SF_mode, unsigned char padchar,
  58. int datalen, unsigned char* data,
  59. unsigned char* ReturnInfo);
  60. int SM4GetPinBlock(int UserKeyId, int JM_mode,
  61. unsigned char padchar, unsigned char ucCardLen,
  62. unsigned char* ucCardNumber, unsigned char* ReturnInfo);
  63. int EnableLoadSameKey(unsigned char Mode, unsigned char* ReturnInfo);
  64. int GetKCV(int keyId, unsigned char ucCheckMode, unsigned char* ReturnInfo);
  65. int GetKeyAttInfo(int UserKeyId, unsigned char* ReturnInfo);
  66. protected:
  67. SSerial m_cSerial;
  68. SMutex* m_pMutex;
  69. SUNSON_F31_CMD m_SendCmd;
  70. SUNSON_RSP m_CmdRecv;
  71. int executeCmd(SUNSON_F31_CMD *cmd, SUNSON_RSP* rsp = NULL, unsigned long timeout = 1000);
  72. unsigned char bccCalculator(const unsigned char* data, int len);
  73. bool sendRecv(const SUNSON_F31_CMD* cmd, unsigned long timeout);
  74. void packMessage(unsigned char* cmdSend, unsigned int& cmdSendLen);
  75. };
  76. #endif // PINPADXZF31_H