THM1176InstrumentDriver 1.1
C++ API for Metrolab THM1176
Loading...
Searching...
No Matches
CTHM1176InitiateTest.cpp
Go to the documentation of this file.
1// Copyright (c) 2020 Metrolab Technology S.A., Geneva, Switzerland (www.metrolab.com)
2// See the included file LICENSE.txt for the licensing conditions.
3
7
8#include "gtest/gtest.h"
10#include <ctime>
11
12using namespace MTL::Instrument;
13using namespace MTL::Instrument::THM1176Types;
14
16class CTHM1176InitiateTest : public ::testing::Test
17{
18protected:
19 static THM1176_TEST_RESOURCE_MANAGER_CLASS * pResourceManager;
21
22 static void SetUpTestCase()
23 {
25 ASSERT_NE(nullptr, pResourceManager);
26 ASSERT_NE(nullptr, pTHM1176);
27 ASSERT_EQ(true, pTHM1176->IsOpen());
28 ASSERT_EQ(true, pTHM1176->Reset());
29 }
30
31 static void TearDownTestCase()
32 {
33 delete pTHM1176;
34 pTHM1176 = nullptr;
35 delete pResourceManager;
36 pResourceManager = nullptr;
37 }
38
39 virtual void SetUp()
40 {
41 ASSERT_NE(pTHM1176, nullptr);
42 ASSERT_EQ(true, pTHM1176->Reset());
43 }
44};
45THM1176_TEST_RESOURCE_MANAGER_CLASS * CTHM1176InitiateTest::pResourceManager = nullptr;
47
50{
51 // Set timed trigger with default count, default period.
52 sInputTrigger<sBoundedParm> l_TrigBounds;
53 ASSERT_EQ(true, pTHM1176->ParmTriggerInputGet(l_TrigBounds));
56 l_Trig.Count = l_TrigBounds.Count.Def;
57 l_Trig.Period_s = l_TrigBounds.Period_s.Def;
58 ASSERT_EQ(true, pTHM1176->ParmTriggerInputSet(l_Trig));
59
60 // Initiate once.
61 ASSERT_EQ(true, pTHM1176->Initiate());
62
63 // Check that we measured.
64 uOPERation l_OperationStatus;
65 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusEvent), l_OperationStatus.RawOPER));
66 EXPECT_EQ(1, l_OperationStatus.OPERation.MEASuring);
67
68 // Check that we are no longer measuring.
69 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusCondition), l_OperationStatus.RawOPER));
70 EXPECT_EQ(0, l_OperationStatus.OPERation.MEASuring);
71}
72
74TEST_F(CTHM1176InitiateTest, InitiateContinuous)
75{
76 // Set timed trigger with default count, default period.
77 sInputTrigger<sBoundedParm> l_TrigBounds;
78 ASSERT_EQ(true, pTHM1176->ParmTriggerInputGet(l_TrigBounds));
81 l_Trig.Count = l_TrigBounds.Count.Def;
82 l_Trig.Period_s = l_TrigBounds.Period_s.Def;
83 ASSERT_EQ(true, pTHM1176->ParmTriggerInputSet(l_Trig));
84
85 // Initiate continuously.
86 ASSERT_EQ(true, pTHM1176->Initiate(true));
87
88 // Check that we measured.
89 uOPERation l_OperationStatus;
90 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusEvent), l_OperationStatus.RawOPER));
91 EXPECT_EQ(1, l_OperationStatus.OPERation.MEASuring);
92
93 // Check that we are still measuring.
94 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusCondition), l_OperationStatus.RawOPER));
95 EXPECT_EQ(1, l_OperationStatus.OPERation.MEASuring);
96}
97
100{
101 // Set bus trigger.
102 sInputTrigger<sBoundedParm> l_TrigBounds;
103 ASSERT_EQ(true, pTHM1176->ParmTriggerInputGet(l_TrigBounds));
105 l_Trig.Source = kInputTrigSrcBus;
106 l_Trig.Count = 1;
107 ASSERT_EQ(true, pTHM1176->ParmTriggerInputSet(l_Trig));
108
109 // Initiate once.
110 ASSERT_EQ(true, pTHM1176->Initiate());
111
112 // Check that we are waiting for trigger.
113 uOPERation l_OperationStatus;
114 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusCondition), l_OperationStatus.RawOPER));
115 EXPECT_EQ(1, l_OperationStatus.OPERation.WaitingForTRIGger);
116
117 // Abort the measurement.
118 ASSERT_EQ(true, pTHM1176->Abort());
119
120 // Check that we are no longer waiting for trigger.
121 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusCondition), l_OperationStatus.RawOPER));
122 EXPECT_EQ(0, l_OperationStatus.OPERation.WaitingForTRIGger);
123
124 // Set timed trigger.
125 l_Trig.Source = kInputTrigSrcTimer;
126 l_Trig.Count = l_TrigBounds.Count.Max;
127 l_Trig.Period_s = l_TrigBounds.Period_s.Min;
128 ASSERT_EQ(true, pTHM1176->ParmTriggerInputSet(l_Trig));
129
130 // Initiate continuously.
131 ASSERT_EQ(true, pTHM1176->Initiate(true));
132
133 // Check that we are measuring.
134 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusCondition), l_OperationStatus.RawOPER));
135 EXPECT_EQ(1, l_OperationStatus.OPERation.MEASuring);
136
137 // Abort the measurement.
138 ASSERT_EQ(true, pTHM1176->Abort());
139
140 // Check that we are no longer measuring.
141 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusCondition), l_OperationStatus.RawOPER));
142 EXPECT_EQ(0, l_OperationStatus.OPERation.MEASuring);
143}
144
147{
148 // Set bus trigger.
149 sInputTrigger<sBoundedParm> l_TrigBounds;
150 ASSERT_EQ(true, pTHM1176->ParmTriggerInputGet(l_TrigBounds));
152 l_Trig.Source = kInputTrigSrcBus;
153 l_Trig.Count = 1;
154 ASSERT_EQ(true, pTHM1176->ParmTriggerInputSet(l_Trig));
155
156 // Initiate once.
157 ASSERT_EQ(true, pTHM1176->Initiate());
158
159 // Check that we are waiting for trigger.
160 uOPERation l_OperationStatus;
161 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusCondition), l_OperationStatus.RawOPER));
162 EXPECT_EQ(1, l_OperationStatus.OPERation.WaitingForTRIGger);
163
164 // Generate a trigger.
165 ASSERT_EQ(true, pTHM1176->SendBusTrigger());
166
167 // Check that we are no longer waiting for trigger.
168 ASSERT_EQ(true, pTHM1176->StatusGet(sStatusRegister(kStatusOperationStatusRegister, kStatusCondition), l_OperationStatus.RawOPER));
169 EXPECT_EQ(0, l_OperationStatus.OPERation.WaitingForTRIGger);
170}
TEST_F(CTHM1176InitiateTest, InitiateSingle)
Utility functions used to test THM1176 API.
bool ConnectToTHM1176(THM1176_TEST_RESOURCE_MANAGER_CLASS *&rpResourceManager, CTHM1176Instrument< THM1176_TEST_INSTRUMENT_CLASS, THM1176_TEST_RESOURCE_MANAGER_CLASS > *&rpTHM1176)
Connect to a THM1176.
Test THM1176 API: Initiate, Abort, Bus Trigger.
static CTHM1176Instrument< THM1176_TEST_INSTRUMENT_CLASS, THM1176_TEST_RESOURCE_MANAGER_CLASS > * pTHM1176
static THM1176_TEST_RESOURCE_MANAGER_CLASS * pResourceManager
THM1176 instrument class.
Definition THM1176.h:98
@ kStatusCondition
Condition register.
@ kStatusEvent
Event register.
@ kInputTrigSrcTimer
Timed trigger: start measurement at regular intervals.
@ kInputTrigSrcBus
Bus trigger: start measurement upon USB trigger message.
@ kStatusOperationStatusRegister
Operation Status Register.
ParmType< U16 > Count
Trigger count: take this many measurements before sending results.
eInputTriggerSource Source
Trigger source.
ParmType< F64 > Period_s
Trigger period, for timed trigger.
Complete identification of a SCPI status register.
U16 MEASuring
Measuring magnetic field strength.
Union to access the Operation Status Register as integer or bit fields.
struct MTL::Instrument::THM1176Types::uOPERation::sOPERation OPERation
Access the Operation Status Register as bit fields.
U16 RawOPER
Access the Operation Status Register as unsigned integer.