]> sigrok.org Git - libsigrok.git/commitdiff
hantek-dso: capturestate packet also contains the trigger point
authorBert Vermeulen <redacted>
Mon, 18 Jun 2012 21:09:37 +0000 (23:09 +0200)
committerBert Vermeulen <redacted>
Mon, 18 Jun 2012 21:09:37 +0000 (23:09 +0200)
Not yet used, but it's the key to knowing where in the frame to
start displaying; the frame is used as a circular buffer, and what
is sent is effectively a snapshot.

hardware/hantek-dso/api.c
hardware/hantek-dso/dso.c
hardware/hantek-dso/dso.h

index 1091ea9008c6956ae816239f2f102d588b733be3..e6b87f85eaae6a6d84ca8dfcf6ee4cb17d992df3 100644 (file)
@@ -628,7 +628,8 @@ static int handle_event(int fd, int revents, void *cb_data)
        struct sr_datafeed_packet packet;
        struct timeval tv;
        struct context *ctx;
-       int capturestate;
+       uint32_t trigger_offset;
+       uint8_t capturestate;
 
        /* Avoid compiler warnings. */
        (void)fd;
@@ -654,12 +655,11 @@ static int handle_event(int fd, int revents, void *cb_data)
        if (ctx->dev_state != CAPTURE)
                return TRUE;
 
-       if ((capturestate = dso_get_capturestate(ctx)) == CAPTURE_UNKNOWN) {
-               /* Generated by the function, not the hardware. */
+       if ((dso_get_capturestate(ctx, &capturestate, &trigger_offset)) != SR_OK)
                return TRUE;
-       }
 
        sr_dbg("hantek-dso: capturestate %d", capturestate);
+       sr_dbg("hantek-dso: trigger offset 0x%.6x", trigger_offset);
        switch (capturestate) {
        case CAPTURE_EMPTY:
                if (++ctx->capture_empty_count >= MAX_CAPTURE_EMPTY) {
index 88158674ad188b57f8ac5bead3aaaea0cf56d776..1ad30f097c36eb83bd65b5822c0451584104e49e 100644 (file)
@@ -640,7 +640,8 @@ SR_PRIV int dso_init(struct context *ctx)
        return SR_OK;
 }
 
-SR_PRIV uint8_t dso_get_capturestate(struct context *ctx)
+SR_PRIV int dso_get_capturestate(struct context *ctx, uint8_t *capturestate,
+               uint32_t *trigger_offset)
 {
        int ret, tmp;
        uint8_t cmdstring[2], inbuf[512];
@@ -652,20 +653,22 @@ SR_PRIV uint8_t dso_get_capturestate(struct context *ctx)
 
        if ((ret = send_bulkcmd(ctx, cmdstring, sizeof(cmdstring))) != SR_OK) {
                sr_dbg("Failed to send get_capturestate command: %d", ret);
-               return CAPTURE_UNKNOWN;
+               return SR_ERR;
        }
 
        if ((ret = libusb_bulk_transfer(ctx->usb->devhdl,
                        DSO_EP_IN | LIBUSB_ENDPOINT_IN,
                        inbuf, 512, &tmp, 100)) != 0) {
                sr_dbg("Failed to get capturestate: %d", ret);
-               return CAPTURE_UNKNOWN;
+               return SR_ERR;
        }
+       *capturestate = inbuf[0];
+       *trigger_offset = (inbuf[1] << 16) | (inbuf[3] << 8) | inbuf[2];
 
-       return inbuf[0];
+       return SR_OK;
 }
 
-SR_PRIV uint8_t dso_capture_start(struct context *ctx)
+SR_PRIV int dso_capture_start(struct context *ctx)
 {
        int ret;
        uint8_t cmdstring[2];
index 3220b90df0b4c8a0d2d930672346cc50c5e910ab..ac2601471ae421b174b381bde9ec28020b1245a8 100644 (file)
@@ -203,8 +203,9 @@ SR_PRIV void dso_close(struct sr_dev_inst *sdi);
 SR_PRIV int dso_enable_trigger(struct context *ctx);
 SR_PRIV int dso_force_trigger(struct context *ctx);
 SR_PRIV int dso_init(struct context *ctx);
-SR_PRIV uint8_t dso_get_capturestate(struct context *ctx);
-SR_PRIV uint8_t dso_capture_start(struct context *ctx);
+SR_PRIV int dso_get_capturestate(struct context *ctx, uint8_t *capturestate,
+               uint32_t *trigger_offset);
+SR_PRIV int dso_capture_start(struct context *ctx);
 SR_PRIV int dso_get_channeldata(struct context *ctx, libusb_transfer_cb_fn cb);
 
 #endif