Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > 36c3913465aa447b7a02f02786061291 > files > 18

libfprint-devel-0.3.0-1.fc14.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>libfprint: Device operations</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.7.1 -->
<script type="text/javascript">
function hasClass(ele,cls) {
  return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function addClass(ele,cls) {
  if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}

function removeClass(ele,cls) {
  if (hasClass(ele,cls)) {
    var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
    ele.className=ele.className.replace(reg,' ');
  }
}

function toggleVisibility(linkObj) {
 var base = linkObj.getAttribute('id');
 var summary = document.getElementById(base + '-summary');
 var content = document.getElementById(base + '-content');
 var trigger = document.getElementById(base + '-trigger');
 if ( hasClass(linkObj,'closed') ) {
   summary.style.display = 'none';
   content.style.display = 'block';
   trigger.src = 'open.png';
   removeClass(linkObj,'closed');
   addClass(linkObj,'opened');
 } else if ( hasClass(linkObj,'opened') ) {
   summary.style.display = 'block';
   content.style.display = 'none';
   trigger.src = 'closed.png';
   removeClass(linkObj,'opened');
   addClass(linkObj,'closed');
 }
 return false;
}
</script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
</div>
<div class="header">
  <div class="summary">
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a>  </div>
  <div class="headertitle">
<h1>Device operations</h1>  </div>
</div>
<div class="contents">

<p>In order to interact with fingerprint scanners, your software will interface primarily with libfprint's representation of devices, detailed on this page.  
<a href="#_details">More...</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga522218ddb7c587d2bb472ea399588ffa">fp_scan_type</a> { <b>FP_SCAN_TYPE_PRESS</b> =  0, 
<a class="el" href="group__dev.html#gga522218ddb7c587d2bb472ea399588ffaaf8c87c55dc15177a1ebdbe80d03a8bc6">FP_SCAN_TYPE_SWIPE</a>
 }</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>Numeric codes used to refer to the scan type of the device. </p>
 <a href="group__dev.html#ga522218ddb7c587d2bb472ea399588ffa">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga29155cb920a7e294b2962616d8ad64fb">fp_enroll_result</a> { <br/>
