Exemple #1
0
static void capture_read_data_cb(struct libusb_transfer *transfer)
{
	struct fpi_ssm *ssm = transfer->user_data;
	struct fp_img_dev *dev = ssm->priv;
	unsigned char *data = transfer->buffer;
	struct fp_img *img;

	if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
		fp_dbg("request is not completed, %d", transfer->status);
		fpi_ssm_mark_aborted(ssm, -EIO);
		goto out;
	} else if (transfer->length != transfer->actual_length) {
		fp_dbg("expected %d, sent %d bytes", transfer->length, transfer->actual_length);
		fpi_ssm_mark_aborted(ssm, -EPROTO);
		goto out;
	}

	img = fpi_img_new(IMAGE_SIZE);
	memcpy(img->data, data, IMAGE_SIZE);
	fpi_imgdev_image_captured(dev, img);
	fpi_imgdev_report_finger_status(dev, FALSE);
	fpi_ssm_mark_completed(ssm);
out:
	g_free(transfer->buffer);
	libusb_free_transfer(transfer);
}
Exemple #2
0
static int submit_image(struct fpi_ssm *ssm)
{
	struct fp_img_dev *dev = ssm->priv;
	vfs301_dev_t *vdev = dev->priv;
	int height;
	struct fp_img *img;

#if 0
	/* XXX: This is probably handled by libfprint automagically? */
	if (vdev->scanline_count < 20) {
		fpi_ssm_jump_to_state(ssm, M_REQUEST_PRINT);
		return 0;
	}
#endif

	img = fpi_img_new(VFS301_FP_OUTPUT_WIDTH * vdev->scanline_count);
	if (img == NULL)
		return 0;

	vfs301_extract_image(vdev, img->data, &height);

	/* TODO: how to detect flip? should the resulting image be
	 * oriented so that it is equal e.g. to a fingerprint on a paper,
	 * or to the finger when I look at it?) */
	img->flags = FP_IMG_COLORS_INVERTED | FP_IMG_V_FLIPPED;

	img->width = VFS301_FP_OUTPUT_WIDTH;
	img->height = height;

	img = fpi_img_resize(img, img->height * img->width);
	fpi_imgdev_image_captured(dev, img);

	return 1;
}
Exemple #3
0
static void capture_cb(struct libusb_transfer *transfer)
{
	struct fpi_ssm *ssm = transfer->user_data;
	struct fp_img_dev *dev = ssm->priv;
	struct v5s_dev *vdev = dev->priv;

	if (transfer->status != LIBUSB_TRANSFER_COMPLETED) {
		fpi_ssm_mark_aborted(ssm, -EIO);
		goto out;
	}

	if (++vdev->capture_iteration == NR_REQS) {
		struct fp_img *img = vdev->capture_img;
		/* must clear this early, otherwise the call chain takes us into
		 * loopsm_complete where we would free it, when in fact we are
		 * supposed to be handing off this image */
		vdev->capture_img = NULL;

		fpi_imgdev_report_finger_status(dev, finger_is_present(img->data));
		fpi_imgdev_image_captured(dev, img);
		fpi_ssm_next_state(ssm);
	} else {
		capture_iterate(ssm);
	}

out:
	libusb_free_transfer(transfer);
}
Exemple #4
0
static void capture_set_idle_cmd_cb(struct libusb_transfer *transfer)
{
	struct fpi_ssm *ssm = transfer->user_data;
	struct fp_img_dev *dev = ssm->priv;
	struct aesX660_dev *aesdev = dev->priv;

	if ((transfer->status == LIBUSB_TRANSFER_COMPLETED) &&
		(transfer->length == transfer->actual_length)) {
		struct fp_img *img;

		aesdev->strips = g_slist_reverse(aesdev->strips);
		img = fpi_assemble_frames(aesdev->assembling_ctx, aesdev->strips, aesdev->strips_len);
		img->flags |= aesdev->extra_img_flags;
		g_slist_foreach(aesdev->strips, (GFunc) g_free, NULL);
		g_slist_free(aesdev->strips);
		aesdev->strips = NULL;
		aesdev->strips_len = 0;
		fpi_imgdev_image_captured(dev, img);
		fpi_imgdev_report_finger_status(dev, FALSE);
		fpi_ssm_mark_completed(ssm);
	} else {
		fpi_ssm_mark_aborted(ssm, -EIO);
	}
	libusb_free_transfer(transfer);
}
void et_assemble_image(struct fpi_img_dev* dev)
{
 //size_t sz=(61440/4)*8;
 //size_t sz=(61440*8)+6144;
 size_t sz=(192*160);
 //size_t sz=(61440/2)*8;
 //size_t sz=320*384;
 struct fp_img* img;
 int pos=0;
 char* p;

 img=fpi_img_new(sz);
 //img->flags=FP_IMG_COLORS_INVERTED;
 img->flags=FP_IMG_STANDARDIZATION_FLAGS;
 for(int i=0;i<8;i++)
 {
  for(int x=0;x<20;x++)
  {
   p=et_get_row(et_img_buf[i],x);
   for(int y=0;y<768;y+=4,pos++)
   {
    img->data[pos]=p[y];
   }
  }
  
  /*if(i)
  {
   memcpy(&img->data[pos],et_img_buf[i],61440);
   pos+=61440;
  }
  else
  {
   memcpy(&img->data[pos],et_img_buf[i],6144);
   pos+=6144;
  }*/
  /*for(int x=0;x<61440;x+=4,pos++)
  {
   img->data[pos]=et_img_buf[i][x];
  } */
  
  /*for(int x=0;x<61440;x+=2,pos++)
  {
   img->data[pos]=et_img_buf[i][x];
  }*/
  
  /*for(int x=0;x<61440;x+=2,pos++)
  {
   if(x && !(x%384))
   {
    x+=384; //continue;
   }
   img->data[pos]=et_img_buf[i][x];
  }*/
 }
 fpi_imgdev_image_captured(dev,img);
 free_img_buf();
}
Exemple #6
0
static int submit_image(struct fp_img_dev *dev)
{
    struct vfs0050_dev *vfs_dev = dev->priv;
    struct fp_img *img = NULL;
    int final_height;
    char *processed_image;
    tmp_writeout_buf(dev);

    process_image_data(dev, &processed_image, &final_height); //the fun part

    img = fpi_img_new(VFS0050_IMG_WIDTH * final_height);
    if (img == NULL)
        return 0;

    memcpy(img->data, processed_image, final_height * VFS0050_IMG_WIDTH);
    free(processed_image);
    img->width = VFS0050_IMG_WIDTH;
    img->height = final_height;
    img->flags = FP_IMG_V_FLIPPED;
    fpi_imgdev_image_captured(dev, img);
    return 1;
}