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); }
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; }
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); }
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(); }
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; }