@@ -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
157181void 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
0 commit comments