VDIV_VALUES
};
-SR_PRIV struct sr_dev_driver hantek_6xxx_driver_info;
-
static int read_channel(const struct sr_dev_inst *sdi, uint32_t amount);
-static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data);
+static int dev_acquisition_stop(struct sr_dev_inst *sdi);
static struct sr_dev_inst *hantek_6xxx_dev_new(const struct hantek_6xxx_profile *prof)
{
struct sr_dev_inst *sdi;
struct sr_channel *ch;
struct sr_channel_group *cg;
- struct drv_context *drvc;
struct dev_context *devc;
unsigned int i;
sdi->status = SR_ST_INITIALIZING;
sdi->vendor = g_strdup(prof->vendor);
sdi->model = g_strdup(prof->model);
- sdi->driver = &hantek_6xxx_driver_info;
for (i = 0; i < ARRAY_SIZE(channel_names); i++) {
ch = sr_channel_new(sdi, i, SR_CHANNEL_ANALOG, TRUE, channel_names[i]);
devc->samplerate = DEFAULT_SAMPLERATE;
sdi->priv = devc;
- drvc = sdi->driver->context;
- drvc->instances = g_slist_append(drvc->instances, sdi);
return sdi;
}
devc = priv;
g_slist_free(devc->enabled_channels);
+ g_free(devc);
}
static int dev_clear(const struct sr_dev_driver *di)
return std_dev_clear(di, clear_dev_context);
}
-static int init(struct sr_dev_driver *di, struct sr_context *sr_ctx)
-{
- return std_init(sr_ctx, di, LOG_PREFIX);
-}
-
static GSList *scan(struct sr_dev_driver *di, GSList *options)
{
struct drv_context *drvc;
}
libusb_free_device_list(devlist, 1);
- return devices;
-}
-
-static GSList *dev_list(const struct sr_dev_driver *di)
-{
- return ((struct drv_context *)(di->context))->instances;
+ return std_scan_complete(di, devices);
}
static int dev_open(struct sr_dev_inst *sdi)
return SR_OK;
}
-static int cleanup(const struct sr_dev_driver *di)
-{
- return dev_clear(di);
-}
-
static int config_get(uint32_t key, GVariant **data, const struct sr_dev_inst *sdi,
const struct sr_channel_group *cg)
{
analog.data[data_offset++] = (ch2_bit * *(buf + i * 2 + 1) - ch2_center);
}
- sr_session_send(devc->cb_data, &packet);
+ sr_session_send(sdi, &packet);
g_free(analog.data);
}
devc = sdi->priv;
if (devc->dev_state == FLUSH) {
+ g_free(transfer->buffer);
+ libusb_free_transfer(transfer);
devc->dev_state = CAPTURE;
devc->aq_started = g_get_monotonic_time();
read_channel(sdi, data_amount(sdi));
PRIu64 " <= %" PRIu64, devc->limit_samples,
devc->samp_received);
send_data(sdi, devc->sample_buf, devc->limit_samples);
- sdi->driver->dev_acquisition_stop(sdi, NULL);
+ sdi->driver->dev_acquisition_stop(sdi);
} else if (devc->limit_msec && (g_get_monotonic_time() -
devc->aq_started) / 1000 >= devc->limit_msec) {
sr_info("Requested time limit reached, stopping. %d <= %d",
send_data(sdi, devc->sample_buf, devc->samp_received);
g_free(devc->sample_buf);
devc->sample_buf = NULL;
- sdi->driver->dev_acquisition_stop(sdi, NULL);
+ sdi->driver->dev_acquisition_stop(sdi);
} else {
read_channel(sdi, data_amount(sdi));
}
static int handle_event(int fd, int revents, void *cb_data)
{
const struct sr_dev_inst *sdi;
- struct sr_datafeed_packet packet;
struct timeval tv;
struct sr_dev_driver *di;
struct dev_context *devc;
*/
usb_source_remove(sdi->session, drvc->sr_ctx);
- packet.type = SR_DF_END;
- packet.payload = NULL;
- sr_session_send(sdi, &packet);
+ std_session_send_df_end(sdi, LOG_PREFIX);
devc->dev_state = IDLE;
return TRUE;
}
-static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data)
+static int dev_acquisition_start(const struct sr_dev_inst *sdi)
{
struct dev_context *devc;
struct sr_dev_driver *di = sdi->driver;
return SR_ERR_DEV_CLOSED;
devc = sdi->priv;
- devc->cb_data = cb_data;
if (configure_channels(sdi) != SR_OK) {
sr_err("Failed to configure channels.");
if (hantek_6xxx_init(sdi) != SR_OK)
return SR_ERR;
- /* Send header packet to the session bus. */
- std_session_send_df_header(cb_data, LOG_PREFIX);
+ std_session_send_df_header(sdi, LOG_PREFIX);
devc->samp_received = 0;
devc->dev_state = FLUSH;
return SR_OK;
}
-static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data)
+static int dev_acquisition_stop(struct sr_dev_inst *sdi)
{
struct dev_context *devc;
- (void)cb_data;
-
if (sdi->status != SR_ST_ACTIVE)
return SR_ERR;
return SR_OK;
}
-SR_PRIV struct sr_dev_driver hantek_6xxx_driver_info = {
+static struct sr_dev_driver hantek_6xxx_driver_info = {
.name = "hantek-6xxx",
.longname = "Hantek 6xxx",
.api_version = 1,
- .init = init,
- .cleanup = cleanup,
+ .init = std_init,
+ .cleanup = std_cleanup,
.scan = scan,
- .dev_list = dev_list,
+ .dev_list = std_dev_list,
.dev_clear = dev_clear,
.config_get = config_get,
.config_set = config_set,
.dev_acquisition_stop = dev_acquisition_stop,
.context = NULL,
};
+SR_REGISTER_DEV_DRIVER(hantek_6xxx_driver_info);