Example #1
0
static void sm_do_capture(struct fpi_ssm *ssm)
{
	struct fp_img_dev *dev = ssm->priv;
	struct v5s_dev *vdev = dev->priv;

	fp_dbg("");
	vdev->capture_img = fpi_img_new_for_imgdev(dev);
	vdev->capture_iteration = 0;
	capture_iterate(ssm);
}
Example #2
0
static int capture(struct fp_img_dev *dev, gboolean unconditional,
	struct fp_img **ret)
{
	int i;
	int r;
	struct fp_img *img;
	unsigned char *data;
	unsigned char *ptr;

	r = aes_write_regv(dev, init_reqs, G_N_ELEMENTS(init_reqs));
	if (r < 0)
		return r;

	img = fpi_img_new_for_imgdev(dev);
	data = g_malloc(DATA_BUFLEN);
	ptr = data;

	/* See the timeout explanation in the uru4000 driver for the reasoning
	 * behind this silly loop. */
retry:
	r = usb_bulk_read(dev->udev, EP_IN, data, DATA_BUFLEN, 1000);
	if (r == -ETIMEDOUT)
		goto retry;

	if (r < 0) {
		fp_err("data read failed, error %d", r);
		goto err;
	} else if (r < DATA_BUFLEN) {
		fp_err("short data read (%d)", r);
		r = -EIO;
		goto err;
	}

	for (i = 0; i < NR_SUBARRAYS; i++) {
		fp_dbg("subarray header byte %02x", *ptr);
		ptr++;
		aes_assemble_image(ptr, 96, 16, img->data + (i * 96 * 16));
		ptr += SUBARRAY_LEN;
	}

	img->flags = FP_IMG_COLORS_INVERTED | FP_IMG_V_FLIPPED | FP_IMG_H_FLIPPED;
	*ret = img;
	g_free(data);
	return 0;
err:
	g_free(data);
	fp_img_free(img);
	return r;
}