Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 

345 righe
8.9 KiB

  1. #include "CableTestBench.h"
  2. #include <QDateTime>
  3. #include "CableTestBenchDefs.h"
  4. #include <QFileInfo>
  5. #include <QProcess>
  6. #include "TestBenchVersion.h"
  7. #include <QMessageBox>
  8. CCableTestBench::CCableTestBench(QObject *parent) :
  9. QObject(parent),
  10. mActualCable(CConnectorDefs::UNKNOWN_CONNECTOR_TYPE,&mIOInterface)
  11. {
  12. w = new MainWindow(0,this);
  13. w->setWindowTitle(QString("Cablotron %1").arg(TEST_BENCH_VERSION));
  14. }
  15. CCableTestBench::~CCableTestBench()
  16. {
  17. delete w;
  18. //mIOInterface.CloseIOModules();
  19. }
  20. int CCableTestBench::Start()
  21. {
  22. // w->showMaximized();
  23. w->show();
  24. mMainPageHandle = w->mMainPage;
  25. mVisualInspPageHandle = w->mVisualInspPage;
  26. mCableTestPageHandle = w->mCableTestPage;
  27. mOptionsPageHandle = w->mOptionsPage;
  28. if(mTestBenchOptions.LoadSettingFromFile() == RET_OK)
  29. {
  30. mOptionsPageHandle->SetCurrentOptions(&mTestBenchOptions);
  31. }
  32. {
  33. mOptionsPageHandle->GetCurrentOptions(&mTestBenchOptions);
  34. }
  35. mCableTestEngine.InitCableTestEngine(this,mTestBenchOptions.mPinHoldTime);
  36. if(mIOInterface.OpenIOModules(mTestBenchOptions.mIOModuleIPAddress) == RET_ERROR)
  37. {
  38. mCableTestReport.AddLogEntry("Impossible de communiquer avec le module d'I/O.\nVérifier la connexion ou l'adresse IP.");
  39. QMessageBox::critical(0,"Erreur de connexion","Impossible de communiquer avec le module d'I/O.\nVérifier la connexion ou l'adresse IP.");
  40. }
  41. mCableTestPageHandle->mGuiRefreshTimer.start();
  42. connect(&mCableTestReport,SIGNAL(NewTestLogEntry(QString)),mCableTestPageHandle,SLOT(AddTestLogEntry(QString)));
  43. return 1;
  44. }
  45. CCable * CCableTestBench::GetActualCable()
  46. {
  47. return &mActualCable;
  48. }
  49. CTestReport *CCableTestBench::GetTestReportHandle()
  50. {
  51. return &mCableTestReport;
  52. }
  53. quint8 CCableTestBench::DecToBCDByte(const quint8 byte)
  54. {
  55. quint8 out = 0;
  56. out = ((byte/10) << 4) + (byte%10);
  57. return out;
  58. }
  59. quint16 CCableTestBench::DecToBCDWord(const quint16 word)
  60. {
  61. quint16 out = 0;
  62. quint16 temp = 0;
  63. out = word % 10;
  64. temp = (((word /10) % 10) << 4);
  65. out += temp;
  66. temp = (((word / 100) % 10) << 8);
  67. out += temp;
  68. temp = (((word / 1000) % 10) << 12);
  69. out += temp;
  70. return out;
  71. }
  72. int CCableTestBench::ExecVisualInspectionRequest()
  73. {
  74. qDebug("Exec Visual Inspection clicked");
  75. // mCableTestPageHandle->SetVisualInspectionDone(true);
  76. w->ShowInspectVisuellePage();
  77. return RET_OK;
  78. }
  79. CCable* CCableTestBench::SetSelectedConnector(CConnectorDefs::eConnectorType ConType)
  80. {
  81. if(mActualCable.DefineCableByInputConnector(ConType) == RET_ERROR)
  82. {
  83. return 0;
  84. }
  85. CheckIfReadyForTesting();
  86. return &mActualCable;
  87. }
  88. int CCableTestBench::VisualInspectionQuitRequest()
  89. {
  90. mVisualInspPageHandle->FillVisualInspectionResultReport(mCableTestReport.GetInspectionResult());
  91. if(mCableTestReport.GetInspectionResult()->IsVisualInspectionResultComplete() == true)
  92. {
  93. mCableTestPageHandle->SetVisualInspectionDone(true);
  94. }
  95. else
  96. {
  97. mCableTestPageHandle->SetVisualInspectionDone(false);
  98. }
  99. w->ShowCableTestPage();
  100. CheckIfReadyForTesting();
  101. return RET_OK;
  102. }
  103. int CCableTestBench::StartPauseAutomaticTestRequest()
  104. {
  105. if(mCableTestEngine.GetTestEngineCurrentMode() == CCableTestEngine::CABLE_TEST_STBY_MODE)
  106. {
  107. mCableTestPageHandle->FillReportCableParametersData(mCableTestReport.GetReportCableParameters());
  108. mCableTestReport.GetReportCableParameters()->SetCableType(CConnectorDefs::GetConnectorDescription(mActualCable.GetInputConnector()->GetConnectorType()),
  109. CConnectorDefs::GetConnectorDescription(mActualCable.GetOutputConnector()->GetConnectorType()));
  110. mCableTestReport.GetAutomatedTestReport()->SetPinCount(mActualCable.GetOutputConnector()->GetPinCount());
  111. mCableTestEngine.StartAutomatedTest();
  112. return RET_OK;
  113. }
  114. if(mCableTestEngine.GetTestEngineCurrentMode() == CCableTestEngine::CABLE_AUTO_TEST_RUNNING_MODE)
  115. {
  116. mCableTestEngine.PauseAutomatedTest();
  117. return RET_OK;
  118. }
  119. if(mCableTestEngine.GetTestEngineCurrentMode() == CCableTestEngine::CABLE_AUTO_TEST_PAUSED_MODE)
  120. {
  121. mCableTestEngine.ResumeAutomatedTest();
  122. return RET_OK;
  123. }
  124. else //Button shouldn't be used in manual mode...
  125. {
  126. return RET_ERROR;
  127. }
  128. return RET_OK;
  129. }
  130. int CCableTestBench::StartStopManualTestRequest()
  131. {
  132. if(mCableTestEngine.GetTestEngineCurrentMode() == CCableTestEngine::CABLE_TEST_STBY_MODE)
  133. {
  134. mCableTestEngine.StartManualTest();
  135. return RET_OK;
  136. }
  137. if(mCableTestEngine.GetTestEngineCurrentMode() == CCableTestEngine::CABLE_TEST_MANUAL_MODE)
  138. {
  139. mCableTestEngine.StopManualTest();
  140. return RET_OK;
  141. }
  142. else //Button shouldn't be used in Automatic mode...
  143. {
  144. return RET_ERROR;
  145. }
  146. }
  147. int CCableTestBench::NewCableRequest()
  148. {
  149. mActualCable.DefineCableByInputConnector(CConnectorDefs::UNKNOWN_CONNECTOR_TYPE);
  150. mVisualInspPageHandle->ResetForm();
  151. mCableTestPageHandle->ResetCable();
  152. mCableTestPageHandle->DisableStartTestBtn();
  153. mCableTestReport.CreateNewTestReport();
  154. return RET_OK;
  155. }
  156. int CCableTestBench::CheckIfReadyForTesting()
  157. {
  158. bool VisualInspectionDone = false, ConnectorSelected = false, CableConfigured = false;
  159. mVisualInspPageHandle->FillVisualInspectionResultReport(mCableTestReport.GetInspectionResult());
  160. if(mCableTestReport.GetInspectionResult()->IsVisualInspectionResultComplete() == true)
  161. {
  162. VisualInspectionDone = true;
  163. }
  164. if(mTestBenchOptions.mIgnoreVisualInspection)
  165. {
  166. VisualInspectionDone = true;
  167. }
  168. if(mCableTestPageHandle->IsCableConfigured())
  169. {
  170. CableConfigured = true;
  171. mCableTestPageHandle->SetCableConfigureStep(true);
  172. }
  173. else
  174. {
  175. mCableTestPageHandle->SetCableConfigureStep(false);
  176. }
  177. ConnectorSelected = mActualCable.IsCableDefined();
  178. if(ConnectorSelected)
  179. {
  180. mCableTestPageHandle->SetConnectorSelStep();
  181. }
  182. else
  183. {
  184. mCableTestPageHandle->SetConnectorSelStep(false);
  185. }
  186. if(VisualInspectionDone && ConnectorSelected && CableConfigured)
  187. {
  188. mCableTestPageHandle->EnableStartTestBtn();
  189. }
  190. else
  191. {
  192. mCableTestPageHandle->DisableStartTestBtn();
  193. }
  194. return RET_OK;
  195. }
  196. int CCableTestBench::CableEngineModeChanged(CCableTestEngine::eCableTestEngineMode Mode)
  197. {
  198. switch(Mode)
  199. {
  200. case CCableTestEngine::CABLE_TEST_STBY_MODE:
  201. {
  202. mCableTestPageHandle->CableTestEnded();
  203. if(mCableTestReport.IsAutoTestReportReady())
  204. {
  205. SaveReportRequest();
  206. mCableTestPageHandle->EnableOpenReportBtn();
  207. if(mCableTestReport.GetGlobalAutoTestResult() == true)
  208. {
  209. mCableTestPageHandle->SetAutoTestResult("Succès!",Qt::darkGreen);
  210. }
  211. else
  212. {
  213. mCableTestPageHandle->SetAutoTestResult("Échec",Qt::red);
  214. }
  215. }
  216. break;
  217. }
  218. case CCableTestEngine::CABLE_AUTO_TEST_RUNNING_MODE:
  219. {
  220. mCableTestPageHandle->CableAutomaticTestStarted();
  221. break;
  222. }
  223. case CCableTestEngine::CABLE_AUTO_TEST_PAUSED_MODE:
  224. {
  225. mCableTestPageHandle->CableAutomaticTestPaused();
  226. break;
  227. }
  228. case CCableTestEngine::CABLE_TEST_MANUAL_MODE:
  229. {
  230. mCableTestPageHandle->CableManualTestStarted();
  231. break;
  232. }
  233. }
  234. return RET_OK;
  235. }
  236. int CCableTestBench::ResetAutomaticTestRequest()
  237. {
  238. return mCableTestEngine.StopAutomatedTest();
  239. }
  240. int CCableTestBench::ManualPinToggleRequest(int ConnectorPinNbr)
  241. {
  242. return mCableTestEngine.ManualPinToggle(ConnectorPinNbr);
  243. }
  244. int CCableTestBench::RefreshConnectorsStateRequest()
  245. {
  246. mCableTestPageHandle->SetInputConnectorState(mActualCable.GetInputConnector()->GetInputPinsStates());
  247. mCableTestPageHandle->SetOutputConnectorState(mActualCable.GetOutputConnector()->GetOutputPinsStates());
  248. return RET_OK;
  249. }
  250. int CCableTestBench::SaveReportRequest()
  251. {
  252. return mCableTestReport.SaveReportToFile(&mTestBenchOptions);
  253. }
  254. int CCableTestBench::OpenReportRequest()
  255. {
  256. QString ReportFile = mCableTestReport.GetLastReportFileName();
  257. if(ReportFile.isEmpty())
  258. {
  259. return RET_ERROR;
  260. }
  261. QFileInfo FileInfo(ReportFile);
  262. QString Command =FileInfo.absoluteFilePath();
  263. Command.prepend("notepad.exe ");
  264. QProcess *process = new QProcess;
  265. process->start(Command);
  266. return RET_OK;
  267. }
  268. int CCableTestBench::CableConfigChanged()
  269. {
  270. CheckIfReadyForTesting();
  271. return RET_OK;
  272. }
  273. int CCableTestBench::TestBenchOptionsChanged()
  274. {
  275. mOptionsPageHandle->GetCurrentOptions(&mTestBenchOptions);
  276. mTestBenchOptions.SaveSettingsToFile();
  277. mCableTestEngine.SetPinHoldTime(mTestBenchOptions.mPinHoldTime);
  278. return RET_OK;
  279. }