Forráskód Böngészése

#IQRV #comment [DeviceControl] 显示打开设备参数

gifur 4 éve
szülő
commit
a74085ef26

+ 44 - 7
Module/mod_DeviceControl/DeviceAdaptChecker.cpp

@@ -15,25 +15,25 @@ ErrorCodeEnum CAdapterLoader::LoadConfigFromRootIni()
      do {
          int value(0);
          spRootConfig->ReadConfigValueInt(strSection, "Port", value);
-         vendorLibInfo.dwPort = value;
+         vendorLibInfo.optCfg.dwPort = value;
      } while (false);
 
      do {
          int value(0);
          spRootConfig->ReadConfigValueInt(strSection, "Baudrate", value);
-         vendorLibInfo.dwBaudRate = value;
+         vendorLibInfo.optCfg.dwBaudRate = value;
      } while (false);
 
      do {
          int value(0);
          //spRootConfig->ReadConfigValueInt(strSection, "PortNum", value);
-         vendorLibInfo.dwParam1 = value;
+         vendorLibInfo.optCfg.dwParam1 = value;
      } while (false);
 
-     vendorLibInfo.dwParam2 = 0;
+     vendorLibInfo.optCfg.dwParam2 = 0;
 
-     result = pEntityBase->GetFunction()->GetPath("Dep", vendorLibInfo.strDepDirWithSlash);
-     vendorLibInfo.strDepDirWithSlash += SPLIT_SLASH_STR;
+     result = pEntityBase->GetFunction()->GetPath("Dep", vendorLibInfo.optCfg.strDepDirWithSlashOrFileName);
+     vendorLibInfo.optCfg.strDepDirWithSlashOrFileName += SPLIT_SLASH_STR;
 
      return result;
 }
@@ -59,7 +59,7 @@ void CAdapterLoadChecker::Init(CEntityBase* pEntity)
     }
 }
 
