From: Lars-Peter Clausen Date: Thu, 21 Jun 2012 08:30:38 +0000 (+0200) Subject: sr: fx2lafw: Fix multistage trigger X-Git-Tag: dsupstream~903 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=f3ab43a8fbc39fe786718a7a3f5528acb3150aa7;p=libsigrok.git sr: fx2lafw: Fix multistage trigger Multistage triggers currently do no work, because there is a return statement in the middle of the trigger detector which will be hit as soon as the first stage in a multistage trigger matches. This patch removes the return statement so that the trigger detector can continue to try to match the next stage. In order for this to work we also make sure that the trigger stage is only reset if the current sample does not match. Signed-off-by: Lars-Peter Clausen --- diff --git a/hardware/fx2lafw/fx2lafw.c b/hardware/fx2lafw/fx2lafw.c index 6b184b70..afdd9501 100644 --- a/hardware/fx2lafw/fx2lafw.c +++ b/hardware/fx2lafw/fx2lafw.c @@ -774,17 +774,14 @@ static void receive_transfer(struct libusb_transfer *transfer) ctx->trigger_stage = TRIGGER_FIRED; break; } - return; - } - - /* - * We had a match before, but not in the next sample. However, we may - * have a match on this stage in the next bit -- trigger on 0001 will - * fail on seeing 00001, so we need to go back to stage 0 -- but at - * the next sample from the one that matched originally, which the - * counter increment at the end of the loop takes care of. - */ - if (ctx->trigger_stage > 0) { + } else if (ctx->trigger_stage > 0) { + /* + * We had a match before, but not in the next sample. However, we may + * have a match on this stage in the next bit -- trigger on 0001 will + * fail on seeing 00001, so we need to go back to stage 0 -- but at + * the next sample from the one that matched originally, which the + * counter increment at the end of the loop takes care of. + */ i -= ctx->trigger_stage; if (i < -1) i = -1; /* Oops, went back past this buffer. */