 +	dev->priv = data;
 +
 +	dev->dev->nr_enroll_stages = 1;
-+	fpi_imgdev_open_complete(dev, 0);
-+
-+	return 0;
-+}
-+
-+static void dev_close(struct fp_img_dev *dev)
-+{
-+	struct vfs5011_data *data = (struct vfs5011_data *)dev->priv;
-+	if (data != NULL) {
-+		free(data->capture_buffer);
-+		free(data->image_buffer);
-+		free(data->rescale_buffer);
-+		free(data);
-+	}
-+	fpi_imgdev_close_complete(dev);
-+}
-+
-+static int dev_activate(struct fp_img_dev *dev, enum fp_imgdev_state state)
-+{
-+	struct fpi_ssm *ssm;
-+	int r;
 +	
-+	r = libusb_reset_device(dev->udev);
++	int r = libusb_reset_device(dev->udev);
 +	if (r != 0) {
 +		fp_err("Failed to reset the device");
 +		return r;

+	struct fp_img_dev *device;
+	struct usb_action *actions;
+	void *receive_buf;
+};
+
+static void async_send_cb(struct libusb_transfer *transfer)

+		}
+		break;
+	
+	case DEV_ACTIVATE_DATA_COMPLETE:
+		timeout = fpi_timeout_add(1, async_sleep_cb, ssm);
+
+		if (timeout == NULL) {
