X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fasix-sigma%2Fasix-sigma.c;h=59a1ec4289c3e183494582b75a7a03a492ab36d3;hb=063e7aef6d41d4c44591ff93672079998bf9622f;hp=27a91226a9c431e8765391a6918c43d473da62cb;hpb=786934010365a0b33aa8a32a7dc62a2975dba4c7;p=libsigrok.git diff --git a/hardware/asix-sigma/asix-sigma.c b/hardware/asix-sigma/asix-sigma.c index 27a91226..59a1ec42 100644 --- a/hardware/asix-sigma/asix-sigma.c +++ b/hardware/asix-sigma/asix-sigma.c @@ -37,7 +37,7 @@ #define USB_VENDOR_NAME "ASIX" #define USB_MODEL_NAME "SIGMA" #define USB_MODEL_VERSION "" -#define TRIGGER_TYPES "rf10" +#define TRIGGER_TYPE "rf10" #define NUM_PROBES 16 SR_PRIV struct sr_dev_driver asix_sigma_driver_info; @@ -77,11 +77,11 @@ static const struct sr_samplerates samplerates = { }; static const int hwcaps[] = { - SR_HWCAP_LOGIC_ANALYZER, - SR_HWCAP_SAMPLERATE, - SR_HWCAP_CAPTURE_RATIO, + SR_CONF_LOGIC_ANALYZER, + SR_CONF_SAMPLERATE, + SR_CONF_CAPTURE_RATIO, - SR_HWCAP_LIMIT_MSEC, + SR_CONF_LIMIT_MSEC, 0, }; @@ -420,16 +420,7 @@ static int clear_instances(void) static int hw_init(struct sr_context *sr_ctx) { - struct drv_context *drvc; - - if (!(drvc = g_try_malloc0(sizeof(struct drv_context)))) { - sr_err("Driver context malloc failed."); - return SR_ERR_MALLOC; - } - drvc->sr_ctx = sr_ctx; - di->priv = drvc; - - return SR_OK; + return std_hw_init(sr_ctx, di, DRIVER_LOG_DOMAIN); } static GSList *hw_scan(GSList *options) @@ -447,7 +438,9 @@ static GSList *hw_scan(GSList *options) (void)options; drvc = di->priv; + devices = NULL; + clear_instances(); if (!(devc = g_try_malloc(sizeof(struct dev_context)))) { @@ -648,6 +641,8 @@ static int set_samplerate(const struct sr_dev_inst *sdi, uint64_t samplerate) int i, ret; struct dev_context *devc = sdi->priv; + ret = SR_OK; + for (i = 0; supported_samplerates[i]; i++) { if (supported_samplerates[i] == samplerate) break; @@ -669,7 +664,7 @@ static int set_samplerate(const struct sr_dev_inst *sdi, uint64_t samplerate) } devc->cur_samplerate = samplerate; - devc->period_ps = 1000000000000 / samplerate; + devc->period_ps = 1000000000000ULL / samplerate; devc->samples_per_event = 16 / devc->num_probes; devc->state.state = SIGMA_IDLE; @@ -785,28 +780,12 @@ static int hw_cleanup(void) return SR_OK; } -static int hw_info_get(int info_id, const void **data, - const struct sr_dev_inst *sdi) +static int config_get(int id, const void **data, const struct sr_dev_inst *sdi) { struct dev_context *devc; - switch (info_id) { - case SR_DI_HWCAPS: - *data = hwcaps; - break; - case SR_DI_NUM_PROBES: - *data = GINT_TO_POINTER(NUM_PROBES); - break; - case SR_DI_PROBE_NAMES: - *data = probe_names; - break; - case SR_DI_SAMPLERATES: - *data = &samplerates; - break; - case SR_DI_TRIGGER_TYPES: - *data = (char *)TRIGGER_TYPES; - break; - case SR_DI_CUR_SAMPLERATE: + switch (id) { + case SR_CONF_SAMPLERATE: if (sdi) { devc = sdi->priv; *data = &devc->cur_samplerate; @@ -820,23 +799,22 @@ static int hw_info_get(int info_id, const void **data, return SR_OK; } -static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap, - const void *value) +static int config_set(int id, const void *value, const struct sr_dev_inst *sdi) { struct dev_context *devc; int ret; devc = sdi->priv; - if (hwcap == SR_HWCAP_SAMPLERATE) { + if (id == SR_CONF_SAMPLERATE) { ret = set_samplerate(sdi, *(const uint64_t *)value); - } else if (hwcap == SR_HWCAP_LIMIT_MSEC) { + } else if (id == SR_CONF_LIMIT_MSEC) { devc->limit_msec = *(const uint64_t *)value; if (devc->limit_msec > 0) ret = SR_OK; else ret = SR_ERR; - } else if (hwcap == SR_HWCAP_CAPTURE_RATIO) { + } else if (id == SR_CONF_CAPTURE_RATIO) { devc->capture_ratio = *(const uint64_t *)value; if (devc->capture_ratio < 0 || devc->capture_ratio > 100) ret = SR_ERR; @@ -849,6 +827,28 @@ static int hw_dev_config_set(const struct sr_dev_inst *sdi, int hwcap, return ret; } +static int config_list(int key, const void **data, const struct sr_dev_inst *sdi) +{ + + (void)sdi; + + switch (key) { + case SR_CONF_DEVICE_OPTIONS: + *data = hwcaps; + break; + case SR_CONF_SAMPLERATE: + *data = &samplerates; + break; + case SR_CONF_TRIGGER_TYPE: + *data = (char *)TRIGGER_TYPE; + break; + default: + return SR_ERR_ARG; + } + + return SR_OK; +} + /* Software trigger to determine exact trigger position. */ static int get_trigger_offset(uint16_t *samples, uint16_t last_sample, struct sigma_trigger *t) @@ -1275,10 +1275,9 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, struct dev_context *devc; struct sr_datafeed_packet *packet; struct sr_datafeed_header *header; - struct sr_datafeed_meta_logic meta; struct clockselect_50 clockselect; int frac, triggerpin, ret; - uint8_t triggerselect; + uint8_t triggerselect = 0; struct triggerinout triggerinout_conf; struct triggerlut lut; @@ -1386,13 +1385,6 @@ static int hw_dev_acquisition_start(const struct sr_dev_inst *sdi, gettimeofday(&header->starttime, NULL); sr_session_send(devc->session_dev_id, packet); - /* Send metadata about the SR_DF_LOGIC packets to come. */ - packet->type = SR_DF_META_LOGIC; - packet->payload = &meta; - meta.samplerate = devc->cur_samplerate; - meta.num_probes = devc->num_probes; - sr_session_send(devc->session_dev_id, packet); - /* Add capture source. */ sr_source_add(0, G_IO_IN, 10, receive_data, (void *)sdi); @@ -1450,10 +1442,11 @@ SR_PRIV struct sr_dev_driver asix_sigma_driver_info = { .scan = hw_scan, .dev_list = hw_dev_list, .dev_clear = clear_instances, + .config_get = config_get, + .config_set = config_set, + .config_list = config_list, .dev_open = hw_dev_open, .dev_close = hw_dev_close, - .info_get = hw_info_get, - .dev_config_set = hw_dev_config_set, .dev_acquisition_start = hw_dev_acquisition_start, .dev_acquisition_stop = hw_dev_acquisition_stop, .priv = NULL,