&nbsp;&nbsp;<a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba9a699d6f712901a9e5faa90b66c1e7a9">FP_ENROLL_COMPLETE</a> =  1, 
<a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba58d4c3752f6421d571f7867745700272">FP_ENROLL_FAIL</a>, 
<a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba176d4d91638eacffc98bbc9e07c1ae03">FP_ENROLL_PASS</a>, 
<a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba348a9db89e08b72c21e2b06c0dd9c76a">FP_ENROLL_RETRY</a> =  100, 
<br/>
&nbsp;&nbsp;<a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba24b3f9177f5057c10b4efc195da9ac75">FP_ENROLL_RETRY_TOO_SHORT</a>, 
<a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba046767ecf132502a212aa1a69bb042e6">FP_ENROLL_RETRY_CENTER_FINGER</a>, 
<a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba65353ad4e9480b035fcf50281d9917c4">FP_ENROLL_RETRY_REMOVE_FINGER</a>
<br/>
 }</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>Enrollment result codes returned from <a class="el" href="group__dev.html#ga6fbb9f101f718f06c19f4ccabd112e17" title="Performs an enroll stage.">fp_enroll_finger()</a>. </p>
 <a href="group__dev.html#ga29155cb920a7e294b2962616d8ad64fb">More...</a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">enum &nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga6945ffc512c323a40720b859445fd898">fp_verify_result</a> { <br/>
&nbsp;&nbsp;<a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a65da9e8c0d65ccafd126512d595b0974">FP_VERIFY_NO_MATCH</a> =  0, 
<a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a5f86198b93e1ac93f26753f99a1acff4">FP_VERIFY_MATCH</a> =  1, 
<a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a0acf6b5809cb4cc4e85f07bee1971293">FP_VERIFY_RETRY</a> =  FP_ENROLL_RETRY, 
<a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898ad0aab2c3337e78ef7b400723108d4f30">FP_VERIFY_RETRY_TOO_SHORT</a> =  FP_ENROLL_RETRY_TOO_SHORT, 
<br/>
&nbsp;&nbsp;<a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898ac1f395f79ec278d0014a6ae52d501e47">FP_VERIFY_RETRY_CENTER_FINGER</a> =  FP_ENROLL_RETRY_CENTER_FINGER, 
<a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a12bae160415e9c059c52ea716586c01d">FP_VERIFY_RETRY_REMOVE_FINGER</a> =  FP_ENROLL_RETRY_REMOVE_FINGER
<br/>
 }</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight"><p>Verification result codes returned from <a class="el" href="group__dev.html#ga33a22bb0cd9460c911dd301dcdf4c929" title="Performs a new scan and verify it against a previously enrolled print.">fp_verify_finger()</a>. </p>
 <a href="group__dev.html#ga6945ffc512c323a40720b859445fd898">More...</a><br/></td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct fp_driver *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga2c59ac8e66e76587265dd44676db006b">fp_dev_get_driver</a> (struct fp_dev *dev)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Get the <a class="el" href="group__drv.html">driver</a> for a fingerprint device.  <a href="#ga2c59ac8e66e76587265dd44676db006b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga709ece32f96f734ce7f1c85dd80cbc6d">fp_dev_get_nr_enroll_stages</a> (struct fp_dev *dev)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the number of <a class="el" href="group__dev.html#enrolling">enroll stages</a> required to enroll a fingerprint with the device.  <a href="#ga709ece32f96f734ce7f1c85dd80cbc6d"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint32_t&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga0395d9befefc0ddd4416035b5dc54fd3">fp_dev_get_devtype</a> (struct fp_dev *dev)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the <a class="el" href="group__dev.html#devtype">devtype</a> for a device.  <a href="#ga0395d9befefc0ddd4416035b5dc54fd3"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gae5a402c86979779b98e22a26a3d4bd7b">fp_dev_supports_print_data</a> (struct fp_dev *dev, struct fp_print_data *data)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines if a stored print is compatible with a certain device.  <a href="#gae5a402c86979779b98e22a26a3d4bd7b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gafc4dbf5ef42f4506d4c1d717ed2a4cd5">fp_dev_supports_dscv_print</a> (struct fp_dev *dev, struct fp_dscv_print *data)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines if a <a class="el" href="group__dscv__print.html">discovered print</a> appears to be compatible with a certain device.  <a href="#gafc4dbf5ef42f4506d4c1d717ed2a4cd5"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga520edf22e305280cc3a51aa0c38922de">fp_dev_supports_imaging</a> (struct fp_dev *dev)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines if a device has imaging capabilities.  <a href="#ga520edf22e305280cc3a51aa0c38922de"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gafe6fec65d8ff4c48eea11055c80f6785">fp_dev_supports_identification</a> (struct fp_dev *dev)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Determines if a device is capable of <a class="el" href="index.html#identification">identification</a> through <a class="el" href="group__dev.html#gaca931eb81012e612b4546c63082a712b" title="Performs a new scan and attempts to identify the scanned finger against a collection of previously en...">fp_identify_finger()</a> and similar.  <a href="#gafe6fec65d8ff4c48eea11055c80f6785"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gaa7a7f70b12f0276df4749d23caf2cecd">fp_dev_img_capture</a> (struct fp_dev *dev, int unconditional, struct fp_img **image)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Captures an <a class="el" href="group__img.html">image</a> from a device.  <a href="#gaa7a7f70b12f0276df4749d23caf2cecd"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gaa80c290c0b05f2a9621b1c51a22278bd">fp_dev_get_img_width</a> (struct fp_dev *dev)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the expected width of images that will be captured from the device.  <a href="#gaa80c290c0b05f2a9621b1c51a22278bd"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gaa79b477e4cac642056c64c458af88a28">fp_dev_get_img_height</a> (struct fp_dev *dev)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Gets the expected height of images that will be captured from the device.  <a href="#gaa79b477e4cac642056c64c458af88a28"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga6fbb9f101f718f06c19f4ccabd112e17">fp_enroll_finger</a> (struct fp_dev *dev, struct fp_print_data **print_data)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs an enroll stage.  <a href="#ga6fbb9f101f718f06c19f4ccabd112e17"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga33a22bb0cd9460c911dd301dcdf4c929">fp_verify_finger</a> (struct fp_dev *dev, struct fp_print_data *enrolled_print)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a new scan and verify it against a previously enrolled print.  <a href="#ga33a22bb0cd9460c911dd301dcdf4c929"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gaca931eb81012e612b4546c63082a712b">fp_identify_finger</a> (struct fp_dev *dev, struct fp_print_data **print_gallery, size_t *match_offset)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a new scan and attempts to identify the scanned finger against a collection of previously enrolled fingerprints.  <a href="#gaca931eb81012e612b4546c63082a712b"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">struct fp_dev *&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gaadd81517ba2e3f1279525a326d0e6ee4">fp_dev_open</a> (struct fp_dscv_dev *ddev)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Opens and initialises a device.  <a href="#gaadd81517ba2e3f1279525a326d0e6ee4"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gaa073e271cfbbea1fecc3e4fc6abb7299">fp_dev_close</a> (struct fp_dev *dev)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Close a device.  <a href="#gaa073e271cfbbea1fecc3e4fc6abb7299"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#gae8f36a456208018fe2aa53fa44979e3f">fp_enroll_finger_img</a> (struct fp_dev *dev, struct fp_print_data **print_data, struct fp_img **img)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs an enroll stage.  <a href="#gae8f36a456208018fe2aa53fa44979e3f"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga267c6b214779a7d1bfbc722b6094ef20">fp_verify_finger_img</a> (struct fp_dev *dev, struct fp_print_data *enrolled_print, struct fp_img **img)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a new scan and verify it against a previously enrolled print.  <a href="#ga267c6b214779a7d1bfbc722b6094ef20"></a><br/></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__dev.html#ga65d5a34cf824ef2225f93a5742d2c2f6">fp_identify_finger_img</a> (struct fp_dev *dev, struct fp_print_data **print_gallery, size_t *match_offset, struct fp_img **img)</td></tr>
