X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=hardware%2Ftesto%2Fapi.c;h=9c22893b23084a8da72331d312c01d7350dbcbbb;hb=b5bbc3f1b00d5f3096c6800af4069fb07704d3a9;hp=8dcdf1cb35d1c57d429510b2495e83a1c3ef289e;hpb=8789564070383e058cf5c9511c80c2398ff221e2;p=libsigrok.git diff --git a/hardware/testo/api.c b/hardware/testo/api.c index 8dcdf1cb..9c22893b 100644 --- a/hardware/testo/api.c +++ b/hardware/testo/api.c @@ -18,7 +18,6 @@ */ #include -#include #include "protocol.h" #define SERIALCOMM "115200/8n1" @@ -186,6 +185,16 @@ static int dev_open(struct sr_dev_inst *sdi) return SR_ERR; } + if (libusb_has_capability(LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER)) { + if (libusb_kernel_driver_active(usb->devhdl, 0) == 1) { + if ((ret = libusb_detach_kernel_driver(usb->devhdl, 0)) < 0) { + sr_err("Failed to detach kernel driver: %s.", + libusb_error_name(ret)); + return SR_ERR; + } + } + } + if ((ret = libusb_claim_interface(usb->devhdl, 0))) { sr_err("Failed to claim interface: %s.", libusb_error_name(ret)); return SR_ERR; @@ -345,8 +354,7 @@ static void receive_data(struct sr_dev_inst *sdi, unsigned char *data, int len) return; crc = crc16_mcrf4xx(0xffff, devc->reply, devc->reply_size - 2); - if ((crc & 0xff) == devc->reply[devc->reply_size - 2] - && (crc >> 8) == devc->reply[devc->reply_size - 1]) { + if (crc == RL16(&devc->reply[devc->reply_size - 2])) { testo_receive_packet(sdi); devc->num_samples++; } else {