23 void CTHM1176InstrumentScanner::HandleError (QString Description,
30 l_Error.
Context = Context.toStdString();
34 l_ErrorList.push_back(l_Error);
35 emit UpdateErrorList(l_ErrorList);
41 m_pResourceManager = pResourceManager;
49 m_pResourceManager =
nullptr;
52 QThread::currentThread()->quit();
56 void CTHM1176InstrumentScanner::timerEvent (QTimerEvent * Event)
61 if (
nullptr != m_pResourceManager)
64 m_pResourceManager->FindResources(l_InstrumentList, THM1176_RSRC_FILTER);
66 if (m_InstrumentList != l_InstrumentList)
68 m_InstrumentList = l_InstrumentList;
69 emit UpdateInstrumentList(m_InstrumentList);
75 HandleError(
"Resource Manager not running", __func__);
85 void CTHM1176InstrumentController::HandleError (QString Description,
90 if (
nullptr != m_pTHM1176)
92 l_ErrorList = m_pTHM1176->CurrentErrorList();
93 m_pTHM1176->ClearErrorList();
100 l_Error.
Context = Context.toStdString();
103 l_ErrorList.insert(l_ErrorList.begin(), l_Error);
106 emit UpdateErrorList(l_ErrorList);
115 m_pResourceManager = pResourceManager;
122 if (
nullptr != m_pTHM1176)
124 m_pTHM1176->Disconnect();
129 m_pResourceManager =
nullptr;
130 m_pTHM1176 =
nullptr;
133 QThread::currentThread()->quit();
140 void CTHM1176InstrumentController::ClearInstrumentInfo (
void)
142 m_CurrentInstrument.clear();
144 m_Identification.clear();
147 m_DivisorList.clear();
148 m_AveragingParmBounds.clear();
149 m_TriggerParmBounds.clear();
150 m_RangeParmBounds.clear();
152 m_AveragingParms.clear();
153 m_TriggerParms.clear();
154 m_OutputSelect.clear();
157 m_RangeParms.clear();
162 void CTHM1176InstrumentController::GetInstrumentInfo (std::string Context)
165 if (!m_pTHM1176->GetIdentification(m_Identification))
169 if (!m_pTHM1176->GetAllRanges(m_RangeList))
173 MakeUnitsList(Context);
176 if (!m_pTHM1176->ParmAveragingGet(m_AveragingParmBounds))
180 if (!m_pTHM1176->ParmTriggerInputGet(m_TriggerParmBounds))
184 if (!m_pTHM1176->ParmRangeGet(m_RangeParmBounds))
188 m_AveragingParms.NoPoints = m_AveragingParmBounds.NoPoints.Val;
191 m_TriggerParms.Source = m_TriggerParmBounds.Source;
192 m_TriggerParms.Period_s = m_TriggerParmBounds.Period_s.Val;
193 m_TriggerParms.Count = m_TriggerParmBounds.Count.Val;
196 m_OutputSelect.clear();
197 m_OutputSelect.NoMeasurements = m_TriggerParmBounds.Count.Val;
200 if (!m_pTHM1176->ParmSleepGet(m_SleepParm))
204 GetCurrentUnits(Context);
207 m_RangeParms.Auto = m_RangeParmBounds.Auto;
208 m_RangeParms.Range = m_RangeParmBounds.Range.Val;
211 if (!m_pTHM1176->GetFormat(m_CommFormat))
216 void CTHM1176InstrumentController::GetInstrumentParameters (std::string Context)
219 if (!m_pTHM1176->ParmAveragingGet(m_AveragingParms))
223 if (!m_pTHM1176->ParmTriggerInputGet(m_TriggerParms))
227 m_OutputSelect.clear();
228 m_OutputSelect.NoMeasurements = m_TriggerParmBounds.Count.Val;
231 if (!m_pTHM1176->ParmSleepGet(m_SleepParm))
235 GetCurrentUnits(Context);
238 if (!m_pTHM1176->ParmRangeGet(m_RangeParms))
242 if (!m_pTHM1176->GetFormat(m_CommFormat))
247 void CTHM1176InstrumentController::PublishInstrumentInfo (
void)
249 emit UpdateCurrentInstrument(m_CurrentInstrument);
251 emit UpdateIdentification(m_Identification);
252 emit UpdateRangeList(m_RangeList);
253 emit UpdateUnitsList(m_UnitsList);
254 emit UpdateDivisorList(m_DivisorList);
255 emit UpdateAveragingParmBounds(m_AveragingParmBounds);
256 emit UpdateTriggerParmBounds(m_TriggerParmBounds);
257 emit UpdateRangeParmBounds(m_RangeParmBounds);
259 emit UpdateOutputSelect(m_OutputSelect);
260 emit UpdateSleepParm(m_SleepParm);
261 emit UpdateUnits(m_Units);
262 emit UpdateCommFormat(m_CommFormat);
266 void CTHM1176InstrumentController::PublishInstrumentParameters (
void)
268 emit UpdateAveragingParms(m_AveragingParms);
269 emit UpdateTriggerParms(m_TriggerParms);
270 emit UpdateOutputSelect(m_OutputSelect);
271 emit UpdateSleepParm(m_SleepParm);
272 emit UpdateUnits(m_Units);
273 emit UpdateRangeParms(m_RangeParms);
274 emit UpdateCommFormat(m_CommFormat);
281 m_InstrumentList = InstrumentList;
284 if (m_CurrentInstrument.empty() && m_pTHM1176 ==
nullptr)
return;
286 for (
auto l_pTHM1176ResourceID = InstrumentList.begin(); l_pTHM1176ResourceID < InstrumentList.end(); l_pTHM1176ResourceID++)
287 if (m_CurrentInstrument == *l_pTHM1176ResourceID)
return;
291 killTimer(m_TimerID);
295 if (m_pTHM1176 !=
nullptr)
296 m_pTHM1176->Disconnect();
297 m_pTHM1176 =
nullptr;
298 emit UpdateInstrumentPointer(m_pTHM1176);
302 emit UpdateOperatingMode(m_OperatingMode);
306 ClearInstrumentInfo();
307 PublishInstrumentInfo();
317 auto l_pResource = m_InstrumentList.begin();
318 for (; l_pResource < m_InstrumentList.end(); l_pResource++)
319 if (*l_pResource == CurrentInstrument)
break;
320 if (l_pResource >= m_InstrumentList.end())
324 if (CurrentInstrument == m_CurrentInstrument)
328 if (
nullptr != m_pTHM1176)
330 m_pTHM1176->Disconnect();
332 m_pTHM1176 =
nullptr;
333 emit UpdateInstrumentPointer(m_pTHM1176);
337 emit UpdateOperatingMode(m_OperatingMode);
341 ClearInstrumentInfo();
342 PublishInstrumentInfo();
346 if (
nullptr == m_pResourceManager)
351 if (
nullptr == m_pTHM1176)
353 emit UpdateInstrumentPointer(m_pTHM1176);
358 emit UpdateCurrentInstrument(m_CurrentInstrument);
373 GetInstrumentInfo(__func__);
374 m_CurrentInstrument = CurrentInstrument;
378 PublishInstrumentInfo();
382 emit UpdateOperatingMode(m_OperatingMode);
387 m_pTHM1176 =
nullptr;
390 ClearInstrumentInfo();
391 emit UpdateCurrentInstrument(m_CurrentInstrument);
408 if (m_pTHM1176 ==
nullptr)
410 else if (m_OperatingMode == OperatingMode)
418 killTimer(m_TimerID);
422 if (!m_pTHM1176->Abort())
427 m_OperatingMode = OperatingMode;
428 switch (m_OperatingMode)
431 if (
nullptr != m_pTHM1176)
434 if (!m_pTHM1176->Abort())
438 m_pTHM1176->Disconnect();
440 m_pTHM1176 =
nullptr;
441 emit UpdateInstrumentPointer(m_pTHM1176);
445 emit UpdateOperatingMode(m_OperatingMode);
449 ClearInstrumentInfo();
450 PublishInstrumentInfo();
456 if (!m_pTHM1176->Abort())
461 emit UpdateOperatingMode(m_OperatingMode);
464 if (!m_pTHM1176->Reset())
468 GetInstrumentParameters(__func__);
469 PublishInstrumentParameters();
473 emit UpdateOperatingMode(m_OperatingMode);
478 if (!m_pTHM1176->Abort())
483 emit UpdateOperatingMode(m_OperatingMode);
488 if (!m_pTHM1176->Abort())
493 emit UpdateOperatingMode(m_OperatingMode);
496 if (!m_pTHM1176->Initiate(
false))
500 switch (m_TriggerParms.Source)
513 if (!m_pTHM1176->MeasurementsGet(m_OutputSelect,
514 l_Measurement.
Bx, l_Measurement.
By, l_Measurement.
Bz,
516 &l_MeasurementConditions))
519 TranslateUnits(l_Measurement, l_Units);
528 l_Measurement.
Warnings = m_pTHM1176->CurrentErrorList();
530 emit UpdateMeasurement(l_Measurement);
534 emit UpdateOperatingMode(m_OperatingMode);
542 if (!m_pTHM1176->Abort())
547 emit UpdateOperatingMode(m_OperatingMode);
550 switch (m_TriggerParms.Source)
554 m_TimerID = startTimer(0);
560 if (!m_pTHM1176->Initiate(
true))
562 m_TimerID = startTimer(0);
568 if (!m_pTHM1176->Initiate(
false))
576 if (!m_pTHM1176->Abort())
581 emit UpdateOperatingMode(m_OperatingMode);
584 if (!m_pTHM1176->CalibrateZeroOffset(m_CalibrationOverride))
589 emit UpdateOperatingMode(m_OperatingMode);
594 if (!m_pTHM1176->Abort())
599 emit UpdateOperatingMode(m_OperatingMode);
602 if (!m_pTHM1176->RestoreZeroOffset())
607 emit UpdateOperatingMode(m_OperatingMode);
617 killTimer(m_TimerID);
623 emit UpdateOperatingMode(m_OperatingMode);
633 if (m_pTHM1176 ==
nullptr ||
636 m_TriggerCount >= m_TriggerParms.Count)
640 if (!m_pTHM1176->SendBusTrigger())
644 if (++m_TriggerCount >= m_TriggerParms.Count)
650 if (!m_pTHM1176->MeasurementsGet(m_OutputSelect,
651 l_Measurement.
Bx, l_Measurement.
By, l_Measurement.
Bz,
653 &l_MeasurementConditions))
656 TranslateUnits(l_Measurement, l_Units);
665 l_Measurement.
Warnings = m_pTHM1176->CurrentErrorList();
667 emit UpdateMeasurement(l_Measurement);
673 if (!m_pTHM1176->Initiate(
false))
680 emit UpdateOperatingMode(m_OperatingMode);
693 void CTHM1176InstrumentController::timerEvent (QTimerEvent * Event)
702 !m_pTHM1176->Initiate(
false))
709 if (!m_pTHM1176->MeasurementsGet(m_OutputSelect,
710 l_Measurement.
Bx, l_Measurement.
By, l_Measurement.
Bz,
712 &l_MeasurementConditions))
715 TranslateUnits(l_Measurement, l_Units);
724 l_Measurement.
Warnings = m_pTHM1176->CurrentErrorList();
726 emit UpdateMeasurement(l_Measurement);
737 void CTHM1176InstrumentController::MakeUnitsList (std::string Context)
741 if (!m_pTHM1176->GetAllUnits(l_UnitsList))
745 for (
auto l_pUnits = l_UnitsList.begin(); l_pUnits < l_UnitsList.end(); l_pUnits++)
747 m_UnitsList.push_back(
static_cast<eTHM1176Units>(*l_pUnits));
750 if (!m_pTHM1176->GetDivisor(*l_pUnits, l_Divisor))
752 m_DivisorList.push_back(l_Divisor);
756 F32 l_FloatDivisor = m_DivisorList[0] * MU0;
757 if (l_FloatDivisor >= 1. && l_FloatDivisor <= 65535.)
759 m_UnitsList.push_back(
kApm);
760 m_DivisorList.push_back(
static_cast<U32>(l_FloatDivisor + 0.5));
762 l_FloatDivisor = m_DivisorList[0] * MU0 * 1000.;
763 if (l_FloatDivisor >= 1. && l_FloatDivisor <= 65535.)
765 m_UnitsList.push_back(
kkApm);
766 m_DivisorList.push_back(
static_cast<U32>(l_FloatDivisor + 0.5));
768 l_FloatDivisor = m_DivisorList[0] * MU0 / 1000;
769 if (l_FloatDivisor >= 1. && l_FloatDivisor <= 65535.)
771 m_UnitsList.push_back(
kmApm);
772 m_DivisorList.push_back(
static_cast<U32>(l_FloatDivisor + 0.5));
776 m_UnitsList.push_back(
kADC);
777 m_DivisorList.push_back(1);
781 void CTHM1176InstrumentController::GetCurrentUnits (std::string Context)
784 bool l_UseCalibration;
785 if (!m_pTHM1176->ParmUnitsGet(l_Units) ||
786 !m_pTHM1176->ParmUseCalibrationGet(l_UseCalibration))
789 if (!l_UseCalibration)
794 void CTHM1176InstrumentController::TranslateUnits (
CMeasurement & Measurement,
805 l_Multiplier = 1.f / MU0;
808 l_Multiplier = 0.001f / MU0;
811 l_Multiplier = 1000.f / MU0;
815 for (
size_t i = 0; i < Measurement.
Bx.size(); i++)
816 Measurement.
Bx[i] *= l_Multiplier;
817 for (
size_t i = 0; i < Measurement.
By.size(); i++)
818 Measurement.
By[i] *= l_Multiplier;
819 for (
size_t i = 0; i < Measurement.
Bz.size(); i++)
820 Measurement.
Bz[i] *= l_Multiplier;
821 Measurement.
Units = m_Units;
839 if (m_AveragingParms != AveragingParms)
841 if (m_pTHM1176 ==
nullptr ||
842 !m_pTHM1176->ParmAveragingSet(AveragingParms))
844 HandleError(
"Cannot change averaging parameters", __func__);
845 if(m_pTHM1176 ==
nullptr ||
846 !m_pTHM1176->ParmAveragingGet(m_AveragingParms))
847 HandleError(
"Cannot retrieve averaging parameters", __func__);
851 m_AveragingParms = AveragingParms;
857 if (0 == m_TimerID ||
858 !m_pTHM1176->Initiate(
true))
860 HandleError(
"Error restarting continous measurements", __func__);
862 emit UpdateOperatingMode(m_OperatingMode);
867 emit UpdateAveragingParms(m_AveragingParms);
873 if (m_TriggerParms != TriggerParms)
875 if (m_pTHM1176 ==
nullptr ||
876 !m_pTHM1176->ParmTriggerInputSet(TriggerParms))
878 HandleError(
"Cannot change trigger parameters", __func__);
879 if (m_pTHM1176 ==
nullptr ||
880 !m_pTHM1176->ParmTriggerInputGet(m_TriggerParms))
881 HandleError(
"Cannot retrieve trigger parameters", __func__);
885 m_TriggerParms = TriggerParms;
891 if (0 == m_TimerID ||
892 !m_pTHM1176->Initiate(
true))
894 HandleError(
"Error restarting continous measurements", __func__);
896 emit UpdateOperatingMode(m_OperatingMode);
901 emit UpdateTriggerParms(m_TriggerParms);
907 if (m_OutputSelect != OutputSelect)
909 if (m_pTHM1176 ==
nullptr)
910 HandleError(
"Cannot change output selection", __func__);
912 m_OutputSelect = OutputSelect;
914 emit UpdateOutputSelect(m_OutputSelect);
920 if (m_SleepParm != SleepParm)
922 if (m_pTHM1176 ==
nullptr ||
923 !m_pTHM1176->ParmSleepSet(SleepParm))
925 HandleError(
"Cannot change sleep parameter", __func__);
926 if (m_pTHM1176 ==
nullptr ||
927 !m_pTHM1176->ParmSleepGet(m_SleepParm))
928 HandleError(
"Cannot retrieve sleep parameter", __func__);
931 m_SleepParm = SleepParm;
933 emit UpdateSleepParm(m_SleepParm);
939 if (m_Units != Units)
943 if (m_pTHM1176 ==
nullptr)
951 if (!m_pTHM1176->ParmUseCalibrationSet(
true) ||
956 if (!m_pTHM1176->ParmUseCalibrationSet(
false))
961 if (!m_pTHM1176->ParmUseCalibrationSet(
true) ||
962 !m_pTHM1176->ParmUnitsSet(l_Units))
970 HandleError(
"Cannot change units", __func__);
973 emit UpdateUnits(m_Units);
979 if (m_RangeParms != RangeParms)
981 if (m_pTHM1176 ==
nullptr ||
982 !m_pTHM1176->ParmRangeSet(RangeParms))
984 HandleError(
"Cannot change range parameters", __func__);
985 if (m_pTHM1176 ==
nullptr ||
986 !m_pTHM1176->ParmRangeGet(m_RangeParms))
987 HandleError(
"Cannot retrieve range parameters", __func__);
990 m_RangeParms = RangeParms;
992 emit UpdateRangeParms(m_RangeParms);
998 if (m_CommFormat != CommFormat)
1000 if (m_pTHM1176 ==
nullptr ||
1001 !m_pTHM1176->SetFormat(CommFormat))
1003 HandleError(
"Cannot change communication format", __func__);
1004 if (m_pTHM1176 ==
nullptr ||
1005 !m_pTHM1176->GetFormat(m_CommFormat))
1006 HandleError(
"Cannot retrieve communication format", __func__);
1009 m_CommFormat = CommFormat;
1011 emit UpdateCommFormat(m_CommFormat);
1017 m_CalibrationOverride = Override;
1026 void CTHM1176InstrumentManager::HandleError (QString Description,
1033 l_Error.
Context = Context.toStdString();
1037 l_ErrorList.push_back(l_Error);
1038 emit UpdateErrorList(l_ErrorList);
1059 this, &CTHM1176InstrumentManager::UpdateInstrumentList);
1061 this, &CTHM1176InstrumentManager::UpdateErrorList);
1079 Qt::BlockingQueuedConnection);
1101 this, &CTHM1176InstrumentManager::UpdateCurrentInstrument);
1103 this, &CTHM1176InstrumentManager::UpdateInstrumentPointer);
1105 this, &CTHM1176InstrumentManager::UpdateOperatingMode);
1107 this, &CTHM1176InstrumentManager::UpdateMeasurement);
1109 this, &CTHM1176InstrumentManager::UpdateErrorList);
1112 this, &CTHM1176InstrumentManager::UpdateIdentification);
1114 this, &CTHM1176InstrumentManager::UpdateRangeList);
1116 this, &CTHM1176InstrumentManager::UpdateUnitsList);
1118 this, &CTHM1176InstrumentManager::UpdateDivisorList);
1120 this, &CTHM1176InstrumentManager::UpdateAveragingParmBounds);
1122 this, &CTHM1176InstrumentManager::UpdateTriggerParmBounds);
1124 this, &CTHM1176InstrumentManager::UpdateRangeParmBounds);
1127 this, &CTHM1176InstrumentManager::UpdateAveragingParms);
1129 this, &CTHM1176InstrumentManager::UpdateTriggerParms);
1131 this, &CTHM1176InstrumentManager::UpdateOutputSelect);
1133 this, &CTHM1176InstrumentManager::UpdateSleepParm);
1135 this, &CTHM1176InstrumentManager::UpdateUnits);
1137 this, &CTHM1176InstrumentManager::UpdateRangeParms);
1139 this, &CTHM1176InstrumentManager::UpdateCommFormat);
1142 m_pResourceManager =
new THM1176_RSRC_MGR_CLS;
1143 if (
nullptr == m_pResourceManager || !m_pResourceManager->Initialize())
1144 HandleError(
"Cannot initialize Resource Manager", __func__);
1147 m_pInstrumentScanner->moveToThread(&m_InstrumentScanThread);
1148 m_InstrumentScanThread.start();
1151 emit StartInstrumentScanner(m_pResourceManager);
1154 m_pInstrumentController->moveToThread(&m_InstrumentControlThread);
1155 m_InstrumentControlThread.start();
1158 connect(&m_InstrumentControlThread, &QThread::finished,
1159 m_pInstrumentController, &CTHM1176InstrumentController::deleteLater);
1160 connect(&m_InstrumentControlThread, &QThread::finished,
1162 connect(&m_InstrumentScanThread, &QThread::finished,
1163 m_pInstrumentScanner, &CTHM1176InstrumentScanner::deleteLater);
1166 emit StartInstrumentController(m_pResourceManager);
1174 emit StopInstrumentController();
1177 if (!m_InstrumentControlThread.wait())
1178 HandleError(
"Cannot quit Instrument Controller thread", __func__);
1181 m_InstrumentScanThread.quit();
1182 if (!m_InstrumentScanThread.wait())
1183 HandleError(
"Cannot quit Instrument Scanner thread", __func__);
1186 delete m_pResourceManager;
1189 m_pResourceManager =
nullptr;
1190 m_pTHM1176 =
nullptr;
1191 m_pInstrumentScanner =
nullptr;
1192 m_pInstrumentController =
nullptr;
1199 void CTHM1176InstrumentManager::UpdateInstrumentList (
CResourceList InstrumentList)
1201 if (m_InstrumentList != InstrumentList)
1203 m_InstrumentList = InstrumentList;
1204 emit NotifyInstrumentList(m_InstrumentList);
1213 void CTHM1176InstrumentManager::UpdateCurrentInstrument (
tResourceName CurrentInstrument)
1216 if (m_CurrentInstrument != CurrentInstrument)
1218 m_CurrentInstrument = CurrentInstrument;
1219 emit NotifyCurrentInstrument(m_CurrentInstrument);
1227 m_pTHM1176 = pTHM1176;
1234 if (m_OperatingMode != OperatingMode)
1236 m_OperatingMode = OperatingMode;
1237 emit NotifyOperatingMode(m_OperatingMode);
1242 void CTHM1176InstrumentManager::UpdateMeasurement (
CMeasurement Measurement)
1245 m_Measurement = Measurement;
1246 emit NotifyMeasurement(m_Measurement);
1250 void CTHM1176InstrumentManager::UpdateErrorList (
CErrorList ErrorList)
1253 m_ErrorList = ErrorList;
1254 emit NotifyErrorList(m_ErrorList);
1259 void CTHM1176InstrumentManager::UpdateIdentification (
sIdentifier Identification)
1262 m_Identification = Identification;
1263 emit NotifyIdentification(m_Identification);
1267 void CTHM1176InstrumentManager::UpdateRangeList (
CFluxList RangeList)
1270 m_RangeList = RangeList;
1271 emit NotifyRangeList(m_RangeList);
1278 m_UnitsList = UnitsList;
1279 emit NotifyUnitsList(m_UnitsList);
1283 void CTHM1176InstrumentManager::UpdateDivisorList (
CDivisorList DivisorList)
1286 m_DivisorList = DivisorList;
1287 emit NotifyDivisorList(m_DivisorList);
1294 m_AveragingParmBounds = AveragingParmBounds;
1295 emit NotifyAveragingParmBounds(m_AveragingParmBounds);
1298 m_AveragingParms.NoPoints = m_AveragingParmBounds.NoPoints.Val;
1299 emit NotifyAveragingParms(m_AveragingParms);
1306 m_TriggerParmBounds = TriggerParmBounds;
1307 emit NotifyTriggerParmBounds(m_TriggerParmBounds);
1310 m_TriggerParms.Source = TriggerParmBounds.
Source;
1311 m_TriggerParms.Period_s = TriggerParmBounds.
Period_s.
Val;
1312 m_TriggerParms.Count = TriggerParmBounds.
Count.
Val;
1313 emit NotifyTriggerParms(m_TriggerParms);
1320 m_RangeParmBounds = RangeParmBounds;
1321 emit NotifyRangeParmBounds(m_RangeParmBounds);
1324 m_RangeParms.Auto = m_RangeParmBounds.Auto;
1325 m_RangeParms.Range = m_RangeParmBounds.Range.Val;
1326 emit NotifyRangeParms(m_RangeParms);
1331 void CTHM1176InstrumentManager::UpdateAveragingParms (
sAveraging<uParm> AveragingParms)
1335 if (m_AveragingParms != AveragingParms)
1337 m_AveragingParms = AveragingParms;
1338 emit NotifyAveragingParms(m_AveragingParms);
1347 if (m_TriggerParms != TriggerParms)
1349 m_TriggerParms = TriggerParms;
1350 emit NotifyTriggerParms(m_TriggerParms);
1360 m_OutputSelect = OutputSelect;
1361 emit NotifyOutputSelect(m_OutputSelect);
1366 void CTHM1176InstrumentManager::UpdateSleepParm (
bool SleepParm)
1371 m_SleepParm = SleepParm;
1372 emit NotifySleepParm(m_SleepParm);
1377 void CTHM1176InstrumentManager::UpdateUnits (
eTHM1176Units Units)
1383 emit NotifyUnits(m_Units);
1388 void CTHM1176InstrumentManager::UpdateRangeParms (
sRange<uParm> RangeParms)
1392 if (m_RangeParms != RangeParms)
1394 m_RangeParms = RangeParms;
1395 emit NotifyRangeParms(m_RangeParms);
1405 m_CommFormat = CommFormat;
1406 emit NotifyCommFormat(m_CommFormat);
1418 return m_InstrumentList;
1424 return m_CurrentInstrument;
1430 return m_OperatingMode;
1436 if (m_pTHM1176 ==
nullptr)
1437 HandleError(
"Instrument not connected", __func__);
1438 return m_Measurement;
1452 if (m_pTHM1176 ==
nullptr)
1453 HandleError(
"Instrument not connected", __func__);
1454 return m_Identification;
1460 if (m_pTHM1176 ==
nullptr)
1461 HandleError(
"Instrument not connected", __func__);
1468 if (m_pTHM1176 ==
nullptr)
1469 HandleError(
"Instrument not connected", __func__);
1476 if (m_pTHM1176 ==
nullptr)
1477 HandleError(
"Instrument not connected", __func__);
1478 return m_DivisorList;
1484 if (m_pTHM1176 ==
nullptr)
1485 HandleError(
"Instrument not connected", __func__);
1486 return m_AveragingParmBounds;
1492 if (m_pTHM1176 ==
nullptr)
1493 HandleError(
"Instrument not connected", __func__);
1494 return m_TriggerParmBounds;
1500 if (m_pTHM1176 ==
nullptr)
1501 HandleError(
"Instrument not connected", __func__);
1502 return m_RangeParmBounds;
1510 if (m_pTHM1176 ==
nullptr)
1511 HandleError(
"Instrument not connected", __func__);
1512 return m_AveragingParms;
1518 if (m_pTHM1176 ==
nullptr)
1519 HandleError(
"Instrument not connected", __func__);
1520 return m_TriggerParms;
1526 if (m_pTHM1176 ==
nullptr)
1527 HandleError(
"Instrument not connected", __func__);
1528 return m_OutputSelect;
1534 if (m_pTHM1176 ==
nullptr)
1535 HandleError(
"Instrument not connected", __func__);
1542 if (m_pTHM1176 ==
nullptr)
1543 HandleError(
"Instrument not connected", __func__);
1550 if (m_pTHM1176 ==
nullptr)
1551 HandleError(
"Instrument not connected", __func__);
1552 return m_RangeParms;
1558 if (m_pTHM1176 ==
nullptr)
1559 HandleError(
"Instrument not connected", __func__);
1560 return m_CommFormat;
1566 if (m_pTHM1176 ==
nullptr)
1568 HandleError(
"Instrument not connected", __func__);
1573 return m_pTHM1176->GetImmediateMeasurementPeriod(rAvg, rPeriod);
1579 if (m_pTHM1176 ==
nullptr)
1581 HandleError(
"Instrument not connected", __func__);
1586 std::string l_SManufacturingDate;
1587 std::time_t l_ManufacturingDate;
1588 std::string l_SCalibrationDate;
1589 std::time_t l_CalibrationDate;
1590 bool l_Success = m_pTHM1176->ReadInformationDates(l_SManufacturingDate, l_ManufacturingDate, l_SCalibrationDate, l_CalibrationDate);
1594 rManufacturingDate = QDateTime::fromSecsSinceEpoch(l_ManufacturingDate);
1595 rCalibrationDate = QDateTime::fromSecsSinceEpoch(l_CalibrationDate);
1610 if (CurrentInstrument == m_CurrentInstrument)
1613 auto l_pResource = m_InstrumentList.begin();
1614 for (; l_pResource < m_InstrumentList.end(); l_pResource++)
1615 if (*l_pResource == CurrentInstrument)
break;
1616 if (l_pResource >= m_InstrumentList.end())
1618 HandleError(
"Resource name not in resource list", __func__);
1622 if (m_pTHM1176 !=
nullptr &&
1624 m_Identification.FirmwareVersion.Major >= THM1176_MIN_VERSION_WITH_ABORTREAD &&
1625 !m_pTHM1176->AbortRead())
1626 HandleError(
"Cannot abort read", __func__);
1628 emit RelayCurrentInstrument(CurrentInstrument);
1634 if (m_pTHM1176 ==
nullptr)
1636 HandleError(
"Instrument not connected", __func__);
1640 if (OperatingMode == m_OperatingMode)
return;
1643 m_Identification.FirmwareVersion.Major >= THM1176_MIN_VERSION_WITH_ABORTREAD &&
1644 !m_pTHM1176->AbortRead())
1645 HandleError(
"Cannot abort read", __func__);
1647 emit RelayOperatingMode(OperatingMode);
1654 if (m_pTHM1176 ==
nullptr)
1656 HandleError(
"Instrument not connected", __func__);
1660 if (AveragingParms == m_AveragingParms)
return;
1662 if (AveragingParms.
NoPoints < m_AveragingParmBounds.NoPoints.Min ||
1663 AveragingParms.
NoPoints > m_AveragingParmBounds.NoPoints.Max)
1665 HandleError(
"Averaging parameter out of range", __func__);
1670 m_Identification.FirmwareVersion.Major >= THM1176_MIN_VERSION_WITH_ABORTREAD &&
1671 !m_pTHM1176->AbortRead())
1672 HandleError(
"Cannot abort read", __func__);
1674 emit RelayAveragingParms(AveragingParms);
1680 if (m_pTHM1176 ==
nullptr)
1682 HandleError(
"Instrument not connected", __func__);
1686 if (TriggerParms == m_TriggerParms)
return;
1688 if (TriggerParms.
Count < m_TriggerParmBounds.Count.Min ||
1689 TriggerParms.
Count > m_TriggerParmBounds.Count.Max ||
1691 (TriggerParms.
Period_s < m_TriggerParmBounds.Period_s.Min ||
1692 TriggerParms.
Period_s > m_TriggerParmBounds.Period_s.Max)))
1694 HandleError(
"Trigger parameter out of bounds", __func__);
1699 m_Identification.FirmwareVersion.Major >= THM1176_MIN_VERSION_WITH_ABORTREAD &&
1700 !m_pTHM1176->AbortRead())
1701 HandleError(
"Cannot abort read", __func__);
1703 emit RelayTriggerParms(TriggerParms);
1709 if (m_pTHM1176 ==
nullptr)
1711 HandleError(
"Instrument not connected", __func__);
1715 if (OutputSelect == m_OutputSelect)
return;
1720 HandleError(
"Invalid measurement count", __func__);
1725 m_Identification.FirmwareVersion.Major >= THM1176_MIN_VERSION_WITH_ABORTREAD &&
1726 !m_pTHM1176->AbortRead())
1727 HandleError(
"Cannot abort read", __func__);
1729 emit RelayOutputSelect(OutputSelect);
1735 if (m_pTHM1176 ==
nullptr)
1737 HandleError(
"Instrument not connected", __func__);
1741 if (SleepParm == m_SleepParm)
return;
1744 m_Identification.FirmwareVersion.Major >= THM1176_MIN_VERSION_WITH_ABORTREAD &&
1745 !m_pTHM1176->AbortRead())
1746 HandleError(
"Cannot abort read", __func__);
1748 emit RelaySleepParm(SleepParm);
1754 if (m_pTHM1176 ==
nullptr)
1756 HandleError(
"Instrument not connected", __func__);
1760 if (Units == m_Units)
return;
1762 auto l_pUnits = m_UnitsList.begin();
1763 for (; l_pUnits < m_UnitsList.end(); l_pUnits++)
1764 if (*l_pUnits == Units)
break;
1765 if (l_pUnits >= m_UnitsList.end())
1767 HandleError(
"Invalid Units", __func__);
1772 m_Identification.FirmwareVersion.Major >= THM1176_MIN_VERSION_WITH_ABORTREAD &&
1773 !m_pTHM1176->AbortRead())
1774 HandleError(
"Cannot abort read", __func__);
1776 emit RelayUnits(Units);
1782 if (m_pTHM1176 ==
nullptr)
1784 HandleError(
"Instrument not connected", __func__);
1788 if (RangeParms == m_RangeParms)
return;
1790 tFlux l_Tolerance = 0.001f * RangeParms.
Range;
1791 if (!RangeParms.
Auto)
1793 auto l_pRange = m_RangeList.begin();
1794 for (; l_pRange < m_RangeList.end(); l_pRange++)
1795 if (abs(*l_pRange - RangeParms.
Range) < l_Tolerance)
break;
1796 if (l_pRange >= m_RangeList.end())
1798 HandleError(
"Invalid range selection", __func__);
1804 m_Identification.FirmwareVersion.Major >= THM1176_MIN_VERSION_WITH_ABORTREAD &&
1805 !m_pTHM1176->AbortRead())
1806 HandleError(
"Cannot abort read", __func__);
1808 emit RelayRangeParms(RangeParms);
1814 if (m_pTHM1176 ==
nullptr)
1816 HandleError(
"Instrument not connected", __func__);
1820 if (CommFormat == m_CommFormat)
return;
1823 m_Identification.FirmwareVersion.Major >= THM1176_MIN_VERSION_WITH_ABORTREAD &&
1824 !m_pTHM1176->AbortRead())
1825 HandleError(
"Cannot abort read", __func__);
1827 emit RelayCommFormat(CommFormat);