<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Performs a new scan and attempts to identify the scanned finger against a collection of previously enrolled fingerprints.  <a href="#ga65d5a34cf824ef2225f93a5742d2c2f6"></a><br/></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>In order to interact with fingerprint scanners, your software will interface primarily with libfprint's representation of devices, detailed on this page. </p>
<h2><a class="anchor" id="enrolling"></a>
Enrolling</h2>
<p>Enrolling is represented within libfprint as a multi-stage process. This slightly complicates things for application developers, but is required for a smooth process.</p>
<p>Some devices require the user to scan their finger multiple times in order to complete the enrollment process. libfprint must return control to your application inbetween each scan in order for your application to instruct the user to swipe their finger again. Each scan is referred to as a stage, so a device that requires 3 scans for enrollment corresponds to you running 3 enrollment stages using libfprint.</p>
<p>The <a class="el" href="group__dev.html#ga709ece32f96f734ce7f1c85dd80cbc6d" title="Gets the number of enroll stages required to enroll a fingerprint with the device.">fp_dev_get_nr_enroll_stages()</a> function can be used to find out how many enroll stages are needed.</p>
<p>In order to complete an enroll stage, you call an enroll function such as <a class="el" href="group__dev.html#ga6fbb9f101f718f06c19f4ccabd112e17" title="Performs an enroll stage.">fp_enroll_finger()</a>. The return of this function does not necessarily indicate that a stage has completed though, as the user may not have produced a good enough scan. Each stage may have to be retried several times.</p>
<p>The exact semantics of the enroll functions are described in the <a class="el" href="group__dev.html#ga6fbb9f101f718f06c19f4ccabd112e17" title="Performs an enroll stage.">fp_enroll_finger()</a> documentation. You should pay careful attention to the details.</p>
<h2><a class="anchor" id="imaging"></a>
Imaging</h2>
<p>libfprint provides you with some ways to retrieve images of scanned fingers, such as the <a class="el" href="group__dev.html#gaa7a7f70b12f0276df4749d23caf2cecd" title="Captures an image from a device.">fp_dev_img_capture()</a> function, or some enroll/verify function variants which provide images. You may wish to do something with such images in your application.</p>
<p>However, you must be aware that not all hardware supported by libfprint operates like this. Most hardware does operate simply by sending fingerprint images to the host computer for further processing, but some devices do all fingerprint processing in hardware and do not present images to the host computer.</p>
<p>You can use <a class="el" href="group__dev.html#ga520edf22e305280cc3a51aa0c38922de" title="Determines if a device has imaging capabilities.">fp_dev_supports_imaging()</a> to see if image capture is possible on a particular device. Your application must be able to cope with the fact that libfprint does support regular operations (e.g. enrolling and verification) on some devices which do not provide images.</p>
<h2><a class="anchor" id="devtype"></a>
Devtypes</h2>
<p>Internally, the <a class="el" href="group__drv.html">driver</a> behind a device assigns a 32-bit <em>devtype</em> identifier to the device. This cannot be used as a unique ID for a specific device as many devices under the same range may share the same devtype. The devtype may even be 0 in all cases.</p>
<p>The only reason you may be interested in retrieving the devtype for a device is for the purpose of checking if some print data is compatible with a device. libfprint uses the devtype as one way of checking that the print you are verifying is compatible with the device in question - the devtypes must be equal. This effectively allows drivers to support more than one type of device where the data from each one is not compatible with the other. Note that libfprint does provide you with helper functions to determine whether a print is compatible with a device, so under most circumstances, you don't have to worry about devtypes at all. </p>
<hr/><h2>Enumeration Type Documentation</h2>
<a class="anchor" id="ga522218ddb7c587d2bb472ea399588ffa"></a><!-- doxytag: member="fprint.h::fp_scan_type" ref="ga522218ddb7c587d2bb472ea399588ffa" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__dev.html#ga522218ddb7c587d2bb472ea399588ffa">fp_scan_type</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Numeric codes used to refer to the scan type of the device. </p>
<p>Devices require either swiping or pressing the finger on the device. This is useful for front-ends. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga522218ddb7c587d2bb472ea399588ffaaf8c87c55dc15177a1ebdbe80d03a8bc6"></a><!-- doxytag: member="FP_SCAN_TYPE_SWIPE" ref="gga522218ddb7c587d2bb472ea399588ffaaf8c87c55dc15177a1ebdbe80d03a8bc6" args="" -->FP_SCAN_TYPE_SWIPE</em>&nbsp;</td><td>
<p>press </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga29155cb920a7e294b2962616d8ad64fb"></a><!-- doxytag: member="fprint.h::fp_enroll_result" ref="ga29155cb920a7e294b2962616d8ad64fb" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__dev.html#ga29155cb920a7e294b2962616d8ad64fb">fp_enroll_result</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Enrollment result codes returned from <a class="el" href="group__dev.html#ga6fbb9f101f718f06c19f4ccabd112e17" title="Performs an enroll stage.">fp_enroll_finger()</a>. </p>
<p>Result codes with RETRY in the name suggest that the scan failed due to user error. Applications will generally want to inform the user of the problem and then retry the enrollment stage. For more info on the semantics of interpreting these result codes and tracking enrollment process, see <a class="el" href="group__dev.html#enrolling">Enrolling</a>. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga29155cb920a7e294b2962616d8ad64fba9a699d6f712901a9e5faa90b66c1e7a9"></a><!-- doxytag: member="FP_ENROLL_COMPLETE" ref="gga29155cb920a7e294b2962616d8ad64fba9a699d6f712901a9e5faa90b66c1e7a9" args="" -->FP_ENROLL_COMPLETE</em>&nbsp;</td><td>
<p>Enrollment completed successfully, the enrollment data has been returned to the caller. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga29155cb920a7e294b2962616d8ad64fba58d4c3752f6421d571f7867745700272"></a><!-- doxytag: member="FP_ENROLL_FAIL" ref="gga29155cb920a7e294b2962616d8ad64fba58d4c3752f6421d571f7867745700272" args="" -->FP_ENROLL_FAIL</em>&nbsp;</td><td>
<p>Enrollment failed due to incomprehensible data; this may occur when the user scans a different finger on each enroll stage. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga29155cb920a7e294b2962616d8ad64fba176d4d91638eacffc98bbc9e07c1ae03"></a><!-- doxytag: member="FP_ENROLL_PASS" ref="gga29155cb920a7e294b2962616d8ad64fba176d4d91638eacffc98bbc9e07c1ae03" args="" -->FP_ENROLL_PASS</em>&nbsp;</td><td>
<p>Enroll stage passed; more stages are need to complete the process. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga29155cb920a7e294b2962616d8ad64fba348a9db89e08b72c21e2b06c0dd9c76a"></a><!-- doxytag: member="FP_ENROLL_RETRY" ref="gga29155cb920a7e294b2962616d8ad64fba348a9db89e08b72c21e2b06c0dd9c76a" args="" -->FP_ENROLL_RETRY</em>&nbsp;</td><td>
<p>The enrollment scan did not succeed due to poor scan quality or other general user scanning problem. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga29155cb920a7e294b2962616d8ad64fba24b3f9177f5057c10b4efc195da9ac75"></a><!-- doxytag: member="FP_ENROLL_RETRY_TOO_SHORT" ref="gga29155cb920a7e294b2962616d8ad64fba24b3f9177f5057c10b4efc195da9ac75" args="" -->FP_ENROLL_RETRY_TOO_SHORT</em>&nbsp;</td><td>
<p>The enrollment scan did not succeed because the finger swipe was too short. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga29155cb920a7e294b2962616d8ad64fba046767ecf132502a212aa1a69bb042e6"></a><!-- doxytag: member="FP_ENROLL_RETRY_CENTER_FINGER" ref="gga29155cb920a7e294b2962616d8ad64fba046767ecf132502a212aa1a69bb042e6" args="" -->FP_ENROLL_RETRY_CENTER_FINGER</em>&nbsp;</td><td>
<p>The enrollment scan did not succeed because the finger was not centered on the scanner. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga29155cb920a7e294b2962616d8ad64fba65353ad4e9480b035fcf50281d9917c4"></a><!-- doxytag: member="FP_ENROLL_RETRY_REMOVE_FINGER" ref="gga29155cb920a7e294b2962616d8ad64fba65353ad4e9480b035fcf50281d9917c4" args="" -->FP_ENROLL_RETRY_REMOVE_FINGER</em>&nbsp;</td><td>
<p>The verification scan did not succeed due to quality or pressure problems; the user should remove their finger from the scanner before retrying. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<a class="anchor" id="ga6945ffc512c323a40720b859445fd898"></a><!-- doxytag: member="fprint.h::fp_verify_result" ref="ga6945ffc512c323a40720b859445fd898" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">enum <a class="el" href="group__dev.html#ga6945ffc512c323a40720b859445fd898">fp_verify_result</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Verification result codes returned from <a class="el" href="group__dev.html#ga33a22bb0cd9460c911dd301dcdf4c929" title="Performs a new scan and verify it against a previously enrolled print.">fp_verify_finger()</a>. </p>
<p>Return codes are also shared with <a class="el" href="group__dev.html#gaca931eb81012e612b4546c63082a712b" title="Performs a new scan and attempts to identify the scanned finger against a collection of previously en...">fp_identify_finger()</a>. Result codes with RETRY in the name suggest that the scan failed due to user error. Applications will generally want to inform the user of the problem and then retry the verify operation. </p>
<dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0">
<tr><td valign="top"><em><a class="anchor" id="gga6945ffc512c323a40720b859445fd898a65da9e8c0d65ccafd126512d595b0974"></a><!-- doxytag: member="FP_VERIFY_NO_MATCH" ref="gga6945ffc512c323a40720b859445fd898a65da9e8c0d65ccafd126512d595b0974" args="" -->FP_VERIFY_NO_MATCH</em>&nbsp;</td><td>
<p>The scan completed successfully, but the newly scanned fingerprint does not match the fingerprint being verified against. </p>
<p>In the case of identification, this return code indicates that the scanned finger could not be found in the print gallery. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga6945ffc512c323a40720b859445fd898a5f86198b93e1ac93f26753f99a1acff4"></a><!-- doxytag: member="FP_VERIFY_MATCH" ref="gga6945ffc512c323a40720b859445fd898a5f86198b93e1ac93f26753f99a1acff4" args="" -->FP_VERIFY_MATCH</em>&nbsp;</td><td>
<p>The scan completed successfully and the newly scanned fingerprint does match the fingerprint being verified, or in the case of identification, the scanned fingerprint was found in the print gallery. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga6945ffc512c323a40720b859445fd898a0acf6b5809cb4cc4e85f07bee1971293"></a><!-- doxytag: member="FP_VERIFY_RETRY" ref="gga6945ffc512c323a40720b859445fd898a0acf6b5809cb4cc4e85f07bee1971293" args="" -->FP_VERIFY_RETRY</em>&nbsp;</td><td>
<p>The scan did not succeed due to poor scan quality or other general user scanning problem. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga6945ffc512c323a40720b859445fd898ad0aab2c3337e78ef7b400723108d4f30"></a><!-- doxytag: member="FP_VERIFY_RETRY_TOO_SHORT" ref="gga6945ffc512c323a40720b859445fd898ad0aab2c3337e78ef7b400723108d4f30" args="" -->FP_VERIFY_RETRY_TOO_SHORT</em>&nbsp;</td><td>
<p>The scan did not succeed because the finger swipe was too short. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga6945ffc512c323a40720b859445fd898ac1f395f79ec278d0014a6ae52d501e47"></a><!-- doxytag: member="FP_VERIFY_RETRY_CENTER_FINGER" ref="gga6945ffc512c323a40720b859445fd898ac1f395f79ec278d0014a6ae52d501e47" args="" -->FP_VERIFY_RETRY_CENTER_FINGER</em>&nbsp;</td><td>
<p>The scan did not succeed because the finger was not centered on the scanner. </p>
</td></tr>
<tr><td valign="top"><em><a class="anchor" id="gga6945ffc512c323a40720b859445fd898a12bae160415e9c059c52ea716586c01d"></a><!-- doxytag: member="FP_VERIFY_RETRY_REMOVE_FINGER" ref="gga6945ffc512c323a40720b859445fd898a12bae160415e9c059c52ea716586c01d" args="" -->FP_VERIFY_RETRY_REMOVE_FINGER</em>&nbsp;</td><td>
<p>The scan did not succeed due to quality or pressure problems; the user should remove their finger from the scanner before retrying. </p>
</td></tr>
</table>
</dd>
</dl>

