| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- #pragma once
- #include "resource.h"
- #include <tchar.h>
- #include <strsafe.h>
- #include <Shlobj.h>
- #include "branch_def.h"
- #include "Logger.h"
- #include "..\..\DeviceAdapter\DevInc\BranchDeviceClass.h"
- using namespace SpBranch;
- #define ISSUCCEEDED(hr) ((hr) == Error_Succeed)
- #define FAILURED(hr) (!(ISSUCCEEDED(hr)))
- #define SAFE_FREE_LIBRARY(hModule) \
- do { \
- if(hModule){ \
- FreeLibrary(hModule); \
- hModule = NULL; \
- } \
- }while(0)
- #define GETFUNC_ERRORMSG(fuc, ec) \
- GetAdapterLastErr(#fuc, ec)
- #define MAX_PRINTF_MSG_LEN 512
- #define MAX_PRINTF_INFOR_LEN 1024
- typedef ErrorCodeEnum ( *LpCreateDevCom)(DeviceBaseClass *&baseObj);
- typedef ErrorCodeEnum ( *LpReleaseDevCom)(DeviceBaseClass *&pBaseObj);
- void InitLogger(LPCTSTR lpszDbgPath = NULL);
- LPCTSTR ErrorMessage(DWORD error);
- void FormatError(LPCTSTR fmt, ...);
- void FormatInfo(LPCTSTR fmt, ...);
- void PrintError(LPCTSTR errDesc, BOOL bGetLastError = TRUE);
- void PrintInfo(LPCTSTR inforDesc);
- //outCovertParam must be MAX_PRINTF_MSG_LEN len.
- void CovertCmdParam(LPTSTR outCovertParam, LPCTSTR lpszParam)
- {
- //PrintInfo("Test security param.");
- char szSecurParam[20] = {0};
- memset(outCovertParam, 0, sizeof(char)*MAX_PRINTF_MSG_LEN);
- memset(szSecurParam, 0, sizeof(szSecurParam));
- int len = strlen(lpszParam);
- bool bCoverted = false;
- if(len > 0)
- {
- if(len > 6)
- {
- szSecurParam[0] = lpszParam[0];
- szSecurParam[1] = lpszParam[1];
- szSecurParam[2] = lpszParam[2];
- strcat_s(szSecurParam, "***");
- szSecurParam[6] = lpszParam[len-3];
- szSecurParam[7] = lpszParam[len-2];
- szSecurParam[8] = lpszParam[len-1];
- szSecurParam[9] = '\0';
- bCoverted = true;
- }
- else if(len > 2)
- {
- szSecurParam[0] = lpszParam[0];
- szSecurParam[1] = '*';
- szSecurParam[2] = lpszParam[len-1];
- szSecurParam[3] = '\0';
- bCoverted = true;
- }
- }
- if(!bCoverted)
- {
- sprintf_s(outCovertParam, MAX_PRINTF_MSG_LEN, "(%s)", lpszParam);
- }
- else
- {
- sprintf_s(outCovertParam, MAX_PRINTF_MSG_LEN, "(%s)(len#%d)", szSecurParam, len);
- }
- return;
- }
- class CSpBranch
- {
- public:
- CSpBranch()
- :m_hVendorDll(NULL),
- m_pDevClass(NULL),
- m_FuncCreate(NULL),
- m_FuncRelease(NULL),
- m_eStatus(State_NoInit),
- m_devErrCode(Error_Succeed)
- {
- memset(m_szDllName, 0, sizeof(char)*MAX_PATH);
- memset(m_szDevName, 0, sizeof(char)*MAX_PATH);
- memset(m_szInfo, 0, sizeof(char)*MAX_PRINTF_INFOR_LEN);
- }
- ~CSpBranch()
- {
- //LOG_FUNCTION();
- if(m_eStatus >= State_LoadSucc)
- {
- if(m_eStatus > State_LoadSucc)
- CloseDevice();
- m_devErrCode = m_FuncRelease((DeviceBaseClass *&) m_pDevClass);
- }
- SAFE_FREE_LIBRARY(m_hVendorDll);
- FormatInfo("** The branch loaded process terminate ! processId = %u", GetCurrentProcessId());
- }
- //LoadLibrary and Create Object
- BOOL Init(_TCHAR* argv1, _TCHAR* argv2);
- BOOL OpenDevice(LPCTSTR lpszOpenParam1, LPCTSTR lpszOpenParam2);
- BOOL CloseDevice();
- BOOL ExecuteCmd(LPCTSTR lpszParam, CSimpleStringA& ssRetVal);
- BOOL GetDevCategory(DevCategoryInfo& info);
- DevThreadState GetDevThreadState() { return m_eStatus; }
- DWORD GetLastErrorCode() { return m_devErrCode; }
- void GetLastOperatError(DWORD& dwErrCode, CSimpleStringA& ssErrMsg)
- {
- //dwErrCode = m_eStatus;
- dwErrCode = m_devErrCode;
- ssErrMsg = m_szInfo;
- }
- void GetLastErrorMsg(CSimpleStringA& ssErrMsg)
- {
- ssErrMsg = m_szInfo;
- }
- protected:
- ErrorCodeEnum GetAdapterLastErr(LPCTSTR lpDescFunc, ErrorCodeEnum errCodeFunc);
- private:
- char m_szDllName[MAX_PATH];
- char m_szDevName[MAX_PATH];
- char m_szInfo[MAX_PRINTF_INFOR_LEN];
- HMODULE m_hVendorDll;
- BranchDeviceClass* m_pDevClass;
- LpCreateDevCom m_FuncCreate;
- LpReleaseDevCom m_FuncRelease;
- DevThreadState m_eStatus;
- DWORD m_devErrCode;
- };
- BOOL CSpBranch::Init(_TCHAR* argv1, _TCHAR* argv2)
- {
- strcpy_s(m_szDllName, MAX_PATH, argv1);
- strcpy_s(m_szDevName, MAX_PATH, argv2);
- m_eStatus = State_LoadFailed;
- ErrorCodeEnum erroCode = Error_Unexpect;
- FormatInfo("DllPath: %s", m_szDllName);
- m_hVendorDll = LoadLibraryA(m_szDllName);
- if(m_hVendorDll == NULL || m_hVendorDll == INVALID_HANDLE_VALUE)
- {
- PrintError("LoadLibrary failed");
- sprintf_s(m_szInfo, "LoadLibrary(%s) failed", m_szDllName);
- m_devErrCode = Error_DevLoadFileFailed;
- return FALSE;
- }
- if((m_FuncCreate = (LpCreateDevCom)GetProcAddress(m_hVendorDll, "CreateDevComponent")) == NULL)
- {
- sprintf_s(m_szInfo, "Get CreateDevComponent failed");
- PrintError("Get CreateDevComponent failed");
- SAFE_FREE_LIBRARY(m_hVendorDll);
- m_devErrCode = Error_Unregisted;
- return FALSE;
- }
- if((m_FuncRelease = (LpReleaseDevCom)GetProcAddress(m_hVendorDll, "ReleaseDevComponent")) == NULL)
- {
- sprintf_s(m_szInfo, "Get ReleaseDevComponent failed");
- PrintError("Get ReleaseDevComponent failed");
- SAFE_FREE_LIBRARY(m_hVendorDll);
- m_devErrCode = Error_Unregisted;
- return FALSE;
- }
- PrintInfo("Get DevComponent functions suc.");
- erroCode = m_FuncCreate((DeviceBaseClass *&)m_pDevClass);
- if(FAILURED(erroCode) || !m_pDevClass)
- {
- sprintf_s(m_szInfo, "Create dll entity failed");
- FormatError("Create DevAdapter Object failed, EC = %d.", erroCode);
- SAFE_FREE_LIBRARY(m_hVendorDll);
- m_devErrCode = Error_NoTarget;
- return FALSE;
- }
- sprintf_s(m_szInfo, "Create DevAdapter dll entity suc");
- PrintInfo("Create DevAdapter dll entity suc");
- m_devErrCode = Error_Succeed;
- m_eStatus = State_LoadSucc;
- return TRUE;
- }
- BOOL CSpBranch::OpenDevice(LPCTSTR lpszOpenParam1, LPCTSTR lpszOpenParam2)
- {
- if(m_pDevClass == NULL)
- {
- m_devErrCode = Error_NotInit;
- return FALSE;
- }
- ErrorCodeEnum erroCode = Error_Unexpect;
- BOOL bRet = FALSE;
- if(m_eStatus < State_LoadSucc)
- {
- PrintError("LoadLibraray first.", FALSE);
- m_devErrCode = Error_InvalidState;
- return FALSE;
- }
- if(m_eStatus >= State_Opened)
- {
- PrintInfo("BranchDevice been opened already.");
- m_devErrCode = Error_Duplication;
- return TRUE;
- }
- __try
- {
- FormatInfo("Start to open device with param: [%s][%s].", lpszOpenParam1, lpszOpenParam2);
- m_devErrCode = m_pDevClass->DevOpen(lpszOpenParam1, lpszOpenParam2);
- if(ISSUCCEEDED(m_devErrCode))
- {
- PrintInfo("Open device suc.");
- m_eStatus = State_Opened;
- }
- else
- {
- FormatError("Open device failed returned 0x%08x.", m_devErrCode);
- GETFUNC_ERRORMSG(DevOpen, (ErrorCodeEnum)m_devErrCode);
- }
- }
- __finally
- {
- if(AbnormalTermination())
- {
- FormatError("DevOpen([%s][%s]) appears exeception", lpszOpenParam1, lpszOpenParam2);
- m_devErrCode = Error_Exception;
- strcpy_s(m_szInfo, "DevOpen appears exeception");
- }
- }
- return (ISSUCCEEDED(m_devErrCode));
- }
- BOOL CSpBranch::CloseDevice()
- {
- if(m_pDevClass == NULL)
- {
- m_devErrCode = Error_NotInit;
- return FALSE;
- }
- if(m_eStatus < State_Opened)
- {
- PrintError("BranchDevice is not opend current.", FALSE);
- m_devErrCode = Error_InvalidState;
- return TRUE;
- }
- __try
- {
- m_devErrCode = m_pDevClass->DevClose();
- if(ISSUCCEEDED(m_devErrCode))
- {
- PrintInfo("Close device succ.");
- }
- else
- {
- GETFUNC_ERRORMSG(DevClose, (ErrorCodeEnum)m_devErrCode);
- }
- }
- __finally
- {
- if(AbnormalTermination())
- {
- FormatError("DevClose appears exeception");
- m_devErrCode = Error_Exception;
- strcpy_s(m_szInfo, "DevOpen appears exeception");
- }
- }
- return (ISSUCCEEDED(m_devErrCode));
- }
- ErrorCodeEnum CSpBranch::GetAdapterLastErr(LPCTSTR lpDescFunc, ErrorCodeEnum errCodeFunc)
- {
- if(m_pDevClass == NULL)
- {
- return Error_NotInit;
- }
- DevErrorInfo erroInfo;
- memset(erroInfo.szErrMsg, 0, MAX_DEV_ERROR_MSG_LEN);
- ErrorCodeEnum errLastErr = m_pDevClass->GetLastErr(erroInfo);
- if(ISSUCCEEDED(errLastErr) && erroInfo.dwErrMsgLen > 0)
- {
- CSimpleStringA str = CSimpleStringA::Format("%s failed GLE: %s", lpDescFunc, erroInfo.szErrMsg);
- sprintf_s(m_szInfo, (LPCTSTR)str);
- FormatError("%s failed GLE: %s", lpDescFunc, erroInfo.szErrMsg);
- }
- else
- {
- FormatError("GetLastErr for %s failed, %d %s.", lpDescFunc, errLastErr, erroInfo.szErrMsg);
- CSimpleStringA str = CSimpleStringA::Format("%s failed returned 0x%08x", lpDescFunc, errCodeFunc);
- sprintf_s(m_szInfo, (LPCTSTR)str);
- }
- return errLastErr;
- }
- BOOL CSpBranch::ExecuteCmd(LPCTSTR lpszParam, CSimpleStringA& ssRetVal)
- {
- if(m_pDevClass == NULL)
- {
- m_devErrCode = Error_NotInit;
- return FALSE;
- }
- char* retValue = new char[MAX_RETVALUE_LEN];
- ZeroMemory(retValue, MAX_RETVALUE_LEN);
- if(retValue == NULL)
- {
- strcpy_s(m_szInfo, "Allocate memory for retValue failed");
- PrintError("Allocate memory for retValue failed");
- m_devErrCode = Error_Resource;
- return FALSE;
- }
- __try
- {
- char szPrintMsg[MAX_PRINTF_MSG_LEN] = {0};
- CovertCmdParam(szPrintMsg, lpszParam);
- FormatInfo("Start to Invoke ExecuteCmd%s routine.", szPrintMsg);
- m_devErrCode = m_pDevClass->ExecuteCmd(lpszParam, retValue, MAX_RETVALUE_LEN);
- if(ISSUCCEEDED(m_devErrCode))
- {
- ssRetVal = retValue;
- }
- else
- {
- GETFUNC_ERRORMSG(ExecuteCmd, (ErrorCodeEnum)m_devErrCode);
- }
- }
- __finally
- {
- delete[] retValue;
- retValue = NULL;
- if(AbnormalTermination())
- {
- char szPrintMsg[MAX_PRINTF_MSG_LEN] = {0};
- CovertCmdParam(szPrintMsg, lpszParam);
- FormatError("ExecuteCmd%s appears exeception", szPrintMsg);
- m_devErrCode = Error_Exception;
- strcpy_s(m_szInfo, "ExecuteCmd appears exeception");
- }
- }
- return (ISSUCCEEDED(m_devErrCode));
- }
- BOOL CSpBranch::GetDevCategory(DevCategoryInfo& info)
- {
- if(m_pDevClass == NULL)
- {
- m_devErrCode = Error_NotInit;
- return FALSE;
- }
- __try
- {
- memset((void*)&info, 0, sizeof(DevCategoryInfo));
- m_devErrCode = m_pDevClass->GetDevCategory(info);
- if(!ISSUCCEEDED(m_devErrCode))
- {
- GetAdapterLastErr("GetDevCategory", (ErrorCodeEnum)m_devErrCode);
- }
- }
- __finally
- {
- if(AbnormalTermination())
- {
- FormatError("GetDevCategory appears exeception");
- m_devErrCode = Error_Exception;
- strcpy_s(m_szInfo, "GetDevCategory appears exeception");
- }
- }
- return (ISSUCCEEDED(m_devErrCode));
- }
|