X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=src%2Fhardware%2Frigol-ds%2Fapi.c;h=259ca1690dfb4100a64dcf6d9f98bb11d8a187c5;hb=1c47e0da8f2571bc34dbdc368c3c1f55318c3aa0;hp=111eff067d6734a73883ca957fd26bc18761a7c7;hpb=0c5f2abc6697504b5d760dfa56cc90bea180198f;p=libsigrok.git diff --git a/src/hardware/rigol-ds/api.c b/src/hardware/rigol-ds/api.c index 111eff06..259ca169 100644 --- a/src/hardware/rigol-ds/api.c +++ b/src/hardware/rigol-ds/api.c @@ -19,14 +19,17 @@ * along with this program. If not, see . */ +#include #include #include #include #include +#include #include #include -#include "libsigrok.h" +#include #include "libsigrok-internal.h" +#include "scpi.h" #include "protocol.h" static const uint32_t scanopts[] = { @@ -296,7 +299,7 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) } for (i = 0; i < ARRAY_SIZE(supported_models); i++) { - if (!strcasecmp(hw_info->manufacturer, + if (!g_ascii_strcasecmp(hw_info->manufacturer, supported_models[i].series->vendor->full_name) && !strcmp(hw_info->model, supported_models[i].name)) { model = &supported_models[i]; @@ -310,7 +313,6 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) } sdi = g_malloc0(sizeof(struct sr_dev_inst)); - sdi->status = SR_ST_ACTIVE; sdi->vendor = g_strdup(model->series->vendor->name); sdi->model = g_strdup(model->name); sdi->version = g_strdup(hw_info->firmware_version); @@ -337,12 +339,12 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) } if (i != 3) break; - if (n[0] != 0 || n[1] > 2) - break; - if (n[1] == 2 && n[2] > 3) - break; - sr_dbg("Found DS1000 firmware < 0.2.4, using raw data format."); - devc->format = FORMAT_RAW; + scpi->firmware_version = n[0] * 100 + n[1] * 10 + n[2]; + if (scpi->firmware_version < 24) { + sr_dbg("Found DS1000 firmware < 0.2.4, using raw data format."); + devc->format = FORMAT_RAW; + } + break; } while (0); g_strfreev(version); } @@ -353,8 +355,7 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) model->analog_channels); for (i = 0; i < model->analog_channels; i++) { - if (!(channel_name = g_strdup_printf("CH%d", i + 1))) - return NULL; + channel_name = g_strdup_printf("CH%d", i + 1); ch = sr_channel_new(sdi, i, SR_CHANNEL_ANALOG, TRUE, channel_name); devc->analog_groups[i] = g_malloc0(sizeof(struct sr_channel_group)); @@ -369,8 +370,7 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) devc->digital_group = g_malloc0(sizeof(struct sr_channel_group)); for (i = 0; i < ARRAY_SIZE(devc->digital_channels); i++) { - if (!(channel_name = g_strdup_printf("D%d", i))) - return NULL; + channel_name = g_strdup_printf("D%d", i); ch = sr_channel_new(sdi, i, SR_CHANNEL_LOGIC, TRUE, channel_name); g_free(channel_name); devc->digital_group->channels = g_slist_append( @@ -388,16 +388,16 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) devc->num_timebases = &timebases[i] - devc->timebases + 1; } - for (i = 0; i < NUM_VDIV; i++) - if (!memcmp(&devc->model->series->min_vdiv, &vdivs[i], sizeof(uint64_t[2]))) { + for (i = 0; i < NUM_VDIV; i++) { + if (!memcmp(&devc->model->series->min_vdiv, + &vdivs[i], sizeof(uint64_t[2]))) { devc->vdivs = &vdivs[i]; devc->num_vdivs = NUM_VDIV - i; } + } - if (!(devc->buffer = g_try_malloc(ACQ_BUFFER_SIZE))) - return NULL; - if (!(devc->data = g_try_malloc(ACQ_BUFFER_SIZE * sizeof(float)))) - return NULL; + devc->buffer = g_malloc(ACQ_BUFFER_SIZE); + devc->data = g_malloc(ACQ_BUFFER_SIZE * sizeof(float)); devc->data_source = DATA_SOURCE_LIVE; @@ -408,12 +408,12 @@ static struct sr_dev_inst *probe_device(struct sr_scpi_dev_inst *scpi) static GSList *scan(struct sr_dev_driver *di, GSList *options) { - return sr_scpi_scan(di->priv, options, probe_device); + return sr_scpi_scan(di->context, options, probe_device); } static GSList *dev_list(const struct sr_dev_driver *di) { - return ((struct drv_context *)(di->priv))->instances; + return ((struct drv_context *)(di->context))->instances; } static int dev_open(struct sr_dev_inst *sdi) @@ -808,9 +808,6 @@ static int config_list(uint32_t key, GVariant **data, const struct sr_dev_inst * unsigned int i; struct dev_context *devc = NULL; - if (sdi) - devc = sdi->priv; - if (key == SR_CONF_SCAN_OPTIONS) { *data = g_variant_new_fixed_array(G_VARIANT_TYPE_UINT32, scanopts, ARRAY_SIZE(scanopts), sizeof(uint32_t)); @@ -1034,7 +1031,6 @@ static int dev_acquisition_start(const struct sr_dev_inst *sdi, void *cb_data) sr_scpi_source_add(sdi->session, scpi, G_IO_IN, 50, rigol_ds_receive, (void *)sdi); - /* Send header packet to the session bus. */ std_session_send_df_header(cb_data, LOG_PREFIX); devc->channel_entry = devc->enabled_channels; @@ -1053,7 +1049,6 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data) { struct dev_context *devc; struct sr_scpi_dev_inst *scpi; - struct sr_datafeed_packet packet; (void)cb_data; @@ -1064,9 +1059,7 @@ static int dev_acquisition_stop(struct sr_dev_inst *sdi, void *cb_data) return SR_ERR; } - /* End of last frame. */ - packet.type = SR_DF_END; - sr_session_send(sdi, &packet); + std_session_send_df_end(sdi, LOG_PREFIX); g_slist_free(devc->enabled_channels); devc->enabled_channels = NULL; @@ -1092,5 +1085,5 @@ SR_PRIV struct sr_dev_driver rigol_ds_driver_info = { .dev_close = dev_close, .dev_acquisition_start = dev_acquisition_start, .dev_acquisition_stop = dev_acquisition_stop, - .priv = NULL, + .context = NULL, };