</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="ga2c59ac8e66e76587265dd44676db006b"></a><!-- doxytag: member="core.c::fp_dev_get_driver" ref="ga2c59ac8e66e76587265dd44676db006b" args="(struct fp_dev *dev)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct fp_driver* fp_dev_get_driver </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Get the <a class="el" href="group__drv.html">driver</a> for a fingerprint device. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the driver controlling the device </dd></dl>

</div>
</div>
<a class="anchor" id="ga709ece32f96f734ce7f1c85dd80cbc6d"></a><!-- doxytag: member="core.c::fp_dev_get_nr_enroll_stages" ref="ga709ece32f96f734ce7f1c85dd80cbc6d" args="(struct fp_dev *dev)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_dev_get_nr_enroll_stages </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Gets the number of <a class="el" href="group__dev.html#enrolling">enroll stages</a> required to enroll a fingerprint with the device. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the number of enroll stages </dd></dl>

</div>
</div>
<a class="anchor" id="ga0395d9befefc0ddd4416035b5dc54fd3"></a><!-- doxytag: member="core.c::fp_dev_get_devtype" ref="ga0395d9befefc0ddd4416035b5dc54fd3" args="(struct fp_dev *dev)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">uint32_t fp_dev_get_devtype </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Gets the <a class="el" href="group__dev.html#devtype">devtype</a> for a device. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the devtype </dd></dl>

