X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fhantek-dso%2Fdso.h;h=beabbd5b205fac7810b6c6ba167dbd5169b508ec;hb=6fab7b8f5365c7be69be4a755910945b6113dd8f;hp=53cf49408d9ea7c78e5a2742b006c08bf617706a;hpb=fc8fe3e3141f998dd97004c4379cb4d3acbd62a9;p=libsigrok.git diff --git a/hardware/hantek-dso/dso.h b/hardware/hantek-dso/dso.h index 53cf4940..beabbd5b 100644 --- a/hardware/hantek-dso/dso.h +++ b/hardware/hantek-dso/dso.h @@ -22,40 +22,48 @@ #ifndef LIBSIGROK_HARDWARE_HANTEK_DSO_H #define LIBSIGROK_HARDWARE_HANTEK_DSO_H -#define USB_INTERFACE 0 -#define USB_CONFIGURATION 1 -#define DSO_EP_IN 0x86 -#define DSO_EP_OUT 0x02 +/* Message logging helpers with driver-specific prefix string. */ +#define DRIVER_LOG_DOMAIN "hantek-dso: " +#define sr_log(l, s, args...) sr_log(l, DRIVER_LOG_DOMAIN s, ## args) +#define sr_spew(s, args...) sr_spew(DRIVER_LOG_DOMAIN s, ## args) +#define sr_dbg(s, args...) sr_dbg(DRIVER_LOG_DOMAIN s, ## args) +#define sr_info(s, args...) sr_info(DRIVER_LOG_DOMAIN s, ## args) +#define sr_warn(s, args...) sr_warn(DRIVER_LOG_DOMAIN s, ## args) +#define sr_err(s, args...) sr_err(DRIVER_LOG_DOMAIN s, ## args) + +#define USB_INTERFACE 0 +#define USB_CONFIGURATION 1 +#define DSO_EP_IN 0x86 +#define DSO_EP_OUT 0x02 /* FX2 renumeration delay in ms */ -#define MAX_RENUM_DELAY_MS 3000 +#define MAX_RENUM_DELAY_MS 3000 -#define MAX_CAPTURE_EMPTY 3 +#define MAX_CAPTURE_EMPTY 3 -#define DEFAULT_VOLTAGE VDIV_500MV -#define DEFAULT_FRAMESIZE FRAMESIZE_SMALL -#define DEFAULT_TIMEBASE TIME_100us -#define DEFAULT_TRIGGER_SOURCE "CH1" -#define DEFAULT_COUPLING COUPLING_DC -#define DEFAULT_HORIZ_TRIGGERPOS 0.5 -#define DEFAULT_VERT_OFFSET 0.5 -#define DEFAULT_VERT_TRIGGERPOS 0.5 +#define DEFAULT_VOLTAGE VDIV_500MV +#define DEFAULT_FRAMESIZE FRAMESIZE_SMALL +#define DEFAULT_TIMEBASE TIME_100us +#define DEFAULT_TRIGGER_SOURCE "CH1" +#define DEFAULT_COUPLING COUPLING_DC +#define DEFAULT_HORIZ_TRIGGERPOS 0.5 +#define DEFAULT_VERT_OFFSET 0.5 +#define DEFAULT_VERT_TRIGGERPOS 0.5 -#define MAX_VERT_TRIGGER 0xfe +#define MAX_VERT_TRIGGER 0xfe /* Hantek DSO-specific protocol values */ -#define EEPROM_CHANNEL_OFFSETS 0x08 - -#define FRAMESIZE_SMALL 10240 -#define FRAMESIZE_LARGE 32768 +#define EEPROM_CHANNEL_OFFSETS 0x08 +#define FRAMESIZE_SMALL 10240 +#define FRAMESIZE_LARGE 32768 enum control_requests { CTRL_READ_EEPROM = 0xa2, CTRL_GETSPEED = 0xb2, CTRL_BEGINCOMMAND = 0xb3, CTRL_SETOFFSET = 0xb4, - CTRL_SETRELAYS = 0xb5 + CTRL_SETRELAYS = 0xb5, }; enum dso_commands { @@ -69,7 +77,7 @@ enum dso_commands { CMD_SET_VOLTAGE, /* unused */ cmdSetLogicalData, - cmdGetLogicalData + cmdGetLogicalData, }; /* Must match the coupling table. */ @@ -77,7 +85,7 @@ enum couplings { COUPLING_AC = 0, COUPLING_DC, /* TODO not used, how to enable? */ - COUPLING_GND + COUPLING_GND, }; /* Must match the timebases table. */ @@ -96,7 +104,7 @@ enum time_bases { TIME_40ms, TIME_100ms, TIME_200ms, - TIME_400ms + TIME_400ms, }; /* Must match the vdivs table. */ @@ -114,7 +122,7 @@ enum { enum trigger_slopes { SLOPE_POSITIVE = 0, - SLOPE_NEGATIVE + SLOPE_NEGATIVE, }; enum trigger_sources { @@ -129,20 +137,21 @@ enum capturestates { CAPTURE_READY_8BIT = 2, CAPTURE_READY_9BIT = 7, CAPTURE_TIMEOUT = 127, - CAPTURE_UNKNOWN = 255 + CAPTURE_UNKNOWN = 255, }; enum triggermodes { TRIGGERMODE_AUTO, TRIGGERMODE_NORMAL, - TRIGGERMODE_SINGLE + TRIGGERMODE_SINGLE, }; enum states { IDLE, NEW_CAPTURE, CAPTURE, - FETCH_DATA + FETCH_DATA, + STOPPING, }; struct dso_profile { @@ -154,17 +163,16 @@ struct dso_profile { uint16_t fw_pid; char *vendor; char *model; - char *model_version; - int num_probes; char *firmware; }; -struct context { +struct dev_context { const struct dso_profile *profile; struct sr_usb_dev_inst *usb; void *cb_data; uint64_t limit_frames; uint64_t num_frames; + GSList *enabled_probes; /* We can't keep track of an FX2-based device after upgrading * the firmware (it re-enumerates into a different device address * after the upgrade) this is like a global lock. No device will open @@ -204,14 +212,15 @@ struct context { unsigned char *framebuf; }; -SR_PRIV int dso_open(int dev_index); +SR_PRIV int dso_open(struct sr_dev_inst *sdi); 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 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); +SR_PRIV int dso_enable_trigger(struct dev_context *devc); +SR_PRIV int dso_force_trigger(struct dev_context *devc); +SR_PRIV int dso_init(struct dev_context *devc); +SR_PRIV int dso_get_capturestate(struct dev_context *devc, + uint8_t *capturestate, uint32_t *trigger_offset); +SR_PRIV int dso_capture_start(struct dev_context *devc); +SR_PRIV int dso_get_channeldata(const struct sr_dev_inst *sdi, + libusb_transfer_cb_fn cb); #endif