EdgeInspector_App/Recipe/HardwareSettings.cpp
@@ -1,4 +1,4 @@
#include "StdAfx.h"
#include "StdAfx.h"
#include "HardwareSettings.h"
//////////////////////////////////////////////////////////////////////////
@@ -991,7 +991,7 @@
{
   if(this != &rhs)
   {
      int            iLoop;
      int   iLoop;
      Reset();
      m_nLightCount_Trans = rhs.m_nLightCount_Trans;
@@ -1009,10 +1009,12 @@
      m_strMachineName = rhs.m_strMachineName;
      m_strLineID = rhs.m_strLineID;
      m_nPLCSignalRetry = rhs.m_nPLCSignalRetry;
      m_nSaveImageQuality = rhs.m_nSaveImageQuality;
      m_nPLCSignalRetry = rhs.m_nPLCSignalRetry;
      //      m_dOneScanTime = rhs.m_dOneScanTime;
      m_nSaveImageQuality = rhs.m_nSaveImageQuality;
      m_bAsyncFullSave = rhs.m_bAsyncFullSave;
      // m_dOneScanTime = rhs.m_dOneScanTime;
      m_nFolderRemoveDay = rhs.m_nFolderRemoveDay;
      m_PLCSettings = rhs.m_PLCSettings;
@@ -1031,6 +1033,12 @@
      m_bUse_SaveDebugImage = rhs.m_bUse_SaveDebugImage;
      // ly,2025.07.10
      m_bSaveResultByHour = rhs.m_bSaveResultByHour;
      // ly,2025.08.14
      m_bUseRipInspection = rhs.m_bUseRipInspection;
      // ly,2025.07.07
      m_bEnableAutoCopy = rhs.m_bEnableAutoCopy;
      m_strCopyToolExePath = rhs.m_strCopyToolExePath;
@@ -1044,7 +1052,7 @@
void CHardwareSettings::Reset()
{      
   //   m_dOneScanTime = 0.;
   // m_dOneScanTime = 0.;
   m_nLightCount_Trans = 0;   
   m_nLightCount_Reflect = 0;   
   m_nCameraCount = 0;
@@ -1052,6 +1060,7 @@
   m_nFolderRemoveDay = 0;
   m_nPLCSignalRetry = 0;
   m_nSaveImageQuality = 30;
   m_bAsyncFullSave = FALSE;
   m_strMachineName = _T("");
   m_strLineID = _T("");
   m_nBoardType = GRAB_LINK_BOARD;
@@ -1135,84 +1144,97 @@
BOOL CHardwareSettings::SetCameraCount(int nCameraCount,int nScanCount)
{
   CCameraSettings *ptmpSet = NULL;
   int            nBackCamCnt = 0,nBackScanCnt = 0;
   int            iLoop;
   if(m_pCameraSettings != NULL)
   {
      if((m_nCameraCount*m_nScanCount) > 0)
      {
         ptmpSet = new CCameraSettings[m_nCameraCount*m_nScanCount];
         for(iLoop=0;iLoop<m_nCameraCount*m_nScanCount;iLoop++)
         {
            ptmpSet[iLoop] = m_pCameraSettings[iLoop];
         }
         nBackCamCnt = m_nCameraCount;
         nBackScanCnt = m_nScanCount;
      }
      delete[] m_pCameraSettings, m_pCameraSettings=NULL;
   }
   m_nCameraCount = nCameraCount;
   m_nScanCount = nScanCount;
   if(m_nCameraCount <= 0 || m_nScanCount <= 0)
   if (nCameraCount <= 0 || nScanCount <= 0) {
      return FALSE;
   }
   m_pCameraSettings = new CCameraSettings[m_nCameraCount*m_nScanCount];
   // 先保存旧的相机和扫描数
   static int nOldCameraCount = m_nCameraCount;
   static int nOldScanCount = m_nScanCount;
   int         iCam,iScan;
   iLoop=0;
   for(iCam=0;iCam<m_nCameraCount;iCam++)
   {
      for(iScan=0;iScan<m_nScanCount;iScan++)
      {
         m_pCameraSettings[iLoop].m_iCamera = iCam;
         m_pCameraSettings[iLoop].m_iScan = iScan;
         iLoop++;
   // 保存旧设置数据
   CCameraSettings* pOldSettings = nullptr;
   if (m_pCameraSettings != nullptr && nOldCameraCount > 0 && nOldScanCount > 0)
   {
      pOldSettings = new CCameraSettings[nOldCameraCount * nOldScanCount];
      for (int i = 0; i < nOldCameraCount * nOldScanCount; ++i) {
         pOldSettings[i] = m_pCameraSettings[i];
      }
   }
   if(ptmpSet != NULL)
   {
      for(iLoop=0;iLoop<nBackCamCnt*nBackScanCnt;iLoop++)
      {
         SetCameraSettings(&ptmpSet[iLoop]);
      }
      delete[] ptmpSet, ptmpSet=NULL;
   // 更新成员变量
   m_nCameraCount = nCameraCount;
   m_nScanCount = nScanCount;
   // 重新分配新结构
   int nNewCount = m_nCameraCount * m_nScanCount;
   int nOldCount = nOldCameraCount * nOldScanCount;
   if (m_pCameraSettings != nullptr) {
      delete[] m_pCameraSettings;
      m_pCameraSettings = nullptr;
   }
   m_pCameraSettings = new CCameraSettings[m_nCameraCount * m_nScanCount];
   // 初始化新结构
   int iIndex = 0;
   for (int iCam = 0; iCam < m_nCameraCount; ++iCam) {
      for (int iScan = 0; iScan < m_nScanCount; ++iScan, ++iIndex) {
         m_pCameraSettings[iIndex].m_iCamera = iCam;
         m_pCameraSettings[iIndex].m_iScan = iScan;
      }
   }
   // 拷贝回旧设置
   if (pOldSettings != nullptr) {
      for (int iCam = 0; iCam < nOldCameraCount; ++iCam) {
         for (int iScan = 0; iScan < nOldScanCount; ++iScan) {
            if (iCam < m_nCameraCount && iScan < m_nScanCount) {
               int nNewIndex = iCam * m_nScanCount + iScan;
               int nOldIndex = iCam * nOldScanCount + iScan;
               if (nNewIndex < nNewCount && nOldIndex < nOldCount)
               {
                  SetCameraSettings(&pOldSettings[nOldIndex]);
               }
            }
         }
      }
      delete[] pOldSettings;
   }
   // 更新旧的相机和扫描数
   nOldCameraCount = m_nCameraCount;
   nOldScanCount = m_nScanCount;
   return TRUE;
}
CCameraSettings   *CHardwareSettings::GetCameraSettings(int iCamera,int iScan)
CCameraSettings* CHardwareSettings::GetCameraSettings(int iCamera,int iScan)
{
   if(iCamera >= m_nCameraCount || iScan >= m_nScanCount
      || m_nCameraCount <= 0 || m_nScanCount <= 0)
      return NULL;
   for(int iLoop=0;iLoop<m_nCameraCount*m_nScanCount;iLoop++)
   {
      if(m_pCameraSettings[iLoop].m_iCamera == iCamera && m_pCameraSettings[iLoop].m_iScan == iScan)
         return &m_pCameraSettings[iLoop];
   if (nullptr == m_pCameraSettings || iCamera < 0 || iScan < 0) {
      return nullptr;
   }
   return NULL;
   if (iCamera >= m_nCameraCount || iScan >= m_nScanCount) {
      return nullptr;
   }
   int nIndex = iCamera * m_nScanCount + iScan;
   return &m_pCameraSettings[nIndex];
}
BOOL CHardwareSettings::SetCameraSettings(CCameraSettings *pCamera)
{
   if(pCamera == NULL || m_nCameraCount <= 0 || m_nScanCount <= 0)
   if (pCamera == nullptr || m_pCameraSettings == nullptr) {
      return FALSE;
   }
   CCameraSettings   *pOrgCam = GetCameraSettings(pCamera->m_iCamera,pCamera->m_iScan);
   if(pOrgCam == NULL)
   CCameraSettings* pTarget = GetCameraSettings(pCamera->m_iCamera, pCamera->m_iScan);
   if (pTarget == nullptr) {
      return FALSE;
   }
   *pOrgCam = *pCamera;
   *pTarget = *pCamera;
   return TRUE;
}
@@ -1261,6 +1283,16 @@
      str = _T("SAVE_DEBUG_IMAGE");
   else if((void *)&m_nSaveImageQuality == pValue)
      str = _T("SAVEIMAGE_QUALITY");
   else if ((void*)&m_bAsyncFullSave == pValue)
      str = _T("ASYNC_FULL_SAVE");
   // ly,2025.07.10
   else if ((void*)&m_bSaveResultByHour == pValue)
      str = _T("SAVE_RESULT_BY_HOUR");
   // ly,2025.08.14
   else if ((void*)&m_bUseRipInspection == pValue)
      str = _T("USE_RIP_INSPECTION");
   // ly,2025.07.07
   else if ((void*)&m_bEnableAutoCopy == pValue)
@@ -1354,6 +1386,10 @@
      return FALSE;
   BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str,m_nSaveImageQuality,30);   
   
   str = GetFileString((void*)&m_bAsyncFullSave);
   if (str.IsEmpty() == TRUE)
      return FALSE;
   BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str, m_bAsyncFullSave, FALSE);
   SetCameraCount(m_nCameraCount,m_nScanCount);
   iLoop = 0;
@@ -1426,7 +1462,19 @@
   BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str,nTemp);
   m_bUse_SaveDebugImage = (BOOL) nTemp;
   // ly.2025.07.07
   // ly,2025.07.10
   str = GetFileString((void*)&m_bSaveResultByHour);
   if (str.IsEmpty() == TRUE)
      return FALSE;
   BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str, m_bSaveResultByHour, FALSE);
   // ly,2025.08.14
   str = GetFileString((void*)&m_bUseRipInspection);
   if (str.IsEmpty() == TRUE)
      return FALSE;
   BasicInfoFile.GetItemValue((TCHAR*)(LPCTSTR)str, m_bUseRipInspection, FALSE);
   // ly,2025.07.07
   str = GetFileString((void*)&m_bEnableAutoCopy);
   if (str.IsEmpty() == TRUE)
      return FALSE;
@@ -1528,7 +1576,12 @@
   str = GetFileString((void *)&m_nSaveImageQuality);
   if(str.IsEmpty() == TRUE)
      return FALSE;
   Register.GetItemValue((TCHAR*)(LPCTSTR)str,m_nSaveImageQuality,30);
   Register.GetItemValue((TCHAR*)(LPCTSTR)str,m_nSaveImageQuality,30);
   str = GetFileString((void*)&m_bAsyncFullSave);
   if (str.IsEmpty() == TRUE)
      return FALSE;
   Register.GetItemValue((TCHAR*)(LPCTSTR)str, m_bAsyncFullSave, FALSE);
   SetCameraCount(m_nCameraCount,m_nScanCount);
   iLoop = 0;
@@ -1600,7 +1653,19 @@
   Register.GetItemValue((TCHAR*)(LPCTSTR)str,nTemp);
   m_bUse_SaveDebugImage = (BOOL) nTemp;
   // ly.2025.07.07
   // ly,2025.07.10
   str = GetFileString((void*)&m_bSaveResultByHour);
   if (str.IsEmpty() == TRUE)
      return FALSE;
   Register.GetItemValue((TCHAR*)(LPCTSTR)str, m_bSaveResultByHour, FALSE);
   // ly,2025.08.14
   str = GetFileString((void*)&m_bUseRipInspection);
   if (str.IsEmpty() == TRUE)
      return FALSE;
   Register.GetItemValue((TCHAR*)(LPCTSTR)str, m_bUseRipInspection, FALSE);
   // ly,2025.07.07
   str = GetFileString((void*)&m_bEnableAutoCopy);
   if (str.IsEmpty() == TRUE)
      return FALSE;
@@ -1687,6 +1752,11 @@
      return FALSE;
   Register.SetItemValue((TCHAR*)(LPCTSTR)str,m_nSaveImageQuality);
   str = GetFileString((void*)&m_bAsyncFullSave);
   if (str.IsEmpty() == TRUE)
      return FALSE;
   Register.SetItemValue((TCHAR*)(LPCTSTR)str, m_bAsyncFullSave);
   if(m_pCameraSettings != NULL)
   {
      iLoop = 0;
@@ -1757,7 +1827,19 @@
      return FALSE;
   Register.SetItemValue((TCHAR*)(LPCTSTR)str,(int) m_bUse_SaveDebugImage);
   // ly.2025.07.07
   // ly,2025.07.10
   str = GetFileString((void*)&m_bSaveResultByHour);
   if (str.IsEmpty() == TRUE)
      return FALSE;
   Register.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bSaveResultByHour);
   // ly,2025.08.14
   str = GetFileString((void*)&m_bUseRipInspection);
   if (str.IsEmpty() == TRUE)
      return FALSE;
   Register.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bUseRipInspection);
   // ly,2025.07.07
   str = GetFileString((void*)&m_bEnableAutoCopy);
   if (str.IsEmpty() == TRUE)
      return FALSE;
@@ -1788,33 +1870,39 @@
BOOL CHardwareSettings::WriteHardwareSettingsFile(CString strFilePath)
{
   CConfig      BasicInfoFile;
   CString            str;
   int               iCam,iScan,iLight,iLoop;
   g_pLog->DisplayMessage(_T("HWSettings Start writing hardware settings to file: %s"), strFilePath);
   if(BasicInfoFile.SetRegiConfig(NULL, NULL, (TCHAR*)(LPCTSTR)strFilePath, FileMap_Mode) == FALSE)
   {
   int   iCam, iScan, iLight, iLoop;
   CConfig   BasicInfoFile;
   if(BasicInfoFile.SetRegiConfig(NULL, NULL, (TCHAR*)(LPCTSTR)strFilePath, FileMap_Mode) == FALSE) {
      CFile File;
      if (!File.Open((TCHAR*)(LPCTSTR)strFilePath, CFile::modeCreate))
      {
      if (!File.Open((TCHAR*)(LPCTSTR)strFilePath, CFile::modeCreate)) {
         DWORD dwErr = GetLastError();
         g_pLog->DisplayMessage(_T("HWSettings failed | Path=%s | Error=%lu"), strFilePath, dwErr);
         return FALSE;
      }
      File.Close();
   }
   CString   str;
   str = GetFileString((void *)&m_nCameraCount);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nCameraCount);
   str = GetFileString((void *)&m_nScanCount);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nScanCount);   
   str = GetFileString((void *)&m_nBoardType);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nBoardType);   
   
   //    str = GetFileString((void *)&m_dOneScanTime);
@@ -1823,192 +1911,212 @@
   //    BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_dOneScanTime);   
   str = GetFileString((void *)&m_strMachineName);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,(TCHAR*)(LPCTSTR)m_strMachineName);
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,(TCHAR*)(LPCTSTR)m_strMachineName);
   str = GetFileString((void *)&m_strLineID);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,(TCHAR*)(LPCTSTR)m_strLineID);
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,(TCHAR*)(LPCTSTR)m_strLineID);
   str = GetFileString((void *)&m_nPLCSignalRetry);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nPLCSignalRetry);   
   str = GetFileString((void *)&m_bInsDirReverse);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_bInsDirReverse);
   str = GetFileString((void *)&m_bUseColorVisual);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_bUseColorVisual);
   str = GetFileString((void *)&m_nSaveImageQuality);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nSaveImageQuality);
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nSaveImageQuality);
   if(m_pCameraSettings != NULL)
   {
   str = GetFileString((void*)&m_bAsyncFullSave);
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_bAsyncFullSave);
   if (m_pCameraSettings != NULL) {
      iLoop = 0;
      for(iCam=0;iCam<m_nCameraCount;iCam++)
      {
         for(iScan=0;iScan<m_nScanCount;iScan++)
         {
            m_pCameraSettings[iLoop].WriteHardwareSettingsFile(&BasicInfoFile);
      for (iCam = 0; iCam < m_nCameraCount; iCam++) {
         for (iScan = 0; iScan < m_nScanCount; iScan++) {
            m_pCameraSettings[iLoop].WriteHardwareSettingsFile(&BasicInfoFile);
            iLoop++;
         }
      }
   }
   str = GetFileString((void *)&m_nLightCount_Trans);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nLightCount_Trans);   
   str = GetFileString((void *)&m_nLightCount_Reflect);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nLightCount_Reflect);
   str = GetFileString((void *)&m_nFolderRemoveDay);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nFolderRemoveDay);
   if(m_pLightSettings != NULL)
   {
      for(iLight=0;iLight<m_nLightCount_Trans+m_nLightCount_Reflect;iLight++)
      {
   if (m_pLightSettings != NULL) {
      for (iLight = 0; iLight < m_nLightCount_Trans + m_nLightCount_Reflect; iLight++) {
         m_pLightSettings[iLight].WriteHardwareSettingsFile(&BasicInfoFile);
      }
      }
   }
   m_PLCSettings.WriteHardwareSettingsFile(&BasicInfoFile);
   m_SoftWareSettings.WriteHardwareSettingsFile(&BasicInfoFile);
   str = GetFileString((void *)&m_bUseFreerun);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,(int) m_bUseFreerun);
   str = GetFileString((void *)&m_nFreerunPeriod);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nFreerunPeriod);
   str = GetFileString((void *)&m_nFreerunExposureTime);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nFreerunExposureTime);
   str = GetFileString((void *)&m_bUse_MvsolTriggerControl);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_bUse_MvsolTriggerControl);
   str = GetFileString((void *)&m_nPort_MvsolTriggerControl);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_nPort_MvsolTriggerControl);
   str = GetFileString((void *)&m_bUse_SaveDebugImage);
   if(str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str,m_bUse_SaveDebugImage);
   // ly.2025.07.07
   // ly,2025.07.10
   str = GetFileString((void*)&m_bSaveResultByHour);
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bSaveResultByHour);
   // ly,2025.08.14
   str = GetFileString((void*)&m_bUseRipInspection);
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bUseRipInspection);
   // ly,2025.07.07
   str = GetFileString((void*)&m_bEnableAutoCopy);
   if (str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bEnableAutoCopy);
   str = GetFileString((void*)&m_strCopyToolExePath);
   if (str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_strCopyToolExePath);
   str = GetFileString((void*)&m_strCopyToolConfigPath);
   if (str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_strCopyToolConfigPath);
   str = GetFileString((void*)&m_bEnableAutoDelete);
   if (str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, (int)m_bEnableAutoDelete);
   str = GetFileString((void*)&m_strDeleteToolExePath);
   if (str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolExePath);
   str = GetFileString((void*)&m_strDeleteToolConfigPath);
   if (str.IsEmpty() == TRUE)
   if (str.IsEmpty() == TRUE) {
      return FALSE;
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath);
   }
   BasicInfoFile.SetItemValue((TCHAR*)(LPCTSTR)str, m_strDeleteToolConfigPath);
   BasicInfoFile.WriteToFile();
   g_pLog->DisplayMessage(_T("HWSettings Finished writing hardware settings file: %s"), strFilePath);
   return TRUE;
}
int CHardwareSettings::GetScanToDimension(DimensionDir eDir)
{
   int         iScan,iFindScan;
   int         iCam;
   CCameraSettings *pCamera;
   iFindScan = -1;
   for(iCam=0;iCam<GetCameraCount();iCam++)
   {
      for(iScan=0;iScan<GetScanCount();iScan++)
      {
         pCamera = GetCameraSettings(iCam,iScan);
         if(pCamera == NULL)
            continue;
         if(pCamera->m_eDimension == eDir)
         {
            iFindScan = iScan;
            break;
   for (int iCam = 0; iCam < GetCameraCount(); ++iCam) {
      for (int iScan = 0; iScan < GetScanCount(); ++iScan) {
         CCameraSettings* pCamera = GetCameraSettings(iCam, iScan);
         if (pCamera != nullptr && pCamera->m_eDimension == eDir) {
            return iScan;
         }
      }
      if(iFindScan != -1)
         break;
   }
   return iFindScan;
   return -1;
}
CAMERA_SCANDIR CHardwareSettings::GetScanToScanDir(int iCam,int iScan)
CAMERA_SCANDIR CHardwareSettings::GetScanToScanDir(int iCam, int iScan)
{
   CCameraSettings *pCamera;
   pCamera = GetCameraSettings(iCam,iScan);
   if(pCamera == NULL)
   CCameraSettings *pCamera = GetCameraSettings(iCam, iScan);
   if (pCamera == nullptr) {
      return SCANGLASS_NONE;
   }
   return pCamera->m_eScanDir;
}
int   CHardwareSettings::GetCameraIndexToDimension(DimensionDir eDir)
{
   CCameraSettings *pCamera;
   int         iCam,iScan;
   if (m_pCameraSettings == nullptr) {
      return -1;
   }
   for(iCam=0;iCam<GetCameraCount();iCam++)
   {
      for(iScan=0;iScan<GetScanCount();iScan++)
      {
         pCamera = GetCameraSettings(iCam,iScan);
         if(pCamera == NULL)
            continue;
         if(pCamera->m_eDimension == eDir)
         {
   for (int iCam = 0; iCam < GetCameraCount(); ++iCam) {
      for (int iScan = 0; iScan < GetScanCount(); ++iScan) {
         CCameraSettings* pCamera = GetCameraSettings(iCam, iScan);
         if (pCamera && pCamera->m_eDimension == eDir) {
            return iCam;
         }
      }