</div>
</div>
<a class="anchor" id="gae5a402c86979779b98e22a26a3d4bd7b"></a><!-- doxytag: member="core.c::fp_dev_supports_print_data" ref="gae5a402c86979779b98e22a26a3d4bd7b" args="(struct fp_dev *dev, struct fp_print_data *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_dev_supports_print_data </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_print_data *&nbsp;</td>
          <td class="paramname"> <em>data</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determines if a stored print is compatible with a certain device. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>the stored print </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>1 if the print is compatible with the device, 0 if not </dd></dl>

<p>Referenced by <a class="el" href="group__print__data.html#ga55244830b6ad7e4a04d184d95bc7e865">fp_print_data_load()</a>, and <a class="el" href="group__dev.html#ga267c6b214779a7d1bfbc722b6094ef20">fp_verify_finger_img()</a>.</p>

</div>
</div>
<a class="anchor" id="gafc4dbf5ef42f4506d4c1d717ed2a4cd5"></a><!-- doxytag: member="core.c::fp_dev_supports_dscv_print" ref="gafc4dbf5ef42f4506d4c1d717ed2a4cd5" args="(struct fp_dev *dev, struct fp_dscv_print *data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_dev_supports_dscv_print </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_dscv_print *&nbsp;</td>
          <td class="paramname"> <em>data</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determines if a <a class="el" href="group__dscv__print.html">discovered print</a> appears to be compatible with a certain device. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>data</em>&nbsp;</td><td>the discovered print </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>1 if the print is compatible with the device, 0 if not </dd></dl>

</div>
</div>
<a class="anchor" id="ga520edf22e305280cc3a51aa0c38922de"></a><!-- doxytag: member="core.c::fp_dev_supports_imaging" ref="ga520edf22e305280cc3a51aa0c38922de" args="(struct fp_dev *dev)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_dev_supports_imaging </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determines if a device has imaging capabilities. </p>
<p>If a device has imaging capabilities you are able to perform imaging operations such as retrieving scan images using <a class="el" href="group__dev.html#gaa7a7f70b12f0276df4749d23caf2cecd" title="Captures an image from a device.">fp_dev_img_capture()</a>. However, not all devices are imaging devices - some do all processing in hardware. This function will indicate which class a device in question falls into. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the fingerprint device </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>1 if the device is an imaging device, 0 if the device does not provide images to the host computer </dd></dl>

</div>
</div>
<a class="anchor" id="gafe6fec65d8ff4c48eea11055c80f6785"></a><!-- doxytag: member="core.c::fp_dev_supports_identification" ref="gafe6fec65d8ff4c48eea11055c80f6785" args="(struct fp_dev *dev)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_dev_supports_identification </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Determines if a device is capable of <a class="el" href="index.html#identification">identification</a> through <a class="el" href="group__dev.html#gaca931eb81012e612b4546c63082a712b" title="Performs a new scan and attempts to identify the scanned finger against a collection of previously en...">fp_identify_finger()</a> and similar. </p>
<p>Not all devices support this functionality. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the fingerprint device </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>1 if the device is capable of identification, 0 otherwise. </dd></dl>

</div>
</div>
<a class="anchor" id="gaa7a7f70b12f0276df4749d23caf2cecd"></a><!-- doxytag: member="core.c::fp_dev_img_capture" ref="gaa7a7f70b12f0276df4749d23caf2cecd" args="(struct fp_dev *dev, int unconditional, struct fp_img **image)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_dev_img_capture </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>unconditional</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_img **&nbsp;</td>
          <td class="paramname"> <em>image</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Captures an <a class="el" href="group__img.html">image</a> from a device. </p>
<p>The returned image is the raw image provided by the device, you may wish to <a class="el" href="group__img.html#img_std">standardize</a> it.</p>
<p>If set, the <code>unconditional</code> flag indicates that the device should capture an image unconditionally, regardless of whether a finger is there or not. If unset, this function will block until a finger is detected on the sensor.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>unconditional</em>&nbsp;</td><td>whether to unconditionally capture an image, or to only capture when a finger is detected </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>image</em>&nbsp;</td><td>a location to return the captured image. Must be freed with <a class="el" href="group__img.html#ga18dcdd8c27abc8980e4fb9775e84da35" title="Frees an image.">fp_img_free()</a> after use. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, non-zero on error. -ENOTSUP indicates that either the unconditional flag was set but the device does not support this, or that the device does not support imaging. </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__dev.html#ga520edf22e305280cc3a51aa0c38922de" title="Determines if a device has imaging capabilities.">fp_dev_supports_imaging()</a> </dd></dl>

</div>
</div>
<a class="anchor" id="gaa80c290c0b05f2a9621b1c51a22278bd"></a><!-- doxytag: member="core.c::fp_dev_get_img_width" ref="gaa80c290c0b05f2a9621b1c51a22278bd" args="(struct fp_dev *dev)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_dev_get_img_width </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Gets the expected width of images that will be captured from the device. </p>
<p>This function will return -1 for devices that are not <a class="el" href="group__dev.html#imaging">imaging devices</a>. If the width of images from this device can vary, 0 will be returned. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the expected image width, or 0 for variable, or -1 for non-imaging devices. </dd></dl>

</div>
</div>
<a class="anchor" id="gaa79b477e4cac642056c64c458af88a28"></a><!-- doxytag: member="core.c::fp_dev_get_img_height" ref="gaa79b477e4cac642056c64c458af88a28" args="(struct fp_dev *dev)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_dev_get_img_height </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Gets the expected height of images that will be captured from the device. </p>
<p>This function will return -1 for devices that are not <a class="el" href="group__dev.html#imaging">imaging devices</a>. If the height of images from this device can vary, 0 will be returned. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the expected image height, or 0 for variable, or -1 for non-imaging devices. </dd></dl>

</div>
</div>
<a class="anchor" id="ga6fbb9f101f718f06c19f4ccabd112e17"></a><!-- doxytag: member="fprint.h::fp_enroll_finger" ref="ga6fbb9f101f718f06c19f4ccabd112e17" args="(struct fp_dev *dev, struct fp_print_data **print_data)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int fp_enroll_finger </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_print_data **&nbsp;</td>
          <td class="paramname"> <em>print_data</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Performs an enroll stage. </p>
