+ sr_dbg("Getting device status.");
+
+ usb = sdi->conn;
+ buf = CMD_GET_STATUS;
+ ret = libusb_bulk_transfer(usb->devhdl, EP_OUT, &buf, 1, &len, 5);
+ if (ret != 0 || len != 1) {
+ sr_dbg("Failed to get status: %s", libusb_error_name(ret));
+ return SR_ERR;
+ }
+
+ ret = libusb_bulk_transfer(usb->devhdl, EP_IN, &buf, 1, &len, 10);
+ if (ret != 0 || len != 1) {
+ sr_dbg("Failed to get status (no ack): %s", libusb_error_name(ret));
+ return SR_ERR;
+ }
+ /* Need either 0x84 or 0xa4. */
+ if (buf != (CMD_GET_STATUS | 0x80) && buf != (CMD_GET_STATUS | 0xa0)) {
+ sr_dbg("Failed to get status: invalid response 0x%2.x", buf);
+ return SR_ERR;
+ }
+
+ if (buf & 0x20)
+ *status = DEVICE_INACTIVE;
+ else
+ *status = DEVICE_ACTIVE;