int fpc_enroll_step(uint32_t *remaining_touches) { fpc_send_std_cmd_t* send_cmd = (fpc_send_std_cmd_t*) mHandle->ion_sbuffer; fpc_send_std_cmd_t* rec_cmd = (fpc_send_std_cmd_t*) mHandle->ion_sbuffer + 64; send_cmd->cmd_id = FPC_ENROLL_STEP; send_cmd->ret_val = 0x24; int ret = send_cmd_fn(mHandle,send_cmd,64,rec_cmd,64); if(ret < 0) { return -1; } *remaining_touches = fpc_get_remaining_touches(); return rec_cmd->ret_val; }
void *enroll_thread_loop() { ALOGI("%s", __func__); fpc_enroll_start(1); int status = 1; while((status = fpc_capture_image()) >= 0) { ALOGD("%s : Got Input", __func__); if (status <= FINGERPRINT_ACQUIRED_TOO_FAST) { fingerprint_msg_t msg; msg.type = FINGERPRINT_ACQUIRED; msg.data.acquired.acquired_info = status; callback(&msg); } //image captured if (status == FINGERPRINT_ACQUIRED_GOOD) { ALOGI("%s : Enroll Step", __func__); if (fpc_enroll_step() < 100) { int remaining_touches = fpc_get_remaining_touches(); ALOGI("%s : Touches Remaining : %d", __func__, remaining_touches); if (remaining_touches > 0) { fingerprint_msg_t msg; msg.type = FINGERPRINT_TEMPLATE_ENROLLING; msg.data.enroll.finger.fid = 0; msg.data.enroll.finger.gid = 0; msg.data.enroll.samples_remaining = remaining_touches; msg.data.enroll.msg = 0; callback(&msg); } } else { int print_index = fpc_enroll_end(); ALOGI("%s : Got print index : %d", __func__,print_index); uint32_t db_length = fpc_get_user_db_length(); ALOGI("%s : User Database Length Is : %lu", __func__,(unsigned long) db_length); fpc_store_user_db(db_length, db_path); uint32_t print_id = fpc_get_print_id(print_index); ALOGI("%s : Got print id : %lu", __func__,(unsigned long) print_id); fingerprint_msg_t msg; msg.type = FINGERPRINT_TEMPLATE_ENROLLING; msg.data.enroll.finger.fid = print_id; msg.data.enroll.finger.gid = 0; msg.data.enroll.samples_remaining = 0; msg.data.enroll.msg = 0; callback(&msg); break; } } pthread_mutex_lock(&lock); if (!auth_thread_running) { pthread_mutex_unlock(&lock); break; } pthread_mutex_unlock(&lock); } fpc_enroll_end(); ALOGI("%s : finishing",__func__); pthread_mutex_lock(&lock); auth_thread_running = false; pthread_mutex_unlock(&lock); return NULL; }