hantek-dso: capturestate packet also contains the trigger point
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.
This commit is contained in:
parent
a217bcdf10
commit
6e6eeff47a
|
@ -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) {
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue