int fpc1020_capture_wait_finger_down(fpc1020_data_t *fpc1020)
{
    int error = 0;
    int thold = 32;
    int addthred = 30;

    if( fpc1020->setup.finger_auto_threshold ){
        error = fpc1020_read_irq(fpc1020, true);
        if (error < 0)
            goto out_error;
        error = fpc1020_cmd(fpc1020,
                FPC1020_CMD_FINGER_PRESENT_QUERY,
                FPC_1020_IRQ_REG_BIT_COMMAND_DONE);
        if (error < 0)
            goto out_error;
        error = fpc1020_capture_set_crop(fpc1020,fpc1020->setup.wakeup_detect_cols[0],1,fpc1020->setup.wakeup_detect_rows[0],8);
        if (error < 0)
            goto out_error;
        error = cal_thredhold(fpc1020);
        if (error < 0)
            goto out_error;
        thold = error;
        error = fpc1020_capture_set_crop(fpc1020,fpc1020->setup.wakeup_detect_cols[1],1,fpc1020->setup.wakeup_detect_rows[1],8);
        if (error < 0)
            goto out_error;
        error = cal_thredhold(fpc1020);
        if (error < 0)
            goto out_error;
        if(error > thold)
            thold = error;
        thold += addthred;
        if(thold < fpc1020->fp_thredhold && thold >= addthred)
            fpc1020->fp_thredhold = thold;
        printk("fingerprint fp_thredhold =%d default_hold=%d det1=[%d,1,%d,8] det2=[%d,1,%d,8]\n",\
                fpc1020->fp_thredhold,fpc1020->setup.finger_detect_threshold,\
                fpc1020->setup.wakeup_detect_cols[0],fpc1020->setup.wakeup_detect_rows[0],\
                fpc1020->setup.wakeup_detect_cols[1],fpc1020->setup.wakeup_detect_rows[1]);
        fpc1020_wake_up(fpc1020);
        fpc1020_write_sensor_setup(fpc1020);
    }

    error = fpc1020_wait_finger_present(fpc1020);

     fpc1020_read_irq(fpc1020, true);

out_error:
    return (error >= 0) ? 0 : error;
}
/* -------------------------------------------------------------------- */
int fpc1020_capture_wait_finger_up(fpc1020_data_t *fpc1020)
{
    int error = 0;
    bool finger_up = false;
    int i = 0;
    wake_lock(&fpc1020->fp_wake_lock);
    while (!finger_up && (error >= 0)) {


        // todo: awaiting SW-152

        if (fpc1020->worker.stop_request){
            error = -EINTR;
            break;
        }
        else
            error = fpc1020_check_finger_present_sum(fpc1020);

        i++;
        if(i > 100){
            i = 0;
            printk("%s:finger present sum = %d \n", __func__, error);
        }

        if ((error >= 0) && (error <= FPC1020_FINGER_UP_THRESHOLD))
            finger_up = true;
        else
            msleep(FPC1020_CAPTURE_WAIT_FINGER_DELAY_MS);
    }

    fpc1020_read_irq(fpc1020, true);
    wake_unlock(&fpc1020->fp_wake_lock);
    wake_lock_timeout(&fpc1020->fp_wake_lock, FPC1020_DEFAULT_WAKELOCK_TIME_S);
    return (finger_up) ? 0 : error;
}
int fpc1020_capture_nav_wait_finger_down(fpc1020_data_t* fpc1020)
{
    int error = 0;

    error = fpc1020_wait_finger_present(fpc1020);


    fpc1020_read_irq(fpc1020, true);

    return (error >= 0) ? 0 : error;
}
Exemplo n.º 4
0
int fpc1020_capture_wait_finger_up(fpc1020_data_t *fpc1020)
{
	int error = 0;
	bool finger_up = false;

	while (!finger_up && (error >= 0)) {

		if (fpc1020->worker.stop_request)
			error = -EINTR;
		else
			error = fpc1020_check_finger_present_sum(fpc1020);

		if ((error >= 0) && (error < fpc1020->setup.capture_finger_up_threshold + 1))
			finger_up = true;
		else
			msleep(FPC1020_CAPTURE_WAIT_FINGER_DELAY_MS);
	}

	fpc1020_read_irq(fpc1020, true);

	return (finger_up) ? 0 : error;
}