<p>See <a class="el" href="group__dev.html#enrolling">Enrolling</a> for an explanation of enroll stages. This function is just a shortcut to calling <a class="el" href="group__dev.html#gae8f36a456208018fe2aa53fa44979e3f" title="Performs an enroll stage.">fp_enroll_finger_img()</a> with a NULL image parameter. Be sure to read the description of <a class="el" href="group__dev.html#gae8f36a456208018fe2aa53fa44979e3f" title="Performs an enroll stage.">fp_enroll_finger_img()</a> in order to understand its behaviour.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>print_data</em>&nbsp;</td><td>a location to return the resultant enrollment data from the final stage. Must be freed with <a class="el" href="group__print__data.html#ga196516e2967ba5f6244299a179fdb1b7" title="Frees a stored print.">fp_print_data_free()</a> after use. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>negative code on error, otherwise a code from <a class="el" href="group__dev.html#ga29155cb920a7e294b2962616d8ad64fb" title="Enrollment result codes returned from fp_enroll_finger().">fp_enroll_result</a> </dd></dl>

<p>References <a class="el" href="group__dev.html#gae8f36a456208018fe2aa53fa44979e3f">fp_enroll_finger_img()</a>.</p>

</div>
</div>
<a class="anchor" id="ga33a22bb0cd9460c911dd301dcdf4c929"></a><!-- doxytag: member="fprint.h::fp_verify_finger" ref="ga33a22bb0cd9460c911dd301dcdf4c929" args="(struct fp_dev *dev, struct fp_print_data *enrolled_print)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int fp_verify_finger </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_print_data *&nbsp;</td>
          <td class="paramname"> <em>enrolled_print</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Performs a new scan and verify it against a previously enrolled print. </p>
<p>This function is just a shortcut to calling <a class="el" href="group__dev.html#ga267c6b214779a7d1bfbc722b6094ef20" title="Performs a new scan and verify it against a previously enrolled print.">fp_verify_finger_img()</a> with a NULL image output parameter. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device to perform the scan. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>enrolled_print</em>&nbsp;</td><td>the print to verify against. Must have been previously enrolled with a device compatible to the device selected to perform the scan. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>negative code on error, otherwise a code from <a class="el" href="group__dev.html#ga6945ffc512c323a40720b859445fd898" title="Verification result codes returned from fp_verify_finger().">fp_verify_result</a> </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__dev.html#ga267c6b214779a7d1bfbc722b6094ef20" title="Performs a new scan and verify it against a previously enrolled print.">fp_verify_finger_img()</a> </dd></dl>

<p>References <a class="el" href="group__dev.html#ga267c6b214779a7d1bfbc722b6094ef20">fp_verify_finger_img()</a>.</p>

