<!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: Stored prints</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 Page</span></a></li> <li><a href="modules.html"><span>Modules</span></a></li> <li><a href="annotated.html"><span>Data 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> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <h1>Stored prints</h1> </div> </div> <div class="contents"> <p>Stored prints are represented by a structure named <code>fp_print_data</code>. <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 </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#ga5c6d4e10ca53fd0b61eaa4716f3985d5">fp_finger</a> { <br/> <b>LEFT_THUMB</b> = 1, <a class="el" href="group__print__data.html#gga5c6d4e10ca53fd0b61eaa4716f3985d5a8e451ff5c90ff6cf44d266af59d3bcc7">LEFT_INDEX</a>, <a class="el" href="group__print__data.html#gga5c6d4e10ca53fd0b61eaa4716f3985d5a0d98404411ee5451af67ff3fa419bc56">LEFT_MIDDLE</a>, <a class="el" href="group__print__data.html#gga5c6d4e10ca53fd0b61eaa4716f3985d5aeca4b184f4328b2dfdb5530efe124091">LEFT_RING</a>, <br/> <a class="el" href="group__print__data.html#gga5c6d4e10ca53fd0b61eaa4716f3985d5a929a14ed753c249a9ceabc76defc6ef0">LEFT_LITTLE</a>, <a class="el" href="group__print__data.html#gga5c6d4e10ca53fd0b61eaa4716f3985d5a7f13e23fab6f5ade33ec9c8491a3bf25">RIGHT_THUMB</a>, <a class="el" href="group__print__data.html#gga5c6d4e10ca53fd0b61eaa4716f3985d5ada22d9991d3f5cb22d59ae92496af023">RIGHT_INDEX</a>, <a class="el" href="group__print__data.html#gga5c6d4e10ca53fd0b61eaa4716f3985d5a63368eff7313a8e9441fa71d49fa9f71">RIGHT_MIDDLE</a>, <br/> <a class="el" href="group__print__data.html#gga5c6d4e10ca53fd0b61eaa4716f3985d5aa062124fa518709ad3b4a26085cc6d23">RIGHT_RING</a>, <a class="el" href="group__print__data.html#gga5c6d4e10ca53fd0b61eaa4716f3985d5a3aac8fd26588f140348ac03416e5e3c9">RIGHT_LITTLE</a> <br/> }</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Numeric codes used to refer to fingers (and thumbs) of a human. </p> <a href="group__print__data.html#ga5c6d4e10ca53fd0b61eaa4716f3985d5">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">size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#ga3e3d0244d35990e2019a70dd2dc24de0">fp_print_data_get_data</a> (struct fp_print_data *data, unsigned char **ret)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Convert a stored print into a unified representation inside a data buffer. <a href="#ga3e3d0244d35990e2019a70dd2dc24de0"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">struct fp_print_data * </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#gab5032f4f0d5e3e386ed7452c08c27562">fp_print_data_from_data</a> (unsigned char *buf, size_t buflen)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Load a stored print from a data buffer. <a href="#gab5032f4f0d5e3e386ed7452c08c27562"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#ga98b1ba5a31560e8e9831cbe914268cc0">fp_print_data_save</a> (struct fp_print_data *data, enum <a class="el" href="group__print__data.html#ga5c6d4e10ca53fd0b61eaa4716f3985d5">fp_finger</a> finger)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Saves a stored print to disk, assigned to a specific finger. <a href="#ga98b1ba5a31560e8e9831cbe914268cc0"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#ga55244830b6ad7e4a04d184d95bc7e865">fp_print_data_load</a> (struct fp_dev *dev, enum <a class="el" href="group__print__data.html#ga5c6d4e10ca53fd0b61eaa4716f3985d5">fp_finger</a> finger, struct fp_print_data **data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Loads a previously stored print from disk. <a href="#ga55244830b6ad7e4a04d184d95bc7e865"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#gae7fd437d8bcd9026f7b3fa72068f6353">fp_print_data_delete</a> (struct fp_dev *dev, enum <a class="el" href="group__print__data.html#ga5c6d4e10ca53fd0b61eaa4716f3985d5">fp_finger</a> finger)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Removes a stored print from disk previously saved with <a class="el" href="group__print__data.html#ga98b1ba5a31560e8e9831cbe914268cc0" title="Saves a stored print to disk, assigned to a specific finger.">fp_print_data_save()</a>. <a href="#gae7fd437d8bcd9026f7b3fa72068f6353"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#gab7d990f770aa6139ac84a688ae202382">fp_print_data_from_dscv_print</a> (struct fp_dscv_print *print, struct fp_print_data **data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Attempts to load a stored print based on a <a class="el" href="group__dscv__print.html">discovered print</a> record. <a href="#gab7d990f770aa6139ac84a688ae202382"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#ga196516e2967ba5f6244299a179fdb1b7">fp_print_data_free</a> (struct fp_print_data *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Frees a stored print. <a href="#ga196516e2967ba5f6244299a179fdb1b7"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">uint16_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#ga6160a7a0a909f7d263a22a0777550383">fp_print_data_get_driver_id</a> (struct fp_print_data *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Gets the <a class="el" href="group__drv.html#driver_id">driver ID</a> for a stored print. <a href="#ga6160a7a0a909f7d263a22a0777550383"></a><br/></td></tr> <tr><td class="memItemLeft" align="right" valign="top">uint32_t </td><td class="memItemRight" valign="bottom"><a class="el" href="group__print__data.html#ga7aae2b0091ddb586a5e5bec9031a4969">fp_print_data_get_devtype</a> (struct fp_print_data *data)</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Gets the <a class="el" href="group__dev.html#devtype">devtype</a> for a stored print. <a href="#ga7aae2b0091ddb586a5e5bec9031a4969"></a><br/></td></tr> </table> <hr/><a name="_details"></a><h2>Detailed Description</h2> <p>Stored prints are represented by a structure named <code>fp_print_data</code>. </p> <p>Stored prints are originally obtained from an enrollment function such as <a class="el" href="group__dev.html#ga6fbb9f101f718f06c19f4ccabd112e17" title="Performs an enroll stage.">fp_enroll_finger()</a>.</p> <p>This page documents the various operations you can do with a stored print. Note that by default, "stored prints" are not actually stored anywhere except in RAM. For the simple scenarios, libfprint provides a simple API for you to save and load the stored prints referring to a single user in their home directory. For more advanced users, libfprint provides APIs for you to convert print data to a byte string, and to reconstruct stored prints from such data at a later point. You are welcome to store these byte strings in any fashion that suits you. </p> <hr/><h2>Enumeration Type Documentation</h2> <a class="anchor" id="ga5c6d4e10ca53fd0b61eaa4716f3985d5"></a><!-- doxytag: member="fprint.h::fp_finger" ref="ga5c6d4e10ca53fd0b61eaa4716f3985d5" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">enum <a class="el" href="group__print__data.html#ga5c6d4e10ca53fd0b61eaa4716f3985d5">fp_finger</a></td> </tr> </table> </div> <div class="memdoc"> <p>Numeric codes used to refer to fingers (and thumbs) of a human. </p> <p>These are purposely not available as strings, to avoid getting the library tangled up in localization efforts. </p> <dl><dt><b>Enumerator: </b></dt><dd><table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"><em><a class="anchor" id="gga5c6d4e10ca53fd0b61eaa4716f3985d5a8e451ff5c90ff6cf44d266af59d3bcc7"></a><!-- doxytag: member="LEFT_INDEX" ref="gga5c6d4e10ca53fd0b61eaa4716f3985d5a8e451ff5c90ff6cf44d266af59d3bcc7" args="" -->LEFT_INDEX</em> </td><td> <p>thumb (left hand) </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="gga5c6d4e10ca53fd0b61eaa4716f3985d5a0d98404411ee5451af67ff3fa419bc56"></a><!-- doxytag: member="LEFT_MIDDLE" ref="gga5c6d4e10ca53fd0b61eaa4716f3985d5a0d98404411ee5451af67ff3fa419bc56" args="" -->LEFT_MIDDLE</em> </td><td> <p>index finger (left hand) </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="gga5c6d4e10ca53fd0b61eaa4716f3985d5aeca4b184f4328b2dfdb5530efe124091"></a><!-- doxytag: member="LEFT_RING" ref="gga5c6d4e10ca53fd0b61eaa4716f3985d5aeca4b184f4328b2dfdb5530efe124091" args="" -->LEFT_RING</em> </td><td> <p>middle finger (left hand) </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="gga5c6d4e10ca53fd0b61eaa4716f3985d5a929a14ed753c249a9ceabc76defc6ef0"></a><!-- doxytag: member="LEFT_LITTLE" ref="gga5c6d4e10ca53fd0b61eaa4716f3985d5a929a14ed753c249a9ceabc76defc6ef0" args="" -->LEFT_LITTLE</em> </td><td> <p>ring finger (left hand) </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="gga5c6d4e10ca53fd0b61eaa4716f3985d5a7f13e23fab6f5ade33ec9c8491a3bf25"></a><!-- doxytag: member="RIGHT_THUMB" ref="gga5c6d4e10ca53fd0b61eaa4716f3985d5a7f13e23fab6f5ade33ec9c8491a3bf25" args="" -->RIGHT_THUMB</em> </td><td> <p>little finger (left hand) </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="gga5c6d4e10ca53fd0b61eaa4716f3985d5ada22d9991d3f5cb22d59ae92496af023"></a><!-- doxytag: member="RIGHT_INDEX" ref="gga5c6d4e10ca53fd0b61eaa4716f3985d5ada22d9991d3f5cb22d59ae92496af023" args="" -->RIGHT_INDEX</em> </td><td> <p>thumb (right hand) </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="gga5c6d4e10ca53fd0b61eaa4716f3985d5a63368eff7313a8e9441fa71d49fa9f71"></a><!-- doxytag: member="RIGHT_MIDDLE" ref="gga5c6d4e10ca53fd0b61eaa4716f3985d5a63368eff7313a8e9441fa71d49fa9f71" args="" -->RIGHT_MIDDLE</em> </td><td> <p>index finger (right hand) </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="gga5c6d4e10ca53fd0b61eaa4716f3985d5aa062124fa518709ad3b4a26085cc6d23"></a><!-- doxytag: member="RIGHT_RING" ref="gga5c6d4e10ca53fd0b61eaa4716f3985d5aa062124fa518709ad3b4a26085cc6d23" args="" -->RIGHT_RING</em> </td><td> <p>middle finger (right hand) </p> </td></tr> <tr><td valign="top"><em><a class="anchor" id="gga5c6d4e10ca53fd0b61eaa4716f3985d5a3aac8fd26588f140348ac03416e5e3c9"></a><!-- doxytag: member="RIGHT_LITTLE" ref="gga5c6d4e10ca53fd0b61eaa4716f3985d5a3aac8fd26588f140348ac03416e5e3c9" args="" -->RIGHT_LITTLE</em> </td><td> <p>ring finger (right hand) </p> </td></tr> </table> </dd> </dl> </div> </div> <hr/><h2>Function Documentation</h2> <a class="anchor" id="ga3e3d0244d35990e2019a70dd2dc24de0"></a><!-- doxytag: member="data.c::fp_print_data_get_data" ref="ga3e3d0244d35990e2019a70dd2dc24de0" args="(struct fp_print_data *data, unsigned char **ret)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t fp_print_data_get_data </td> <td>(</td> <td class="paramtype">struct fp_print_data * </td> <td class="paramname"> <em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">unsigned char ** </td> <td class="paramname"> <em>ret</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Convert a stored print into a unified representation inside a data buffer. </p> <p>You can then store this data buffer in any way that suits you, and load it back at some later time using <a class="el" href="group__print__data.html#gab5032f4f0d5e3e386ed7452c08c27562" title="Load a stored print from a data buffer.">fp_print_data_from_data()</a>. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>the stored print </td></tr> <tr><td valign="top"></td><td valign="top"><em>ret</em> </td><td>output location for the data buffer. Must be freed with free() after use. </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>the size of the freshly allocated buffer, or 0 on error. </dd></dl> <p>Referenced by <a class="el" href="group__print__data.html#ga98b1ba5a31560e8e9831cbe914268cc0">fp_print_data_save()</a>.</p> </div> </div> <a class="anchor" id="gab5032f4f0d5e3e386ed7452c08c27562"></a><!-- doxytag: member="data.c::fp_print_data_from_data" ref="gab5032f4f0d5e3e386ed7452c08c27562" args="(unsigned char *buf, size_t buflen)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">struct fp_print_data* fp_print_data_from_data </td> <td>(</td> <td class="paramtype">unsigned char * </td> <td class="paramname"> <em>buf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"> <em>buflen</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td><code> [read]</code></td> </tr> </table> </div> <div class="memdoc"> <p>Load a stored print from a data buffer. </p> <p>The contents of said buffer must be the untouched contents of a buffer previously supplied to you by the <a class="el" href="group__print__data.html#ga3e3d0244d35990e2019a70dd2dc24de0" title="Convert a stored print into a unified representation inside a data buffer.">fp_print_data_get_data()</a> function. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>buf</em> </td><td>the data buffer </td></tr> <tr><td valign="top"></td><td valign="top"><em>buflen</em> </td><td>the length of the buffer </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>the stored print represented by the data, or NULL on error. 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. </dd></dl> </div> </div> <a class="anchor" id="ga98b1ba5a31560e8e9831cbe914268cc0"></a><!-- doxytag: member="data.c::fp_print_data_save" ref="ga98b1ba5a31560e8e9831cbe914268cc0" args="(struct fp_print_data *data, enum fp_finger finger)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int fp_print_data_save </td> <td>(</td> <td class="paramtype">struct fp_print_data * </td> <td class="paramname"> <em>data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">enum <a class="el" href="group__print__data.html#ga5c6d4e10ca53fd0b61eaa4716f3985d5">fp_finger</a> </td> <td class="paramname"> <em>finger</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Saves a stored print to disk, assigned to a specific finger. </p> <p>Even though you are limited to storing only the 10 human fingers, this is a per-device-type limit. For example, you can store the users right index finger from a DigitalPersona scanner, and you can also save the right index finger from a UPEK scanner. When you later come to load the print, the right one will be automatically selected.</p> <p>This function will unconditionally overwrite a fingerprint previously saved for the same finger and device type. The print is saved in a hidden directory beneath the current user's home directory. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>the stored print to save to disk </td></tr> <tr><td valign="top"></td><td valign="top"><em>finger</em> </td><td>the finger that this print corresponds to </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, non-zero on error. </dd></dl> <p>References <a class="el" href="group__print__data.html#ga3e3d0244d35990e2019a70dd2dc24de0">fp_print_data_get_data()</a>.</p> </div> </div> <a class="anchor" id="ga55244830b6ad7e4a04d184d95bc7e865"></a><!-- doxytag: member="data.c::fp_print_data_load" ref="ga55244830b6ad7e4a04d184d95bc7e865" args="(struct fp_dev *dev, enum fp_finger finger, struct fp_print_data **data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int fp_print_data_load </td> <td>(</td> <td class="paramtype">struct fp_dev * </td> <td class="paramname"> <em>dev</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">enum <a class="el" href="group__print__data.html#ga5c6d4e10ca53fd0b61eaa4716f3985d5">fp_finger</a> </td> <td class="paramname"> <em>finger</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct fp_print_data ** </td> <td class="paramname"> <em>data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Loads a previously stored print from disk. </p> <p>The print must have been saved earlier using the <a class="el" href="group__print__data.html#ga98b1ba5a31560e8e9831cbe914268cc0" title="Saves a stored print to disk, assigned to a specific finger.">fp_print_data_save()</a> function.</p> <p>A return code of -ENOENT indicates that the fingerprint requested could not be found. Other error codes (both positive and negative) are possible for obscure error conditions (e.g. corruption).</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> </td><td>the device you are loading the print for </td></tr> <tr><td valign="top"></td><td valign="top"><em>finger</em> </td><td>the finger of the file you are loading </td></tr> <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>output location to put the corresponding stored print. 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>0 on success, non-zero on error </dd></dl> <p>References <a class="el" href="group__dev.html#gae5a402c86979779b98e22a26a3d4bd7b">fp_dev_supports_print_data()</a>, and <a class="el" href="group__print__data.html#ga196516e2967ba5f6244299a179fdb1b7">fp_print_data_free()</a>.</p> </div> </div> <a class="anchor" id="gae7fd437d8bcd9026f7b3fa72068f6353"></a><!-- doxytag: member="data.c::fp_print_data_delete" ref="gae7fd437d8bcd9026f7b3fa72068f6353" args="(struct fp_dev *dev, enum fp_finger finger)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int fp_print_data_delete </td> <td>(</td> <td class="paramtype">struct fp_dev * </td> <td class="paramname"> <em>dev</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">enum <a class="el" href="group__print__data.html#ga5c6d4e10ca53fd0b61eaa4716f3985d5">fp_finger</a> </td> <td class="paramname"> <em>finger</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Removes a stored print from disk previously saved with <a class="el" href="group__print__data.html#ga98b1ba5a31560e8e9831cbe914268cc0" title="Saves a stored print to disk, assigned to a specific finger.">fp_print_data_save()</a>. </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> </td><td>the device that the print belongs to </td></tr> <tr><td valign="top"></td><td valign="top"><em>finger</em> </td><td>the finger of the file you are deleting </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>0 on success, negative on error </dd></dl> </div> </div> <a class="anchor" id="gab7d990f770aa6139ac84a688ae202382"></a><!-- doxytag: member="data.c::fp_print_data_from_dscv_print" ref="gab7d990f770aa6139ac84a688ae202382" args="(struct fp_dscv_print *print, struct fp_print_data **data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int fp_print_data_from_dscv_print </td> <td>(</td> <td class="paramtype">struct fp_dscv_print * </td> <td class="paramname"> <em>print</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct fp_print_data ** </td> <td class="paramname"> <em>data</em></td><td> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td><td></td> </tr> </table> </div> <div class="memdoc"> <p>Attempts to load a stored print based on a <a class="el" href="group__dscv__print.html">discovered print</a> record. </p> <p>A return code of -ENOENT indicates that the file referred to by the discovered print could not be found. Other error codes (both positive and negative) are possible for obscure error conditions (e.g. corruption).</p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>print</em> </td><td>the discovered print </td></tr> <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>output location to point to the corresponding stored print. 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>0 on success, non-zero on error. </dd></dl> </div> </div> <a class="anchor" id="ga196516e2967ba5f6244299a179fdb1b7"></a><!-- doxytag: member="data.c::fp_print_data_free" ref="ga196516e2967ba5f6244299a179fdb1b7" args="(struct fp_print_data *data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void fp_print_data_free </td> <td>(</td> <td class="paramtype">struct fp_print_data * </td> <td class="paramname"> <em>data</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Frees a stored print. </p> <p>Must be called when you are finished using the print. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>the stored print to destroy. If NULL, function simply returns. </td></tr> </table> </dd> </dl> <p>Referenced by <a class="el" href="group__print__data.html#ga55244830b6ad7e4a04d184d95bc7e865">fp_print_data_load()</a>.</p> </div> </div> <a class="anchor" id="ga6160a7a0a909f7d263a22a0777550383"></a><!-- doxytag: member="data.c::fp_print_data_get_driver_id" ref="ga6160a7a0a909f7d263a22a0777550383" args="(struct fp_print_data *data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">uint16_t fp_print_data_get_driver_id </td> <td>(</td> <td class="paramtype">struct fp_print_data * </td> <td class="paramname"> <em>data</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Gets the <a class="el" href="group__drv.html#driver_id">driver ID</a> for a stored print. </p> <p>The driver ID indicates which driver the print originally came from. The print is only usable with a device controlled by that driver. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>the stored print </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>the driver ID of the driver compatible with the print </dd></dl> </div> </div> <a class="anchor" id="ga7aae2b0091ddb586a5e5bec9031a4969"></a><!-- doxytag: member="data.c::fp_print_data_get_devtype" ref="ga7aae2b0091ddb586a5e5bec9031a4969" args="(struct fp_print_data *data)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">uint32_t fp_print_data_get_devtype </td> <td>(</td> <td class="paramtype">struct fp_print_data * </td> <td class="paramname"> <em>data</em></td> <td> ) </td> <td></td> </tr> </table> </div> <div class="memdoc"> <p>Gets the <a class="el" href="group__dev.html#devtype">devtype</a> for a stored print. </p> <p>The devtype represents which type of device under the parent driver is compatible with the print. </p> <dl><dt><b>Parameters:</b></dt><dd> <table border="0" cellspacing="2" cellpadding="0"> <tr><td valign="top"></td><td valign="top"><em>data</em> </td><td>the stored print </td></tr> </table> </dd> </dl> <dl class="return"><dt><b>Returns:</b></dt><dd>the devtype of the device range compatible with the print </dd></dl> </div> </div> </div> <hr class="footer"/><address class="footer"><small>Generated on Wed Sep 8 2010 for libfprint by <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.1 </small></address> </body> </html>