X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Ffx2lafw%2Ffx2lafw.c;h=76c5019d1da3929e455699f380aa4f25e04bba63;hb=fa114e4ab1ef0d30bb3cce8f926e43d66df9f787;hp=2c0c6360164a70f37a59aedd93950a154dec298a;hpb=d1ddc7a9a8a7226fcb1f8b5a360c275684e77e9a;p=libsigrok.git diff --git a/hardware/fx2lafw/fx2lafw.c b/hardware/fx2lafw/fx2lafw.c index 2c0c6360..76c5019d 100644 --- a/hardware/fx2lafw/fx2lafw.c +++ b/hardware/fx2lafw/fx2lafw.c @@ -328,7 +328,7 @@ static int configure_probes(struct context *ctx, GSList *probes) continue; if (probe->index > 8) - ctx->sample_wide = true; + ctx->sample_wide = TRUE; probe_bit = 1 << (probe->index - 1); if (!(probe->trigger)) @@ -706,6 +706,7 @@ static void receive_transfer(struct libusb_transfer *transfer) /* Fire off a new request. */ if (!(new_buf = g_try_malloc(4096))) { sr_err("fx2lafw: %s: new_buf malloc failed.", __func__); + libusb_free_transfer(transfer); return; /* TODO: SR_ERR_MALLOC */ } @@ -726,6 +727,7 @@ static void receive_transfer(struct libusb_transfer *transfer) */ abort_acquisition(ctx); } + g_free(cur_buf); return; } else { empty_transfer_count = 0; @@ -764,25 +766,22 @@ static void receive_transfer(struct libusb_transfer *transfer) */ packet.type = SR_DF_LOGIC; packet.payload = &logic; - logic.length = ctx->trigger_stage; - logic.unitsize = 1; + logic.unitsize = sizeof(*ctx->trigger_buffer); + logic.length = ctx->trigger_stage * logic.unitsize; logic.data = ctx->trigger_buffer; sr_session_send(ctx->session_dev_id, &packet); 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. */ @@ -794,14 +793,13 @@ static void receive_transfer(struct libusb_transfer *transfer) if (ctx->trigger_stage == TRIGGER_FIRED) { /* Send the incoming transfer to the session bus. */ - const trigger_offset_bytes = trigger_offset * sample_width; + const int trigger_offset_bytes = trigger_offset * sample_width; packet.type = SR_DF_LOGIC; packet.payload = &logic; logic.length = transfer->actual_length - trigger_offset_bytes; logic.unitsize = sample_width; logic.data = cur_buf + trigger_offset_bytes; sr_session_send(ctx->session_dev_id, &packet); - g_free(cur_buf); ctx->num_samples += cur_sample_count; if (ctx->limit_samples && @@ -814,6 +812,7 @@ static void receive_transfer(struct libusb_transfer *transfer) * ratio-sized buffer. */ } + g_free(cur_buf); } static int hw_dev_acquisition_start(int dev_index, void *cb_data)