|
|
@@ -0,0 +1,206 @@
|
|
|
+//
|
|
|
+// Created by LocalUser on 2019/1/7.
|
|
|
+//
|
|
|
+
|
|
|
+#include "VirtualPinPadClass.h"
|
|
|
+#include "libPinPadLoader.h"
|
|
|
+
|
|
|
+static VirtualPinPadClassImpl* object = NULL;
|
|
|
+
|
|
|
+VirtualPinPadClassImpl::VirtualPinPadClassImpl()
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+VirtualPinPadClassImpl::~VirtualPinPadClassImpl()
|
|
|
+{
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::GetDevCategory(DevCategoryInfo& devCategory)
|
|
|
+{
|
|
|
+ ErrorCodeEnum result;
|
|
|
+ DevCategoryInfo inner;
|
|
|
+ result = Bridge_GetDevCategory(&inner);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ strcpy_s(devCategory.szType, inner.szType);
|
|
|
+ strcpy_s(devCategory.szModel, inner.szModel);
|
|
|
+ strcpy_s(devCategory.szVendor, inner.szVendor);
|
|
|
+ devCategory.eState = inner.eState;
|
|
|
+ devCategory.version.wMajor = inner.version.wMajor;
|
|
|
+ devCategory.version.wMinor = inner.version.wMinor;
|
|
|
+ devCategory.version.wRevision = inner.version.wRevision;
|
|
|
+ devCategory.version.wBuild = inner.version.wBuild;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::Reset()
|
|
|
+{
|
|
|
+ return Bridge_Reset();
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::DevOpen(DWORD dwPort, DWORD dwBaudRate)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_DevOpen(dwPort, dwBaudRate));
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::DevClose()
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_DevClose());
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::KeyRead(BYTE& ch)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ BYTE inner;
|
|
|
+ err = Bridge_KeyRead(&inner);
|
|
|
+ if (err == Error_Succeed) {
|
|
|
+ ch = inner;
|
|
|
+ }
|
|
|
+ return (err);
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::StartPinInput(BYTE byLen)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_StartPinInput(byLen));
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::StartPinInputConfirm(BYTE byLen)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_StartPinInputConfirm(byLen));
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::StartPlainInput()
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_StartPlainInput());
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::StopInput()
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_StopInput());
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::LoadMasterKey(MasterKeyParam masterKey)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_LoadMasterKey(masterKey));
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::LoadWorkingKey(WorkKeyParam wkKey)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_LoadWorkingKey(wkKey));
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::ActiveWorkingKey(DWORD dwMkSN, DWORD dwWkSN)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_ActiveWorkingKey(dwMkSN, dwWkSN));
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::SetParam(SetParamTypeEnum eType, SetParamValueEnum eValue)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ return (err = Bridge_SetParam(eType, eValue));
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::EncryptData(EnDecryptInfo srcInfo, EnDecryptInfo& destInfo)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ EnDecryptInfo inner;
|
|
|
+ err = Bridge_EncryptData(srcInfo, &inner);
|
|
|
+ if (err == Error_Succeed) {
|
|
|
+ destInfo.dwSize = inner.dwSize;
|
|
|
+ memcpy(destInfo.data, inner.data, MAX_EN_DECRYPT_DATA_SIZE);
|
|
|
+ }
|
|
|
+ return (err);
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::MacEncrypt(EnDecryptInfo srcInfo, EnDecryptInfo& destInfo)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ EnDecryptInfo inner;
|
|
|
+ err = Bridge_MacEncrypt(srcInfo, &inner);
|
|
|
+ if (err == Error_Succeed) {
|
|
|
+ destInfo.dwSize = inner.dwSize;
|
|
|
+ memcpy(destInfo.data, inner.data, MAX_EN_DECRYPT_DATA_SIZE);
|
|
|
+ }
|
|
|
+ return (err);
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::GetPinBlock(PinBlock& block)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ PinBlock inner;
|
|
|
+ err = Bridge_GetPinBlock(&inner);
|
|
|
+ if (err == Error_Succeed) {
|
|
|
+ block.dwSize = inner.dwSize;
|
|
|
+ memcpy(block.data, inner.data, MAX_PIN_BLOCK_SIZE);
|
|
|
+ }
|
|
|
+ return (err);
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::SetAccNo(AccountInfo accInfo)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ err = Bridge_SetAccNo(accInfo);
|
|
|
+ return (err);
|
|
|
+}
|
|
|
+
|
|
|
+int VirtualPinPadClassImpl::GetEncryptFunc()
|
|
|
+{
|
|
|
+ return Bridge_GetEncryptFunc();
|
|
|
+}
|
|
|
+
|
|
|
+ErrorCodeEnum VirtualPinPadClassImpl::GetLastErr(DevErrorInfo& devErrInfo)
|
|
|
+{
|
|
|
+ ErrorCodeEnum err = Error_Succeed;
|
|
|
+ DevErrorInfo inner;
|
|
|
+ err = Bridge_GetLastErr(&inner);
|
|
|
+ if (err == Error_Succeed) {
|
|
|
+ devErrInfo.dwErrMsgLen = inner.dwErrMsgLen;
|
|
|
+ strcpy_s(devErrInfo.szErrMsg, inner.szErrMsg);
|
|
|
+ }
|
|
|
+ return (err);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+DEVICEBASE_API ErrorCodeEnum CreateDevComponent(DeviceBaseClass*& pOutDevAptObj)
|
|
|
+{
|
|
|
+ ErrorCodeEnum result(Error_Unexpect);
|
|
|
+ if (object == NULL) {
|
|
|
+ char* buf;
|
|
|
+ DWORD size;
|
|
|
+ const char* var = "INVOKE_VENDOR_ADAPTER_NAME";
|
|
|
+ size = GetEnvironmentVariableA(var, NULL, 0);
|
|
|
+ //ERROR_ENVVAR_NOT_FOUND
|
|
|
+ if (size <= 0) {
|
|
|
+ return Error_InvalidState;
|
|
|
+ }
|
|
|
+ buf = new char[size + 3];
|
|
|
+ if (buf == NULL) {
|
|
|
+ return Error_Resource;
|
|
|
+ }
|
|
|
+ memset(buf, 0, sizeof(char) * (size + 3));
|
|
|
+ size = GetEnvironmentVariableA(var, buf, size);
|
|
|
+ result = Bridge_LoadDevObject(buf);
|
|
|
+ if (result == Error_Succeed) {
|
|
|
+ object = new VirtualPinPadClassImpl();
|
|
|
+ }
|
|
|
+ delete[] buf;
|
|
|
+ }
|
|
|
+ pOutDevAptObj = object;
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
+DEVICEBASE_API ErrorCodeEnum ReleaseDevComponent(DeviceBaseClass*& pInDevAptObj)
|
|
|
+{
|
|
|
+ return Error_Param;
|
|
|
+}
|