DeviceBaseHelper.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247
  1. #ifndef __DEVICEBASE_HELPER_H
  2. #define __DEVICEBASE_HELPER_H
  3. #pragma once
  4. #include "DeviceBaseClass.h"
  5. /*
  6. assert(DeviceBaseHelper::GetCurVendorType("") == Vendor_Invalide);
  7. assert(DeviceBaseHelper::GetCurVendorType("buzhidao") == Vendor_Invalide);
  8. assert(DeviceBaseHelper::GetCurVendorType("hyosung") == Vendor_Hyosung);
  9. assert(DeviceBaseHelper::GetCurVendorType("KXD") == Vendor_Kxd);
  10. assert(DeviceBaseHelper::GetCurVendorType("KEBa") == Vendor_Keba);
  11. assert(DeviceBaseHelper::GetCurVendorType("nanTiAn") == Vendor_Nantian);
  12. assert(DeviceBaseHelper::GetCurVendorType("YOTAP") == Vendor_yotap);
  13. assert(DeviceBaseHelper::GetCurVendorType("zSs") == Vendor_ZSS);
  14. assert(DeviceBaseHelper::GetCurVendorType("GWI") == Vendor_GreateWall);
  15. assert(DeviceBaseHelper::GetCurVendorType("yihua") == Vendor_YiHua);
  16. assert(DeviceBaseHelper::GetCurVendorType("yh") == Vendor_YiHua);
  17. assert(DeviceBaseHelper::GetCurVendorType("GRG") == Vendor_GRG);
  18. assert(DeviceBaseHelper::GetCurVendorType("cw") == Vendor_CW);
  19. assert(DeviceBaseHelper::GetCurVendorType("eastCOM") == Vendor_EastCom);
  20. assert(DeviceBaseHelper::GetCurVendorType("hx") == Vendor_HuaXin);
  21. assert(DeviceBaseHelper::GetCurVendorType("sankyo") == Vendor_Sankyo);
  22. assert(DeviceBaseHelper::GetCurVendorType("chinavision") == Vendor_ChinaVision);
  23. */
  24. enum VendorNameType {
  25. Vendor_Invalide,
  26. Vendor_Sankyo,
  27. Vendor_ChinaVision,
  28. Vendor_Hyosung,
  29. Vendor_Kxd,
  30. Vendor_Keba,
  31. Vendor_Nantian,
  32. Vendor_yotap,
  33. Vendor_ZSS,
  34. Vendor_GreateWall,
  35. Vendor_YiHua,
  36. Vendor_GRG,
  37. Vendor_CW,
  38. Vendor_EastCom,
  39. Vendor_HuaXin,
  40. Vendor_MAX
  41. };
  42. static const char* VendorNameStr[] = {
  43. "Unknown",
  44. "Sankyo",
  45. "ChinaVision",
  46. "hyosung",
  47. "kxd",
  48. "keba",
  49. "nantian",
  50. "yotap",
  51. "zss",
  52. "gwi",
  53. "yh", // "yihua"
  54. "grg",
  55. "CW",
  56. "EastCom",
  57. "hx"
  58. };
  59. class DeviceBaseHelper
  60. {
  61. public:
  62. static ErrorCodeEnum GetAndSplitDevErrInfo(
  63. DeviceBaseClass* inst,
  64. CSimpleStringA& csErrMsg,
  65. WORD& wdDevErrCode,
  66. LPCTSTR lpszFuncNameForDisplay = ""
  67. )
  68. {
  69. csErrMsg = "";
  70. wdDevErrCode = 0;
  71. BOOL bDisplayFunName = TRUE;
  72. if( lpszFuncNameForDisplay == NULL || strlen(lpszFuncNameForDisplay) == 0 )
  73. bDisplayFunName = FALSE;
  74. if(inst == NULL)
  75. {
  76. Dbg("inst occurs nullptr !!!");
  77. return Error_Param;
  78. }
  79. DevErrorInfo devErrInfo;
  80. ZeroMemory(&devErrInfo, sizeof(DevErrorInfo));
  81. ErrorCodeEnum erroCode = inst->GetLastErr(devErrInfo);
  82. if(erroCode == Error_Succeed)
  83. {
  84. if(strlen(devErrInfo.szErrMsg) > 0)
  85. {
  86. csErrMsg = devErrInfo.szErrMsg;
  87. }
  88. if(devErrInfo.dwErrMsgLen > MAX_DEV_ERROR_MSG_LEN)
  89. {
  90. //oiltmp@20200520 comment the following line
  91. //wdDevErrCode = (WORD)((devErrInfo.dwErrMsgLen >> 16) & 0x0000FFFF);
  92. }
  93. if(bDisplayFunName)
  94. {
  95. Dbg("Invoke <%s> failed, Dev_GLE: DevErrCode[%d], ErrMsg[%s]",
  96. lpszFuncNameForDisplay, wdDevErrCode, (LPCTSTR)csErrMsg);
  97. }
  98. else
  99. {
  100. Dbg("Dev_GLE: DevErrCode[%d], ErrMsg[%s]", wdDevErrCode, (LPCTSTR)csErrMsg);
  101. }
  102. }
  103. else
  104. {
  105. if(bDisplayFunName)
  106. {
  107. Dbg("Invoke <%s> failed, and unfortunately Dev_GLE failed returned EC: %d(0x%X)",
  108. lpszFuncNameForDisplay, erroCode, erroCode);
  109. csErrMsg = CSimpleStringA::Format("Invoke <%s> failed", lpszFuncNameForDisplay);
  110. }
  111. else
  112. {
  113. Dbg("Dev_GLE failed returned EC: %d(0x%X)",
  114. erroCode, erroCode);
  115. }
  116. }
  117. return erroCode;
  118. }
  119. static ErrorCodeEnum LogDevErrInfo(DeviceBaseClass* inst, LPCTSTR lpszFuncName = "")
  120. {
  121. CSimpleStringA csMsg;
  122. WORD wdErrorCode = 0;
  123. return GetAndSplitDevErrInfo(inst, csMsg, wdErrorCode, lpszFuncName);
  124. }
  125. static BOOL GetDevErrorCode(DeviceBaseClass* inst, WORD& wdErrorCode)
  126. {
  127. CSimpleStringA csMsg;
  128. ErrorCodeEnum eRet = GetAndSplitDevErrInfo(inst, csMsg, wdErrorCode);
  129. return ((eRet == Error_Succeed) ? (TRUE) : (FALSE));
  130. }
  131. static VendorNameType GetCurVendorType(LPCTSTR vendorName)
  132. {
  133. if(vendorName == NULL || strlen(vendorName) == 0) {
  134. return Vendor_Invalide;
  135. }
  136. int idx = -1;
  137. for(int i=0; i<sizeof(VendorNameStr)/sizeof(VendorNameStr[0]); ++i)
  138. {
  139. if(strnicmp(vendorName, VendorNameStr[i], strlen(VendorNameStr[i])) == 0) {
  140. idx = i;
  141. break;
  142. }
  143. }
  144. if(idx == -1) {
  145. /*历史遗留原因,怡化厂商有两个适配器名字*/
  146. if(strnicmp(vendorName, "yihua", strlen("yihua")) == 0) {
  147. idx = Vendor_YiHua;
  148. } else {
  149. idx = Vendor_Invalide;
  150. }
  151. }
  152. return (VendorNameType)idx;
  153. }
  154. };
  155. struct HardwareEntityCode {
  156. DWORD dwEntityId;
  157. DWORD dwVendorId;
  158. DWORD dwVendorErroCode;
  159. DWORD dwReserved;
  160. };
  161. #define HARDWARE_ENTITY_RESET_ENTITYID(ent, entityID) \
  162. do{\
  163. memset(&ent, 0, sizeof(ent)); \
  164. ent.dwEntityId = entityID; \
  165. } while (false)
  166. #define HARDWARE_ENTITY_SET_DEVCODE(ent, ec, reserved) \
  167. do {\
  168. ent.dwVendorErroCode = ec; \
  169. ent.dwReserved = reserved; \
  170. } while (false)
  171. // 先不上厂商标识 [5/14/2020 7:34 @Gifur]
  172. #define HARDWARE_ENTITY_SET_VENDOR_NAME(ent, str) \
  173. ent.dwVendorId = 0/*(DWORD)DeviceBaseHelper::GetCurVendorType(str)*/
  174. #define HARDWARE_ENTITY_MAKE_ERRORCODE(ec) \
  175. MAKE_SLV_ERRORCODE(ec.dwEntityId, (ec.dwVendorId), ec.dwVendorErroCode)
  176. #define HARDWARE_ENTITY_MAKE_ERRORCODE_TO_BUSINESS(ec) \
  177. MAKE_SLV_ERRORCODE_TO_BUSINESS(ec.dwEntityId, ec.dwVendorErroCode, ec.dwReserved)
  178. /*class object must have 'LogErrMsg' function.*/
  179. #define LOG_ERROR_MSG_MACRO(errCode, MethodSig, DeviceType)\
  180. do {\
  181. if(errCode != Error_Succeed) {\
  182. LogErrMsg(CSimpleStringA::Format("%s::%s at line:%d", __FUNCTION__, #MethodSig, __LINE__), \
  183. errCode, MEC_DEVAPI_##DeviceType##_(MethodSig), TRUE);\
  184. }\
  185. } while (false)
  186. #define LOG_CARDISSUER_ERROR_MSG_MACRO(errCode, MethodSig)\
  187. LOG_ERROR_MSG_MACRO(errCode, MethodSig, CARDISSUER)
  188. #define LOG_CARDSWIPER_ERROR_MSG_MACRO(errCode, MethodSig)\
  189. LOG_ERROR_MSG_MACRO(errCode, MethodSig, CARDSWIPER)
  190. #define LOG_THERMALPRINT_ERROR_MSG_MACRO(errCode, MethodSig)\
  191. LOG_ERROR_MSG_MACRO(errCode, MethodSig, THERMALPRINT)
  192. #define LOG_DEVCONTROL_ERROR_MSG_MACRO(errCode, MethodSig)\
  193. LOG_ERROR_MSG_MACRO(errCode, MethodSig, DEVCONTROL)
  194. #define LOG_PRINTSEAL_ERROR_MSG_MACRO(errCode, MethodSig)\
  195. LOG_ERROR_MSG_MACRO(errCode, MethodSig, PRINTSEAL)
  196. #define LOG_FINGERPRINT_ERROR_MSG_MACRO(errCode, MethodSig)\
  197. LOG_ERROR_MSG_MACRO(errCode, MethodSig, FINGERPRINT)
  198. #define LOG_HSPSCANNER_ERROR_MSG_MACRO(errCode, MethodSig)\
  199. LOG_ERROR_MSG_MACRO(errCode, MethodSig, HSPSCANNER)
  200. #define LOG_UPS_ERROR_MSG_MACRO(errCode, MethodSig)\
  201. LOG_ERROR_MSG_MACRO(errCode, MethodSig, UPS)
  202. #define LOG_GPIO_ERROR_MSG_MACRO(errCode, MethodSig)\
  203. LOG_ERROR_MSG_MACRO(errCode, MethodSig, GPIO)
  204. #define LOG_IDCER_ERROR_MSG_MACRO(errCode, MethodSig)\
  205. LOG_ERROR_MSG_MACRO(errCode, MethodSig, IDCER)
  206. #define LOG_RF_ERROR_MSG_MACRO(errCode, MethodSig)\
  207. LOG_ERROR_MSG_MACRO(errCode, MethodSig, RF)
  208. #define LOG_PINPAD_ERROR_MSG_MACRO(errCode, MethodSig)\
  209. LOG_ERROR_MSG_MACRO(errCode, MethodSig, EPP)
  210. #endif // __DEVICEBASE_HELPER_H