struct libusb_device_handle *hdl;
libusb_device **devlist;
GSList *devices;
- int ret, i, j;
+ int ret;
+ size_t i, j;
+ uint8_t bus, addr;
const struct zp_model *check;
char serial_num[64], connection_id[64];
/* Find all ZEROPLUS analyzers and add them to device list. */
libusb_get_device_list(drvc->sr_ctx->libusb_ctx, &devlist); /* TODO: Errors. */
-
for (i = 0; devlist[i]; i++) {
libusb_get_device_descriptor(devlist[i], &des);
continue;
/* Get the device's serial number from USB strings. */
- if ((ret = libusb_open(devlist[i], &hdl)) < 0)
+ ret = libusb_open(devlist[i], &hdl);
+ if (ret < 0)
continue;
- if (des.iSerialNumber == 0) {
- serial_num[0] = '\0';
- } else if ((ret = libusb_get_string_descriptor_ascii(hdl,
- des.iSerialNumber, (unsigned char *) serial_num,
- sizeof(serial_num))) < 0) {
- sr_warn("Failed to get serial number string descriptor: %s.",
- libusb_error_name(ret));
- continue;
+ serial_num[0] = '\0';
+ if (des.iSerialNumber != 0) {
+ ret = libusb_get_string_descriptor_ascii(hdl,
+ des.iSerialNumber,
+ (uint8_t *)serial_num, sizeof(serial_num));
+ if (ret < 0) {
+ sr_warn("Cannot get USB serial number: %s.",
+ libusb_error_name(ret));
+ continue;
+ }
}
libusb_close(hdl);
sr_info("Found ZEROPLUS %s.", prof->model_name);
- sdi = g_malloc0(sizeof(struct sr_dev_inst));
+ sdi = g_malloc0(sizeof(*sdi));
sdi->status = SR_ST_INACTIVE;
sdi->vendor = g_strdup("ZEROPLUS");
sdi->model = g_strdup(prof->model_name);
sdi->serial_num = g_strdup(serial_num);
sdi->connection_id = g_strdup(connection_id);
- devc = g_malloc0(sizeof(struct dev_context));
+ bus = libusb_get_bus_number(devlist[i]);
+ addr = libusb_get_device_address(devlist[i]);
+ sdi->inst_type = SR_INST_USB;
+ sdi->conn = sr_usb_dev_inst_new(bus, addr, NULL);
+
+ devc = g_malloc0(sizeof(*devc));
sdi->priv = devc;
devc->prof = prof;
devc->num_channels = prof->channels;
#endif
devc->max_samplerate *= SR_MHZ(1);
devc->memory_size = MEMORY_SIZE_8K;
- // memset(devc->trigger_buffer, 0, NUM_TRIGGER_STAGES);
- for (j = 0; j < devc->num_channels; j++)
+ for (j = 0; j < devc->num_channels; j++) {
sr_channel_new(sdi, j, SR_CHANNEL_LOGIC, TRUE,
channel_names[j]);
+ }
devices = g_slist_append(devices, sdi);
- sdi->inst_type = SR_INST_USB;
- sdi->conn = sr_usb_dev_inst_new(
- libusb_get_bus_number(devlist[i]),
- libusb_get_device_address(devlist[i]), NULL);
}
libusb_free_device_list(devlist, 1);
#include <math.h>
#include "protocol.h"
-SR_PRIV unsigned int get_memory_size(int type)
+SR_PRIV size_t get_memory_size(int type)
{
if (type == MEMORY_SIZE_8K)
return (8 * 1024);
- else if (type <= MEMORY_SIZE_8M)
+ if (type <= MEMORY_SIZE_8M)
return (32 * 1024) << type;
- else
- return 0;
+ return 0;
}
static int clz(unsigned int x)
SR_PRIV int set_limit_samples(struct dev_context *devc, uint64_t samples)
{
+ size_t mem_kb;
+
if (samples > devc->max_sample_depth)
samples = devc->max_sample_depth;
else
devc->memory_size = 19 - clz(samples - 1);
- sr_info("Setting memory size to %dK.",
- get_memory_size(devc->memory_size) / 1024);
+ mem_kb = get_memory_size(devc->memory_size) / 1024;
+ sr_info("Setting memory size to %zuK.", mem_kb);
analyzer_set_memory_size(devc->memory_size);
#define LOG_PREFIX "zeroplus-logic-cube"
+struct zp_model;
struct dev_context {
uint64_t cur_samplerate;
uint64_t max_samplerate;
uint64_t limit_samples;
- int num_channels;
- int memory_size;
- unsigned int max_sample_depth;
- //uint8_t channel_mask;
- //uint8_t trigger_mask[NUM_TRIGGER_STAGES];
- //uint8_t trigger_value[NUM_TRIGGER_STAGES];
- // uint8_t trigger_buffer[NUM_TRIGGER_STAGES];
+ size_t num_channels;
+ size_t memory_size;
+ size_t max_sample_depth;
int trigger;
uint64_t capture_ratio;
double cur_threshold;
const struct zp_model *prof;
};
-SR_PRIV unsigned int get_memory_size(int type);
+SR_PRIV size_t get_memory_size(int type);
SR_PRIV int zp_set_samplerate(struct dev_context *devc, uint64_t samplerate);
SR_PRIV int set_limit_samples(struct dev_context *devc, uint64_t samples);
SR_PRIV int set_voltage_threshold(struct dev_context *devc, double thresh);