static void finger_det_data_cb(struct libusb_transfer *transfer) { struct fp_img_dev *dev = transfer->user_data; struct upektc_dev *upekdev = dev->priv; unsigned char *data = transfer->buffer; if (transfer->status != LIBUSB_TRANSFER_COMPLETED) { fp_dbg("data transfer status %d\n", transfer->status); fpi_imgdev_session_error(dev, -EIO); goto out; } else if (transfer->length != transfer->actual_length) { fp_dbg("expected %d, got %d bytes", transfer->length, transfer->actual_length); fpi_imgdev_session_error(dev, -EPROTO); } if (finger_present(data, IMAGE_SIZE, upekdev->sum_threshold)) { /* finger present, start capturing */ fpi_imgdev_report_finger_status(dev, TRUE); start_capture(dev); } else { /* no finger, poll for a new histogram */ start_finger_detection(dev); } out: g_free(data); libusb_free_transfer(transfer); }
static void et_read_poll_cb(struct libusb_transfer* transfer) { int len; char* br; int r; struct poll_data* adata=transfer->user_data; struct fpi_img_dev* dev=adata->dev; if(transfer->status!=LIBUSB_TRANSFER_COMPLETED) { /*WORKAROUND NEEDED, SOMETIME ALL FREEZES, RESET DEVICE AND REACTIVATE???*/ libusb_free_transfer(transfer); fp_dbg("ERROR"); fpi_imgdev_session_error(dev,-EIO); //return; goto _st; } len=transfer->actual_length-13; if(len!=512) { fp_dbg("Invalid return buffer, length: %d",transfer->actual_length); libusb_free_transfer(transfer); fpi_imgdev_session_error(dev,-EPROTO); return; } libusb_free_transfer(transfer); //Check poll cmd result br=(char*)&ret_buf[len]; r=et_verify_result(br); if(r) { fp_dbg("Invalid result: %s",print_buf(br)); fpi_imgdev_session_error(dev,-EPROTO); return; } //fp_dbg("0x%02hhX,0x%02hhX",ret_buf[0],ret_buf[1]); if((unsigned char)ret_buf[0]==0x82) { if(adata->init->rstage<20) { /*VERY UGLY workaround below, but I don't know how to deal with it. Sometime ret_buf[0] equals 0x82 at the first poll rounds, but really no finger on the scanner */ fp_dbg("POLL WORKAROUND"); goto _st; } //Finger detected //fp_dbg("FINGER DETECTED!"); //fp_dbg("BUF: %s",print_buf(ret_buf)); fpi_imgdev_report_finger_status(dev,TRUE); start_capture(dev); return; } //No finger detected _st: adata->init->rstage++; start_finger_detection(dev,adata); }
static void activate_sm_complete(struct fpi_ssm *ssm) { struct fp_img_dev *dev = ssm->priv; fp_dbg("status %d", ssm->error); fpi_imgdev_activate_complete(dev, ssm->error); if (!ssm->error) start_finger_detection(dev); fpi_ssm_free(ssm); }
static void capture_sm_complete(struct fpi_ssm *ssm) { struct fp_img_dev *dev = ssm->priv; struct upektc_dev *upekdev = dev->priv; fp_dbg("Capture completed"); if (upekdev->deactivating) complete_deactivation(dev); else if (ssm->error) fpi_imgdev_session_error(dev, ssm->error); else start_finger_detection(dev); fpi_ssm_free(ssm); }
/* jump to finger detection */ static void activate_sm_complete(struct fpi_ssm *ssm) { static struct poll_data adata; struct fp_img_dev *dev = ssm->priv; fp_dbg("status %d", ssm->error); fpi_imgdev_activate_complete(dev, ssm->error); if (!ssm->error) memset(&einit,0,sizeof(struct et_init)); adata.dev=(struct fpi_img_dev*)dev; adata.init=&einit; start_finger_detection(dev,&adata); fpi_ssm_free(ssm); }
static void capture_sm_complete(struct fpi_ssm *ssm) { struct fp_img_dev *dev = ssm->priv; struct aesX660_dev *aesdev = dev->priv; int err = ssm->error; fp_dbg("Capture completed"); fpi_ssm_free(ssm); if (aesdev->deactivating) complete_deactivation(dev); else if (err) fpi_imgdev_session_error(dev, err); else start_finger_detection(dev); }
static void capture_sm_complete(struct fpi_ssm *ssm) { static struct poll_data adata; struct fp_img_dev *dev = ssm->priv; struct etss801u_dev *etdev = dev->priv; fp_dbg(""); if (etdev->deactivating) complete_deactivation(dev); else if (ssm->error) fpi_imgdev_session_error(dev, ssm->error); else /*Done finger enrolling, assemble image and give it to library*/ et_assemble_image(dev); fpi_imgdev_report_finger_status(dev, FALSE); memset(&einit,0,sizeof(struct et_init)); adata.dev=(struct fpi_img_dev*)dev; adata.init=&einit; start_finger_detection(dev,&adata); fpi_ssm_free(ssm); }