Skip to content

Commit f753513

Browse files
committed
Fix gate line and active state management in PhaseDetector
1 parent 4ce31bf commit f753513

File tree

2 files changed

+30
-3
lines changed

2 files changed

+30
-3
lines changed

Plugins/PhaseDetector/PhaseDetector.cpp

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,10 @@ PhaseDetectorSettings::PhaseDetectorSettings() : samplesSinceTrigger (0),
3333
currentPhase (NO_PHASE),
3434
triggerChannel (0),
3535
outputLine (0),
36-
gateLine (0)
36+
gateLine (-1),
37+
lastOutputLine (0),
38+
outputLineChanged (false),
39+
lastTTLWord (0)
3740
{
3841
}
3942

@@ -129,7 +132,21 @@ void PhaseDetector::parameterValueChanged (Parameter* param)
129132
}
130133
else if (param->getName().equalsIgnoreCase ("gate_line"))
131134
{
132-
settings[param->getStreamId()]->gateLine = (int) param->getValue();
135+
int newGateLine = (int) param->getValue();
136+
settings[param->getStreamId()]->gateLine = newGateLine;
137+
138+
uint64 ttlWord = settings[param->getStreamId()]->lastTTLWord;
139+
// get the bit from the TTL word corresponding to the gate line and check if it is set
140+
if (newGateLine >= 0)
141+
{
142+
settings[param->getStreamId()]->isActive = ((ttlWord & (1ULL << newGateLine)) != 0);
143+
}
144+
else
145+
{
146+
settings[param->getStreamId()]->isActive = true; // If gate line is out of range, always active
147+
}
148+
149+
LOGC ("Gate line set to ", newGateLine, " ttl word is ", String (ttlWord));
133150
}
134151
}
135152

@@ -151,12 +168,20 @@ void PhaseDetector::updateSettings()
151168
eventChannels.add (new EventChannel (s));
152169
eventChannels.getLast()->addProcessor (this);
153170
settings[stream->getStreamId()]->eventChannel = eventChannels.getLast();
171+
172+
settings[stream->getStreamId()]->lastTTLWord = 0;
173+
174+
parameterValueChanged (stream->getParameter ("phase"));
175+
parameterValueChanged (stream->getParameter ("channel"));
176+
parameterValueChanged (stream->getParameter ("ttl_out"));
177+
parameterValueChanged (stream->getParameter ("gate_line"));
154178
}
155179
}
156180

157181
void PhaseDetector::handleTTLEvent (TTLEventPtr event)
158182
{
159183
const uint16 eventStream = event->getStreamId();
184+
settings[eventStream]->lastTTLWord = event->getWord();
160185

161186
if (settings[eventStream]->gateLine > -1)
162187
{
@@ -289,7 +314,7 @@ void PhaseDetector::process (AudioBuffer<float>& buffer)
289314
}
290315

291316
// If event is on when 'None' is selected in channel selector, turn off event
292-
if (module->wasTriggered && module->triggerChannel < 0)
317+
if (module->wasTriggered && (module->triggerChannel < 0 || module->isActive == false))
293318
{
294319
TTLEventPtr ptr = module->createEvent (firstSampleInBlock, false);
295320

Plugins/PhaseDetector/PhaseDetector.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,8 @@ class PhaseDetectorSettings
7676
int outputLine;
7777
int gateLine;
7878

79+
uint64 lastTTLWord;
80+
7981
EventChannel* eventChannel;
8082
};
8183

0 commit comments

Comments
 (0)