-bool CAdapterLoadChecker::IsThisFileConfigure(LPCTSTR fileName)
+bool CAdapterLoadChecker::IsThisFileConfigure(LPCTSTR fileName, AdapterRootConfigInfo* info)
 {
     bool result(false);
 
@@ -68,6 +68,7 @@ bool CAdapterLoadChecker::IsThisFileConfigure(LPCTSTR fileName)
             continue;
         CAdapterLoader*& item = mAdapterConfigList[i];
         if (item->GetAdaperFileName().Compare(fileName) == 0) {
+            if (info != NULL) { *info = item->vendorLibInfo.optCfg; }
             result = true;
             break;
         }
@@ -105,6 +106,42 @@ CAutoArray<CSimpleStringA> CAdapterLoadChecker::GetConfigedAdapterFileName(LPCTS
     return result;
 }
 
+CAutoArray<AdapterRootConfigInfo> CAdapterLoadChecker::GetConfigedAdapterInfo(LPCTSTR device /*= ""*/, LPCTSTR vendor /*= ""*/)
+{
+    CAutoArray<AdapterRootConfigInfo> result;
+    std::vector<std::string> filenames;
+    std::vector<DWORD> ports;
+    std::vector<DWORD> baudrates;
+
+
+    const  bool deviceFilterFlag = (device != NULL && strlen(device) > 0);
+    const  bool vendorFilterFlag = (vendor != NULL && strlen(vendor) > 0);
+
+
+    for (int i = 0; i < mAdapterConfigList.GetCount(); ++i) {
+        if (mAdapterConfigList[i] == nullptr)
+            continue;
+        CAdapterLoader*& item = mAdapterConfigList[i];
+        if (item->IsFullConfig()
+            && (!deviceFilterFlag || item->vendorLibInfo.strDevice.Compare(device) == 0)
+            && (!vendorFilterFlag || item->vendorLibInfo.strVendor.Compare(vendor) == 0)) {
+            filenames.push_back(std::string(item->GetAdaperFileName().GetData()));
+            ports.push_back(item->vendorLibInfo.optCfg.dwPort);
+            baudrates.push_back(item->vendorLibInfo.optCfg.dwBaudRate);
+        }
+    }
+
+    result.Init(filenames.size());
+    int cnt(0);
+    for (auto it = filenames.cbegin(); it != filenames.cend(); ++it, ++cnt) {
+        result[cnt].strDepDirWithSlashOrFileName = it->c_str();
+        result[cnt].dwPort = ports[cnt];
+        result[cnt].dwBaudRate = baudrates[cnt];
+    }
+
+    return result;
+}
+
 bool VendorLibInfoEx::Load(CSimpleStringA& adapterFilename)
 {
     bool result(false);

+ 11 - 3
Module/mod_DeviceControl/DeviceAdaptChecker.h

@@ -10,18 +10,24 @@ static const char* adapterList[] = {
     "PinPad", "CardIssuer",  "IDCertificate","ContactlessCard","HSPScanner", "FingerPrint",  "WatchDog", "Gpio",  "Ups" };
 
 
-struct VendorLibInfoEx : public VendorLibInfo
+struct AdapterRootConfigInfo
 {
     DWORD dwPort = 0;
     DWORD dwBaudRate = 0;
     DWORD dwParam1 = 0;
     DWORD dwParam2 = 0;
 
-    CSimpleStringA strDepDirWithSlash;
+    CSimpleStringA strDepDirWithSlashOrFileName;
+};
 
+struct VendorLibInfoEx : public VendorLibInfo
+{
+
+    AdapterRootConfigInfo optCfg;
     bool Load(CSimpleStringA& adapterFilename);
 };
 
+
 class CAdapterLoader
 {
 public:
@@ -82,9 +88,11 @@ public:
     }
     void Init(CEntityBase* pEntity);
 
-    bool IsThisFileConfigure(LPCTSTR fileName);
+    bool IsThisFileConfigure(LPCTSTR fileName, AdapterRootConfigInfo* info = NULL);
 
     CAutoArray<CSimpleStringA> GetConfigedAdapterFileName(LPCTSTR device = "", LPCTSTR vendor = "");
+    CAutoArray<AdapterRootConfigInfo> GetConfigedAdapterInfo(LPCTSTR device = "", LPCTSTR vendor = "");
+
 
     static ErrorCodeEnum CheckDeviceAndAdapterAvailable(const VendorLibInfoEx& vendorLibInfo, CSimpleStringA& strErrMsg);
 

+ 17 - 16
Module/mod_DeviceControl/DeviceAdapterCheckerImpl.cpp

@@ -25,10 +25,10 @@ ErrorCodeEnum CAdapterLoadChecker::CheckDeviceAndAdapterAvailable(const VendorLi
         }
     }
 
-    CSimpleStringA strLibFullPath(libInfo.strDepDirWithSlash + libInfo.toLibNameString());
+    CSimpleStringA strLibFullPath(libInfo.optCfg.strDepDirWithSlashOrFileName + libInfo.toLibNameString());
     if (!ExistsFileA(strLibFullPath)) {
         strErrMsg = CSimpleStringA::Format("%s 路径下找不到 %s 文件",
-                                           libInfo.strDepDirWithSlash.GetData(), libInfo.toLibNameString().GetData());
+                                           libInfo.optCfg.strDepDirWithSlashOrFileName.GetData(), libInfo.toLibNameString().GetData());
         return Error_NotExist;
     }
 
