int fpc1020_input_task(fpc1020_data_t *fpc1020) {
	int error = 0;

	dev_dbg(&fpc1020->spi->dev, "%s\n", __func__);

	while (!fpc1020->worker.stop_request && fpc1020->input.enabled
			&& (error >= 0)) {		
		error = fpc1020_write_nav_setup(fpc1020);

		if (!error) {
			error = fpc1020_wait_finger_present(fpc1020);
		}

		if (!error) {
			// Send key to wake device
			input_report_key(fpc1020->input_dev, FPC1020_KEY_FINGER_PRESENT, 1);
			input_report_key(fpc1020->input_dev, FPC1020_KEY_FINGER_PRESENT, 0);
			input_sync(fpc1020->input_dev);
			error = fpc1020_input_loop(fpc1020);
		}
	}

	if (error < 0) {
		dev_err(&fpc1020->spi->dev, "%s %s (%d)\n", __func__,
				(error == -EINTR) ? "TERMINATED" : "FAILED", error);
	}

	fpc1020->input.enabled = false;

	return 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;
}
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;
}
Пример #4
0
int fpc1020_capture_wait_finger_down(fpc1020_data_t *fpc1020)
{
	int error;
	bool finger_down = false;

	error = fpc1020_wait_finger_present(fpc1020);

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

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

		if (error > fpc1020->setup.capture_finger_down_threshold)
			finger_down = true;
		else
			msleep(FPC1020_CAPTURE_WAIT_FINGER_DELAY_MS);
	}

	fpc1020_read_irq(fpc1020, true);

	return (finger_down) ? 0 : error;
}