DeviceAdaptChecker.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. #include "DeviceAdaptChecker.h"
  2. #include <vector>
  3. #include <string>
  4. ErrorCodeEnum CAdapterLoader::LoadConfigFromRootIni()
  5. {
  6. LOG_FUNCTION();
  7. ErrorCodeEnum result(Error_Succeed);
  8. CSmartPointer<IConfigInfo> spRootConfig;
  9. result = pEntityBase->GetFunction()->OpenConfig(Config_Root, spRootConfig);
  10. CSimpleStringA strSection = CSimpleStringA("Device.") + vendorLibInfo.strDevice;
  11. spRootConfig->ReadConfigValue(strSection, "Vendor", vendorLibInfo.strVendor);
  12. spRootConfig->ReadConfigValue(strSection, "Version", vendorLibInfo.strVersion);
  13. spRootConfig->ReadConfigValue(strSection, "Batch", vendorLibInfo.strBatch);
  14. do {
  15. int value(0);
  16. spRootConfig->ReadConfigValueInt(strSection, "Port", value);
  17. vendorLibInfo.optCfg.dwPort = value;
  18. } while (false);
  19. do {
  20. int value(0);
  21. spRootConfig->ReadConfigValueInt(strSection, "Baudrate", value);
  22. vendorLibInfo.optCfg.dwBaudRate = value;
  23. } while (false);
  24. do {
  25. int value(0);
  26. //spRootConfig->ReadConfigValueInt(strSection, "PortNum", value);
  27. vendorLibInfo.optCfg.dwParam1 = value;
  28. } while (false);
  29. vendorLibInfo.optCfg.dwParam2 = 0;
  30. result = pEntityBase->GetFunction()->GetPath("Dep", vendorLibInfo.optCfg.strDepDirWithSlashOrFileName);
  31. vendorLibInfo.optCfg.strDepDirWithSlashOrFileName += SPLIT_SLASH_STR;
  32. return result;
  33. }
  34. ErrorCodeEnum CAdapterLoader::GetAdapterFullPath(CSimpleStringA& strLibFullPath)
  35. {
  36. ErrorCodeEnum result(Error_Succeed);
  37. CSimpleStringA strLibName = vendorLibInfo.toLibNameString();
  38. CSimpleStringA strDepPath;
  39. result = pEntityBase->GetFunction()->GetPath("Dep", strDepPath);
  40. strLibFullPath = CSimpleStringA::Format("%s" SPLIT_SLASH_STR "%s", (LPCTSTR)strDepPath, (LPCTSTR)strLibName);
  41. return result;
  42. }
  43. void CAdapterLoadChecker::Init(CEntityBase* pEntity)
  44. {
  45. CSystemStaticInfo info;
  46. pEntity->GetFunction()->GetSystemStaticInfo(info);
  47. if (info.strMachineType.Compare("RVC.Stand2S") == 0) {
  48. mAdapterConfigList.Init(array_size(adapterList_4_stand2s));
  49. for (int i = 0; i < array_size(adapterList_4_stand2s); ++i) {
  50. CAdapterLoader* item = new CAdapterLoader(adapterList_4_stand2s[i], pEntity);
  51. mAdapterConfigList[i] = item;
  52. mAdapterConfigList[i]->LoadConfigFromRootIni();
  53. }
  54. } else if (info.strMachineType.Compare("RVC.Stand1SPlus") == 0) {
  55. mAdapterConfigList.Init(array_size(adapterList_4_stand1s));
  56. for (int i = 0; i < array_size(adapterList_4_stand1s); ++i) {
  57. CAdapterLoader* item = new CAdapterLoader(adapterList_4_stand1s[i], pEntity);
  58. mAdapterConfigList[i] = item;
  59. mAdapterConfigList[i]->LoadConfigFromRootIni();
  60. }
  61. }
  62. }
  63. bool CAdapterLoadChecker::IsThisFileConfigure(LPCTSTR fileName, AdapterRootConfigInfo* info)
  64. {
  65. LOG_FUNCTION();
  66. bool result(false);
  67. for (int i = 0; i < mAdapterConfigList.GetCount(); ++i) {
  68. if(mAdapterConfigList[i] == nullptr)
  69. continue;
  70. CAdapterLoader*& item = mAdapterConfigList[i];
  71. if (item->GetAdaperFileName().Compare(fileName) == 0) {
  72. if (info != NULL) { *info = item->vendorLibInfo.optCfg; }
  73. result = true;
  74. break;
  75. }
  76. }
  77. return result;
  78. }
  79. CAutoArray<CSimpleStringA> CAdapterLoadChecker::GetConfigedAdapterFileName(LPCTSTR device, LPCTSTR vendor)
  80. {
  81. CAutoArray<CSimpleStringA> result;
  82. std::vector<std::string> tmp;
  83. const bool deviceFilterFlag = (device != NULL && strlen(device) > 0);
  84. const bool vendorFilterFlag = (vendor != NULL && strlen(vendor) > 0);
  85. for (int i = 0; i < mAdapterConfigList.GetCount(); ++i) {
  86. if (mAdapterConfigList[i] == nullptr)
  87. continue;
  88. CAdapterLoader*& item = mAdapterConfigList[i];
  89. if (item->IsFullConfig()
  90. && (!deviceFilterFlag || item->vendorLibInfo.strDevice.Compare(device) == 0)
  91. && (!vendorFilterFlag || item->vendorLibInfo.strVendor.Compare(vendor) == 0)) {
  92. tmp.push_back(std::string(item->GetAdaperFileName().GetData()));
  93. }
  94. }
  95. result.Init(tmp.size());
  96. int cnt(0);
  97. for (auto it = tmp.cbegin(); it != tmp.cend(); ++it) {
  98. result[cnt++] = it->c_str();
  99. }
  100. return result;
  101. }
  102. CAutoArray<AdapterRootConfigInfo> CAdapterLoadChecker::GetConfigedAdapterInfo(LPCTSTR device /*= ""*/, LPCTSTR vendor /*= ""*/)
  103. {
  104. CAutoArray<AdapterRootConfigInfo> result;
  105. std::vector<std::string> filenames;
  106. std::vector<DWORD> ports;
  107. std::vector<DWORD> baudrates;
  108. const bool deviceFilterFlag = (device != NULL && strlen(device) > 0);
  109. const bool vendorFilterFlag = (vendor != NULL && strlen(vendor) > 0);
  110. for (int i = 0; i < mAdapterConfigList.GetCount(); ++i) {
  111. if (mAdapterConfigList[i] == nullptr)
  112. continue;
  113. CAdapterLoader*& item = mAdapterConfigList[i];
  114. if (item->IsFullConfig()
  115. && (!deviceFilterFlag || item->vendorLibInfo.strDevice.Compare(device) == 0)
  116. && (!vendorFilterFlag || item->vendorLibInfo.strVendor.Compare(vendor) == 0)) {
  117. filenames.push_back(std::string(item->GetAdaperFileName().GetData()));
  118. ports.push_back(item->vendorLibInfo.optCfg.dwPort);
  119. baudrates.push_back(item->vendorLibInfo.optCfg.dwBaudRate);
  120. }
  121. }
  122. result.Init(filenames.size());
  123. int cnt(0);
  124. for (auto it = filenames.cbegin(); it != filenames.cend(); ++it, ++cnt) {
  125. result[cnt].strDepDirWithSlashOrFileName = it->c_str();
  126. result[cnt].dwPort = ports[cnt];
  127. result[cnt].dwBaudRate = baudrates[cnt];
  128. }
  129. return result;
  130. }
  131. bool VendorLibInfoEx::Load(CSimpleStringA& adapterFilename)
  132. {
  133. bool result(false);
  134. #ifdef RVC_OS_WIN
  135. CSimpleStringA strPrefix("");
  136. CSimpleStringA strSuffix(".dll");
  137. #else
  138. CSimpleStringA strPrefix("lib");
  139. CSimpleStringA strSuffix(".so");
  140. #endif //RVC_OS_WIN
  141. if (adapterFilename.GetLength() < strPrefix.GetLength() + strSuffix.GetLength()) {
  142. return result;
  143. }
  144. /*lib3.5.7.9.so*/
  145. CSimpleStringA pureAdapterName = adapterFilename.SubString(
  146. strPrefix.GetLength(), adapterFilename.GetLength() - strPrefix.GetLength() - strSuffix.GetLength());
  147. CAutoArray<CSimpleStringA> adapterElems = pureAdapterName.Split('.');
  148. if (adapterElems.GetCount() != 4) {
  149. return result;
  150. }
  151. for (int i = 0; i < array_size(adapterList_4_stand2s); ++i) {
  152. if (adapterElems[0].Compare(adapterList_4_stand2s[i]) == 0) {
  153. result = true;
  154. break;
  155. }
  156. }
  157. ///**TODO(Gifur@10/19/2021): 保守写法,需考虑到文件名异常的情况 */
  158. for (int i = 0; result && i < adapterElems.GetCount(); ++i) {
  159. switch (i) {
  160. case 0:
  161. strDevice = adapterElems[i];
  162. break;
  163. case 1:
  164. strVendor = adapterElems[i];
  165. break;
  166. case 2:
  167. strVersion = adapterElems[i];
  168. break;
  169. case 3:
  170. strBatch = adapterElems[i];
  171. break;
  172. default:
  173. break;
  174. }
  175. }
  176. return result;
  177. }