X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fzeroplus-logic-cube%2Fzeroplus.c;h=9892df0f055e16f8a8ad76e860398f6790ba4997;hb=c73d2ea421c2b425c3f0ae33bce2bfd0c448ca5f;hp=54f4d08315e0fac1c6a85c1cda8ab817ba752630;hpb=69890f7399f086c38670961dc72166f00de89af6;p=libsigrok.git diff --git a/hardware/zeroplus-logic-cube/zeroplus.c b/hardware/zeroplus-logic-cube/zeroplus.c index 54f4d083..9892df0f 100644 --- a/hardware/zeroplus-logic-cube/zeroplus.c +++ b/hardware/zeroplus-logic-cube/zeroplus.c @@ -1,7 +1,7 @@ /* * This file is part of the sigrok project. * - * Copyright (C) 2010 Bert Vermeulen + * Copyright (C) 2010-2012 Bert Vermeulen * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -155,7 +155,6 @@ static struct sr_samplerates samplerates = { struct zp { uint64_t cur_samplerate; - uint64_t period_ps; uint64_t limit_samples; int num_channels; /* TODO: This isn't initialized before it's needed :( */ uint64_t memory_size; @@ -198,7 +197,7 @@ static int opendev4(struct sr_device_instance **sdi, libusb_device *dev, } if ((err = libusb_get_device_descriptor(dev, des))) { - sr_warn("failed to get device descriptor: %d", err); + sr_err("failed to get device descriptor: %d", err); return -1; } @@ -220,7 +219,7 @@ static int opendev4(struct sr_device_instance **sdi, libusb_device *dev, } if (zp->num_channels == 0) { - sr_warn("Unknown ZeroPlus device %04X", des->idProduct); + sr_err("Unknown ZeroPlus device %04X", des->idProduct); return -2; } @@ -231,7 +230,7 @@ static int opendev4(struct sr_device_instance **sdi, libusb_device *dev, (*sdi)->index, zp->usb->bus, zp->usb->address, USB_INTERFACE); } else { - sr_warn("failed to open device: %d", err); + sr_err("failed to open device: %d", err); *sdi = NULL; } } @@ -284,8 +283,10 @@ static void close_device(struct sr_device_instance *sdi) sr_info("closing device %d on %d.%d interface %d", sdi->index, zp->usb->bus, zp->usb->address, USB_INTERFACE); libusb_release_interface(zp->usb->devhdl, USB_INTERFACE); + libusb_reset_device(zp->usb->devhdl); libusb_close(zp->usb->devhdl); zp->usb->devhdl = NULL; + /* TODO: Call libusb_exit() here or only in hw_cleanup()? */ sdi->status = SR_ST_INACTIVE; } @@ -353,7 +354,6 @@ static int hw_init(const char *deviceinfo) /* Set some sane defaults. */ zp->cur_samplerate = 0; - zp->period_ps = 0; zp->limit_samples = 0; zp->num_channels = 32; /* TODO: This isn't initialized before it's needed :( */ zp->memory_size = 0; @@ -363,18 +363,18 @@ static int hw_init(const char *deviceinfo) // memset(zp->trigger_buffer, 0, NUM_TRIGGER_STAGES); if (libusb_init(&usb_context) != 0) { - sr_warn("Failed to initialize USB."); + sr_err("Failed to initialize USB."); return 0; } /* Find all ZeroPlus analyzers and add them to device list. */ devcnt = 0; - libusb_get_device_list(usb_context, &devlist); + libusb_get_device_list(usb_context, &devlist); /* TODO: Errors. */ for (i = 0; devlist[i]; i++) { err = libusb_get_device_descriptor(devlist[i], &des); if (err != 0) { - sr_warn("failed to get device descriptor: %d", err); + sr_err("failed to get device descriptor: %d", err); continue; } @@ -416,7 +416,7 @@ static int hw_opendev(int device_index) int err; if (!(sdi = zp_open_device(device_index))) { - sr_warn("unable to open device"); + sr_err("unable to open device"); return SR_ERR; } @@ -427,11 +427,19 @@ static int hw_opendev(int device_index) return SR_ERR_ARG; } + err = libusb_set_configuration(zp->usb->devhdl, USB_CONFIGURATION); + if (err < 0) { + sr_err("zp: Unable to set USB configuration %d: %d", + USB_CONFIGURATION, err); + return SR_ERR; + } + err = libusb_claim_interface(zp->usb->devhdl, USB_INTERFACE); if (err != 0) { - sr_warn("Unable to claim interface: %d", err); + sr_err("Unable to claim interface: %d", err); return SR_ERR; } + analyzer_reset(zp->usb->devhdl); analyzer_initialize(zp->usb->devhdl); @@ -582,7 +590,6 @@ static int set_configuration_samplerate(struct sr_device_instance *sdi, analyzer_set_freq(samplerate, FREQ_SCALE_HZ); zp->cur_samplerate = samplerate; - zp->period_ps = 1000000000000 / samplerate; return SR_OK; } @@ -657,7 +664,6 @@ static int hw_start_acquisition(int device_index, gpointer session_data) gettimeofday(&header.starttime, NULL); header.samplerate = zp->cur_samplerate; header.num_logic_probes = zp->num_channels; - header.num_analog_probes = 0; sr_session_bus(session_data, &packet); if (!(buf = g_try_malloc(PACKET_SIZE))) { @@ -675,8 +681,6 @@ static int hw_start_acquisition(int device_index, gpointer session_data) PACKET_SIZE, res); packet.type = SR_DF_LOGIC; - packet.timeoffset = samples_read * zp->period_ps; - packet.duration = res / 4 * zp->period_ps; packet.payload = &logic; logic.length = PACKET_SIZE; logic.unitsize = 4; @@ -717,7 +721,7 @@ static void hw_stop_acquisition(int device_index, gpointer session_device_id) /* TODO: Need to cancel and free any queued up transfers. */ } -struct sr_device_plugin zeroplus_logic_cube_plugin_info = { +SR_PRIV struct sr_device_plugin zeroplus_logic_cube_plugin_info = { .name = "zeroplus-logic-cube", .longname = "Zeroplus Logic Cube LAP-C series", .api_version = 1,