</div>
</div>
<a class="anchor" id="gaca931eb81012e612b4546c63082a712b"></a><!-- doxytag: member="fprint.h::fp_identify_finger" ref="gaca931eb81012e612b4546c63082a712b" args="(struct fp_dev *dev, struct fp_print_data **print_gallery, size_t *match_offset)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static int fp_identify_finger </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_print_data **&nbsp;</td>
          <td class="paramname"> <em>print_gallery</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>match_offset</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [inline, static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Performs a new scan and attempts to identify the scanned finger against a collection of previously enrolled fingerprints. </p>
<p>This function is just a shortcut to calling <a class="el" href="group__dev.html#ga65d5a34cf824ef2225f93a5742d2c2f6" title="Performs a new scan and attempts to identify the scanned finger against a collection of previously en...">fp_identify_finger_img()</a> with a NULL image output parameter. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device to perform the scan. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>print_gallery</em>&nbsp;</td><td>NULL-terminated array of pointers to the prints to identify against. Each one must have been previously enrolled with a device compatible to the device selected to perform the scan. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>match_offset</em>&nbsp;</td><td>output location to store the array index of the matched gallery print (if any was found). Only valid if FP_VERIFY_MATCH was returned. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>negative code on error, otherwise a code from <a class="el" href="group__dev.html#ga6945ffc512c323a40720b859445fd898" title="Verification result codes returned from fp_verify_finger().">fp_verify_result</a> </dd></dl>
<dl class="see"><dt><b>See also:</b></dt><dd><a class="el" href="group__dev.html#ga65d5a34cf824ef2225f93a5742d2c2f6" title="Performs a new scan and attempts to identify the scanned finger against a collection of previously en...">fp_identify_finger_img()</a> </dd></dl>

<p>References <a class="el" href="group__dev.html#ga65d5a34cf824ef2225f93a5742d2c2f6">fp_identify_finger_img()</a>.</p>

</div>
</div>
<a class="anchor" id="gaadd81517ba2e3f1279525a326d0e6ee4"></a><!-- doxytag: member="sync.c::fp_dev_open" ref="gaadd81517ba2e3f1279525a326d0e6ee4" args="(struct fp_dscv_dev *ddev)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">struct fp_dev* fp_dev_open </td>
          <td>(</td>
          <td class="paramtype">struct fp_dscv_dev *&nbsp;</td>
          <td class="paramname"> <em>ddev</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [read]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Opens and initialises a device. </p>
<p>This is the function you call in order to convert a <a class="el" href="group__dscv__dev.html">discovered device</a> into an actual device handle that you can perform operations with. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>ddev</em>&nbsp;</td><td>the discovered device to open </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>the opened device handle, or NULL on error </dd></dl>

<p>References <a class="el" href="group__dev.html#gaa073e271cfbbea1fecc3e4fc6abb7299">fp_dev_close()</a>, and <a class="el" href="group__poll.html#gac90ddc168b563df89954f0cabf9f298e">fp_handle_events()</a>.</p>

</div>
</div>
<a class="anchor" id="gaa073e271cfbbea1fecc3e4fc6abb7299"></a><!-- doxytag: member="sync.c::fp_dev_close" ref="gaa073e271cfbbea1fecc3e4fc6abb7299" args="(struct fp_dev *dev)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void fp_dev_close </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Close a device. </p>
<p>You must call this function when you are finished using a fingerprint device. </p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device to close. If NULL, function simply returns. </td></tr>
  </table>
  </dd>
</dl>

<p>References <a class="el" href="group__poll.html#gac90ddc168b563df89954f0cabf9f298e">fp_handle_events()</a>.</p>

<p>Referenced by <a class="el" href="group__dev.html#gaadd81517ba2e3f1279525a326d0e6ee4">fp_dev_open()</a>, and <a class="el" href="group__core.html#ga47011a58c8a38aa51b329640765815b1">fp_exit()</a>.</p>

</div>
</div>
<a class="anchor" id="gae8f36a456208018fe2aa53fa44979e3f"></a><!-- doxytag: member="sync.c::fp_enroll_finger_img" ref="gae8f36a456208018fe2aa53fa44979e3f" args="(struct fp_dev *dev, struct fp_print_data **print_data, struct fp_img **img)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_enroll_finger_img </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_print_data **&nbsp;</td>
          <td class="paramname"> <em>print_data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_img **&nbsp;</td>
          <td class="paramname"> <em>img</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Performs an enroll stage. </p>
<p>See <a class="el" href="group__dev.html#enrolling">Enrolling</a> for an explanation of enroll stages.</p>
<p>If no enrollment is in process, this kicks of the process and runs the first stage. If an enrollment is already in progress, calling this function runs the next stage, which may well be the last.</p>
<p>A negative error code may be returned from any stage. When this occurs, further calls to the enroll function will start a new enrollment process, i.e. a negative error code indicates that the enrollment process has been aborted. These error codes only ever indicate unexpected internal errors or I/O problems.</p>
<p>The RETRY codes from <a class="el" href="group__dev.html#ga29155cb920a7e294b2962616d8ad64fb" title="Enrollment result codes returned from fp_enroll_finger().">fp_enroll_result</a> may be returned from any enroll stage. These codes indicate that the scan was not succesful in that the user did not position their finger correctly or similar. When a RETRY code is returned, the enrollment stage is <b>not</b> advanced, so the next call into this function will retry the current stage again. The current stage may need to be retried several times.</p>
<p>The fp_enroll_result::FP_ENROLL_FAIL code may be returned from any enroll stage. This code indicates that even though the scans themselves have been acceptable, data processing applied to these scans produces incomprehensible results. In other words, the user may have been scanning a different finger for each stage or something like that. Like negative error codes, this return code indicates that the enrollment process has been aborted.</p>
<p>The fp_enroll_result::FP_ENROLL_PASS code will only ever be returned for non-final stages. This return code indicates that the scan was acceptable and the next call into this function will advance onto the next enroll stage.</p>
<p>The fp_enroll_result::FP_ENROLL_COMPLETE code will only ever be returned from the final enroll stage. It indicates that enrollment completed successfully, and that print_data has been assigned to point to the resultant enrollment data. The print_data parameter will not be modified during any other enrollment stages, hence it is actually legal to pass NULL as this argument for all but the final stage.</p>
<p>If the device is an imaging device, it can also return the image from the scan, even when the enroll fails with a RETRY or FAIL code. It is legal to call this function even on non-imaging devices, just don't expect them to provide images.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>print_data</em>&nbsp;</td><td>a location to return the resultant enrollment data from the final stage. Must be freed with <a class="el" href="group__print__data.html#ga196516e2967ba5f6244299a179fdb1b7" title="Frees a stored print.">fp_print_data_free()</a> after use. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>img</em>&nbsp;</td><td>location to store the scan image. accepts NULL for no image storage. If an image is returned, it must be freed with <a class="el" href="group__img.html#ga18dcdd8c27abc8980e4fb9775e84da35" title="Frees an image.">fp_img_free()</a> after use. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>negative code on error, otherwise a code from <a class="el" href="group__dev.html#ga29155cb920a7e294b2962616d8ad64fb" title="Enrollment result codes returned from fp_enroll_finger().">fp_enroll_result</a> </dd></dl>

<p>References <a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba9a699d6f712901a9e5faa90b66c1e7a9">FP_ENROLL_COMPLETE</a>, <a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba58d4c3752f6421d571f7867745700272">FP_ENROLL_FAIL</a>, <a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba176d4d91638eacffc98bbc9e07c1ae03">FP_ENROLL_PASS</a>, <a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba348a9db89e08b72c21e2b06c0dd9c76a">FP_ENROLL_RETRY</a>, <a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba046767ecf132502a212aa1a69bb042e6">FP_ENROLL_RETRY_CENTER_FINGER</a>, <a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba65353ad4e9480b035fcf50281d9917c4">FP_ENROLL_RETRY_REMOVE_FINGER</a>, <a class="el" href="group__dev.html#gga29155cb920a7e294b2962616d8ad64fba24b3f9177f5057c10b4efc195da9ac75">FP_ENROLL_RETRY_TOO_SHORT</a>, <a class="el" href="group__poll.html#gac90ddc168b563df89954f0cabf9f298e">fp_handle_events()</a>, and <a class="el" href="group__img.html#ga18dcdd8c27abc8980e4fb9775e84da35">fp_img_free()</a>.</p>

<p>Referenced by <a class="el" href="group__dev.html#ga6fbb9f101f718f06c19f4ccabd112e17">fp_enroll_finger()</a>.</p>

</div>
</div>
<a class="anchor" id="ga267c6b214779a7d1bfbc722b6094ef20"></a><!-- doxytag: member="sync.c::fp_verify_finger_img" ref="ga267c6b214779a7d1bfbc722b6094ef20" args="(struct fp_dev *dev, struct fp_print_data *enrolled_print, struct fp_img **img)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_verify_finger_img </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_print_data *&nbsp;</td>
          <td class="paramname"> <em>enrolled_print</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_img **&nbsp;</td>
          <td class="paramname"> <em>img</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Performs a new scan and verify it against a previously enrolled print. </p>
<p>If the device is an imaging device, it can also return the image from the scan, even when the verify fails with a RETRY code. It is legal to call this function even on non-imaging devices, just don't expect them to provide images.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device to perform the scan. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>enrolled_print</em>&nbsp;</td><td>the print to verify against. Must have been previously enrolled with a device compatible to the device selected to perform the scan. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>img</em>&nbsp;</td><td>location to store the scan image. accepts NULL for no image storage. If an image is returned, it must be freed with <a class="el" href="group__img.html#ga18dcdd8c27abc8980e4fb9775e84da35" title="Frees an image.">fp_img_free()</a> after use. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>negative code on error, otherwise a code from <a class="el" href="group__dev.html#ga6945ffc512c323a40720b859445fd898" title="Verification result codes returned from fp_verify_finger().">fp_verify_result</a> </dd></dl>

<p>References <a class="el" href="group__dev.html#gae5a402c86979779b98e22a26a3d4bd7b">fp_dev_supports_print_data()</a>, <a class="el" href="group__poll.html#gac90ddc168b563df89954f0cabf9f298e">fp_handle_events()</a>, <a class="el" href="group__img.html#ga18dcdd8c27abc8980e4fb9775e84da35">fp_img_free()</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a5f86198b93e1ac93f26753f99a1acff4">FP_VERIFY_MATCH</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a65da9e8c0d65ccafd126512d595b0974">FP_VERIFY_NO_MATCH</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a0acf6b5809cb4cc4e85f07bee1971293">FP_VERIFY_RETRY</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898ac1f395f79ec278d0014a6ae52d501e47">FP_VERIFY_RETRY_CENTER_FINGER</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a12bae160415e9c059c52ea716586c01d">FP_VERIFY_RETRY_REMOVE_FINGER</a>, and <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898ad0aab2c3337e78ef7b400723108d4f30">FP_VERIFY_RETRY_TOO_SHORT</a>.</p>

<p>Referenced by <a class="el" href="group__dev.html#ga33a22bb0cd9460c911dd301dcdf4c929">fp_verify_finger()</a>.</p>

</div>
</div>
<a class="anchor" id="ga65d5a34cf824ef2225f93a5742d2c2f6"></a><!-- doxytag: member="sync.c::fp_identify_finger_img" ref="ga65d5a34cf824ef2225f93a5742d2c2f6" args="(struct fp_dev *dev, struct fp_print_data **print_gallery, size_t *match_offset, struct fp_img **img)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int fp_identify_finger_img </td>
          <td>(</td>
          <td class="paramtype">struct fp_dev *&nbsp;</td>
          <td class="paramname"> <em>dev</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_print_data **&nbsp;</td>
          <td class="paramname"> <em>print_gallery</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">size_t *&nbsp;</td>
          <td class="paramname"> <em>match_offset</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">struct fp_img **&nbsp;</td>
          <td class="paramname"> <em>img</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">

<p>Performs a new scan and attempts to identify the scanned finger against a collection of previously enrolled fingerprints. </p>
<p>If the device is an imaging device, it can also return the image from the scan, even when identification fails with a RETRY code. It is legal to call this function even on non-imaging devices, just don't expect them to provide images.</p>
<p>This function returns codes from <a class="el" href="group__dev.html#ga6945ffc512c323a40720b859445fd898" title="Verification result codes returned from fp_verify_finger().">fp_verify_result</a>. The return code fp_verify_result::FP_VERIFY_MATCH indicates that the scanned fingerprint does appear in the print gallery, and the match_offset output parameter will indicate the index into the print gallery array of the matched print.</p>
<p>This function will not necessarily examine the whole print gallery, it will return as soon as it finds a matching print.</p>
<p>Not all devices support identification. -ENOTSUP will be returned when this is the case.</p>
<dl><dt><b>Parameters:</b></dt><dd>
  <table border="0" cellspacing="2" cellpadding="0">
    <tr><td valign="top"></td><td valign="top"><em>dev</em>&nbsp;</td><td>the device to perform the scan. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>print_gallery</em>&nbsp;</td><td>NULL-terminated array of pointers to the prints to identify against. Each one must have been previously enrolled with a device compatible to the device selected to perform the scan. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>match_offset</em>&nbsp;</td><td>output location to store the array index of the matched gallery print (if any was found). Only valid if FP_VERIFY_MATCH was returned. </td></tr>
    <tr><td valign="top"></td><td valign="top"><em>img</em>&nbsp;</td><td>location to store the scan image. accepts NULL for no image storage. If an image is returned, it must be freed with <a class="el" href="group__img.html#ga18dcdd8c27abc8980e4fb9775e84da35" title="Frees an image.">fp_img_free()</a> after use. </td></tr>
  </table>
  </dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>negative code on error, otherwise a code from <a class="el" href="group__dev.html#ga6945ffc512c323a40720b859445fd898" title="Verification result codes returned from fp_verify_finger().">fp_verify_result</a> </dd></dl>

<p>References <a class="el" href="group__poll.html#gac90ddc168b563df89954f0cabf9f298e">fp_handle_events()</a>, <a class="el" href="group__img.html#ga18dcdd8c27abc8980e4fb9775e84da35">fp_img_free()</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a5f86198b93e1ac93f26753f99a1acff4">FP_VERIFY_MATCH</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a65da9e8c0d65ccafd126512d595b0974">FP_VERIFY_NO_MATCH</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a0acf6b5809cb4cc4e85f07bee1971293">FP_VERIFY_RETRY</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898ac1f395f79ec278d0014a6ae52d501e47">FP_VERIFY_RETRY_CENTER_FINGER</a>, <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898a12bae160415e9c059c52ea716586c01d">FP_VERIFY_RETRY_REMOVE_FINGER</a>, and <a class="el" href="group__dev.html#gga6945ffc512c323a40720b859445fd898ad0aab2c3337e78ef7b400723108d4f30">FP_VERIFY_RETRY_TOO_SHORT</a>.</p>

<p>Referenced by <a class="el" href="group__dev.html#gaca931eb81012e612b4546c63082a712b">fp_identify_finger()</a>.</p>

</div>
</div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Wed Sep 8 2010 for libfprint by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address>
</body>
</html>