@@ -40,8 +40,8 @@ ErrorCodeEnum CAdapterLoadChecker::CheckDeviceAndAdapterAvailable(const VendorLi
         result = devImpl.LoadUp(strLibFullPath);
         Dbg("Load returned: %s", SpStrError(result));
         if (Error_Succeed == result) {
-            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.dwPort, libInfo.dwBaudRate);
-            result = devImpl->DevOpen(libInfo.dwPort, libInfo.dwBaudRate);
+            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
+            result = devImpl->DevOpen(libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
             Dbg("open result: %s", SpStrError(result));
             if (result != Error_Succeed) {
                 DevErrorInfo devErrInfo;
@@ -61,9 +61,9 @@ ErrorCodeEnum CAdapterLoadChecker::CheckDeviceAndAdapterAvailable(const VendorLi
         result = devImpl.LoadUp(strLibFullPath);
         Dbg("Load returned: %s", SpStrError(result));
         if (Error_Succeed == result) {
-            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.dwPort, libInfo.dwBaudRate);
+            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
             BYTE noUse;
-            result = devImpl->DevOpenEx(libInfo.dwPort, libInfo.dwBaudRate, DEV_OPEN_TYPE_COM, "", noUse);
+            result = devImpl->DevOpenEx(libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate, DEV_OPEN_TYPE_COM, "", noUse);
             Dbg("open result: %s", SpStrError(result));
             if (result != Error_Succeed) {
                 DevErrorInfo devErrInfo;
@@ -83,8 +83,8 @@ ErrorCodeEnum CAdapterLoadChecker::CheckDeviceAndAdapterAvailable(const VendorLi
         result = devImpl.LoadUp(strLibFullPath);
         Dbg("Load returned: %s", SpStrError(result));
         if (Error_Succeed == result) {
-            Dbg("%s: to open %p, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.dwPort);
-            result = devImpl->DevOpen(libInfo.dwPort);
+            Dbg("%s: to open %p, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.optCfg.dwPort);
+            result = devImpl->DevOpen(libInfo.optCfg.dwPort);
             Dbg("open result: %s", SpStrError(result));
             if (result != Error_Succeed) {
                 DevErrorInfo devErrInfo;
@@ -104,8 +104,8 @@ ErrorCodeEnum CAdapterLoadChecker::CheckDeviceAndAdapterAvailable(const VendorLi
         result = devImpl.LoadUp(strLibFullPath);
         Dbg("Load returned: %s", SpStrError(result));
         if (Error_Succeed == result) {
-            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.dwPort, libInfo.dwBaudRate);
-            result = devImpl->DevOpen(libInfo.dwPort, libInfo.dwBaudRate);
+            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
+            result = devImpl->DevOpen(libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
             Dbg("open result: %s", SpStrError(result));
             if (result != Error_Succeed) {
                 DevErrorInfo devErrInfo;
@@ -146,8 +146,8 @@ ErrorCodeEnum CAdapterLoadChecker::CheckDeviceAndAdapterAvailable(const VendorLi
         result = devImpl.LoadUp(strLibFullPath);
         Dbg("Load returned: %s", SpStrError(result));
         if (Error_Succeed == result) {
-            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.dwPort, libInfo.dwBaudRate);
-            result = devImpl->DevOpen(libInfo.dwPort, libInfo.dwBaudRate);
+            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
+            result = devImpl->DevOpen(libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
             Dbg("open result: %s", SpStrError(result));
             if (result != Error_Succeed) {
                 DevErrorInfo devErrInfo;
@@ -188,8 +188,9 @@ ErrorCodeEnum CAdapterLoadChecker::CheckDeviceAndAdapterAvailable(const VendorLi
         result = devImpl.LoadUp(strLibFullPath);
         Dbg("Load returned: %s", SpStrError(result));
         if (Error_Succeed == result) {
-            GpioInitParam param = { libInfo.dwPort, libInfo.dwBaudRate, 4, {true, true, false, true} };
-            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.dwPort, libInfo.dwBaudRate);
+            ///**TODO(Gifur@10/20/2021): 这里只针对UOS和新款Win大机 */
+            GpioInitParam param = { libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate, 4, {true, true, false, true} };
+            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
             result = devImpl->DevOpen(param);
             Dbg("open result: %s", SpStrError(result));
             if (result != Error_Succeed) {
@@ -210,8 +211,8 @@ ErrorCodeEnum CAdapterLoadChecker::CheckDeviceAndAdapterAvailable(const VendorLi
         result = devImpl.LoadUp(strLibFullPath);
         Dbg("Load returned: %s", SpStrError(result));
         if (Error_Succeed == result) {
-            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.dwPort, libInfo.dwBaudRate);
-            result = devImpl->DevOpen(libInfo.dwPort, libInfo.dwBaudRate);
+            Dbg("%s: to open %p, %d, %d", __FUNCTION__, devImpl.GetDevPointer(), libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
+            result = devImpl->DevOpen(libInfo.optCfg.dwPort, libInfo.optCfg.dwBaudRate);
             Dbg("open result: %s", SpStrError(result));
             if (result != Error_Succeed) {
                 DevErrorInfo devErrInfo;

+ 38 - 13
Module/mod_DeviceControl/mod_DeviceControl.cpp

@@ -234,21 +234,35 @@ void CDeviceControlEntity::GetVendorFileList(SpReqAnsContext<DeviceControlServic
     if (ctx->Req.root) {
         CAdapterLoadChecker* checker = new CAdapterLoadChecker();
         checker->Init(this);
+        CAutoArray<AdapterRootConfigInfo> tmp;
         if (ctx->Req.adapter.IsNullOrEmpty() || ctx->Req.adapter.Compare("*") == 0) {
-            ctx->Ans.filenames = checker->GetConfigedAdapterFileName();
+            tmp = checker->GetConfigedAdapterInfo();
         } else {
-            ctx->Ans.filenames = checker->GetConfigedAdapterFileName(ctx->Req.adapter);
+            tmp = checker->GetConfigedAdapterInfo(ctx->Req.adapter);
         }
-        ctx->Ans.status.Init(ctx->Ans.filenames.GetCount());
+        delete checker;
+        checker = NULL;
+
+        const int curSize = tmp.GetCount();
+        ctx->Ans.filenames.Init(curSize);
+        ctx->Ans.status.Init(curSize);
+        ctx->Ans.port.Init(curSize);
+        ctx->Ans.baudrate.Init(curSize);
+
         CSimpleStringA strDepDirPath2 = strDepDirPath + SPLIT_SLASH_STR;
-        for (int i = 0; i < ctx->Ans.filenames.GetCount(); ++i) {
+        for (int i = 0; i < curSize; ++i) {
+
+            ctx->Ans.filenames[i] = tmp[i].strDepDirWithSlashOrFileName;
+            ctx->Ans.port[i] = tmp[i].dwPort;
+            ctx->Ans.baudrate[i] = tmp[i].dwBaudRate;
+
             CSimpleStringA fullPath = strDepDirPath2 + ctx->Ans.filenames[i];
             ctx->Ans.status[i] = 0x2;
             if (ExistsFileA(fullPath)) {
                 ctx->Ans.status[i] |= 0x1;
             }
         }
-        delete checker;
+        
     } else {
         std::vector<std::string> adapterFiles;
         array_header_t* subs = fileutil_get_sub_files_a(strDepDirPath);
@@ -278,7 +292,14 @@ void CDeviceControlEntity::GetVendorFileList(SpReqAnsContext<DeviceControlServic
             const int curSize = adapterFiles.size();
             ctx->Ans.filenames.Init(curSize);
             ctx->Ans.status.Init(curSize);
-            for (int i = 0; i < curSize; ++i) ctx->Ans.status[i] = 0;
+            ctx->Ans.port.Init(curSize);
+            ctx->Ans.baudrate.Init(curSize);
+
+            for (int i = 0; i < curSize; ++i) {
+                ctx->Ans.status[i] = 0;
+                ctx->Ans.port[i] = 0;
+                ctx->Ans.baudrate[i] = 0;
+            }
 
             if (curSize > 0) {
                 CAdapterLoadChecker* checker = new CAdapterLoadChecker();
@@ -287,8 +308,12 @@ void CDeviceControlEntity::GetVendorFileList(SpReqAnsContext<DeviceControlServic
                 for (auto iter = adapterFiles.cbegin(); iter != adapterFiles.cend(); ++iter, ++cnt) {
                     ctx->Ans.filenames[cnt] = iter->c_str();
                     ctx->Ans.status[cnt] = 0x1;
-                    if (checker->IsThisFileConfigure(iter->c_str())) {
+                    AdapterRootConfigInfo info;
+                    if (checker->IsThisFileConfigure(iter->c_str(), &info)) {
                         ctx->Ans.status[cnt] |= 0x2;
+                        ctx->Ans.port[cnt] = info.dwPort;
+                        ctx->Ans.baudrate[cnt] = info.dwBaudRate;
+
                     }
                 }
 
@@ -322,13 +347,13 @@ void CDeviceControlEntity::TestAdapterFileAvailable(
     VendorLibInfoEx libInfo;
     if (libInfo.Load(ctx->Req.filename)) {
 
-        libInfo.dwPort = ctx->Req.port;
-        libInfo.dwBaudRate = ctx->Req.baudrate;
-        libInfo.dwParam1 = ctx->Req.param1;
-        libInfo.dwParam2 = ctx->Req.param2;
+        libInfo.optCfg.dwPort = ctx->Req.port;
+        libInfo.optCfg.dwBaudRate = ctx->Req.baudrate;
+        libInfo.optCfg.dwParam1 = ctx->Req.param1;
+        libInfo.optCfg.dwParam2 = ctx->Req.param2;
 
-        GetFunction()->GetPath("Dep", libInfo.strDepDirWithSlash);
-        libInfo.strDepDirWithSlash += SPLIT_SLASH_STR;
+        GetFunction()->GetPath("Dep", libInfo.optCfg.strDepDirWithSlashOrFileName);
+        libInfo.optCfg.strDepDirWithSlashOrFileName += SPLIT_SLASH_STR;
 
     } else if(ctx->Req.filename.IndexOf(".") == -1) { //pure adapter name
 

+ 0 - 1
Module/mod_DeviceControl/mod_DeviceControl.h

@@ -133,7 +133,6 @@ public:
     void GetVendorFileList(SpReqAnsContext<DeviceControlService_GetVendorFileList_Req, DeviceControlService_GetVendorFileList_Ans>::Pointer ctx);
     void TestAdapterFileAvailable(SpReqAnsContext<DeviceControlService_TestAdapterFileAvailable_Req, DeviceControlService_TestAdapterFileAvailable_Ans>::Pointer ctx);
 
-
     void OnSelfTest(EntityTestEnum eTestType, CSmartPointer<ITransactionContext> pTransactionContext)
     {
         m_fsm.SelfTest(eTestType, pTransactionContext);