X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Fzeroplus-logic-cube%2Fgl_usb.c;h=20993286d275ffde471cebbe9809b4ef850c76f7;hb=43cd4637285833706f8a404ca027bcf0ee75b9ae;hp=6b894da91cd994d0601412d535e2079f97771f2f;hpb=45c59c8bdd01954f9214fe7b869d92c55415d109;p=libsigrok.git diff --git a/hardware/zeroplus-logic-cube/gl_usb.c b/hardware/zeroplus-logic-cube/gl_usb.c index 6b894da9..20993286 100644 --- a/hardware/zeroplus-logic-cube/gl_usb.c +++ b/hardware/zeroplus-logic-cube/gl_usb.c @@ -1,5 +1,5 @@ /* - * This file is part of the sigrok project. + * This file is part of the libsigrok project. * * Copyright (C) 2010 Sven Peter * Copyright (C) 2010 Haxx Enterprises @@ -29,11 +29,12 @@ * THE POSSIBILITY OF SUCH DAMAGE. */ -#include #include +#include #include "libsigrok.h" #include "libsigrok-internal.h" #include "gl_usb.h" +#include "protocol.h" #define CTRL_IN (LIBUSB_REQUEST_TYPE_VENDOR | LIBUSB_ENDPOINT_IN | \ LIBUSB_RECIPIENT_INTERFACE) @@ -58,8 +59,7 @@ static int gl_write_address(libusb_device_handle *devh, unsigned int address) ret = libusb_control_transfer(devh, CTRL_OUT, 0xc, REQ_WRITEADDR, 0, packet, 1, TIMEOUT); if (ret != 1) - sr_err("zp: %s: libusb_control_transfer returned %d.", - __func__, ret); + sr_err("%s: %s.", __func__, libusb_error_name(ret)); return ret; } @@ -71,8 +71,7 @@ static int gl_write_data(libusb_device_handle *devh, unsigned int val) ret = libusb_control_transfer(devh, CTRL_OUT, 0xc, REQ_WRITEDATA, 0, packet, 1, TIMEOUT); if (ret != 1) - sr_err("zp: %s: libusb_control_transfer returned %d.", - __func__, ret); + sr_err("%s: %s.", __func__, libusb_error_name(ret)); return ret; } @@ -84,8 +83,8 @@ static int gl_read_data(libusb_device_handle *devh) ret = libusb_control_transfer(devh, CTRL_IN, 0xc, REQ_READDATA, 0, packet, 1, TIMEOUT); if (ret != 1) - sr_err("zp: %s: libusb_control_transfer returned %d, " - "val=%hhx.", __func__, ret, packet[0]); + sr_err("%s: %s, val=%hhx.", __func__, + libusb_error_name(ret), packet[0]); return (ret == 1) ? packet[0] : ret; } @@ -100,13 +99,14 @@ SR_PRIV int gl_read_bulk(libusb_device_handle *devh, void *buffer, ret = libusb_control_transfer(devh, CTRL_OUT, 0x4, REQ_READBULK, 0, packet, 8, TIMEOUT); if (ret != 8) - sr_err("zp: %s: libusb_control_transfer returned %d.", - __func__, ret); + sr_err("%s: libusb_control_transfer: %s.", __func__, + libusb_error_name(ret)); ret = libusb_bulk_transfer(devh, EP1_BULK_IN, buffer, size, &transferred, TIMEOUT); if (ret < 0) - sr_err("zp: Bulk read error %d.", ret); + sr_err("%s: libusb_bulk_transfer: %s.", __func__, + libusb_error_name(ret)); return transferred; } @@ -132,3 +132,21 @@ SR_PRIV int gl_reg_read(libusb_device_handle *devh, unsigned int reg) ret = gl_read_data(devh); return ret; } + +SR_PRIV int gl_reg_read_buf(libusb_device_handle *devh, unsigned int reg, + unsigned char *buf, unsigned int len) +{ + int ret; + unsigned int i; + + ret = gl_write_address(devh, reg); + if (ret < 0) + return ret; + for (i = 0; i < len; i++) { + ret = gl_read_data(devh); + if (ret < 0) + return ret; + buf[i] = ret; + } + return 0; +}