<!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"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.8"/> <title>pcsc-lite: readerfactory.c File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">pcsc-lite  <span id="projectnumber">1.8.11</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.8 --> <div id="navrow1" 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 class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>Globals</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#define-members">Macros</a> | <a href="#func-members">Functions</a> | <a href="#var-members">Variables</a> </div> <div class="headertitle"> <div class="title">readerfactory.c File Reference</div> </div> </div><!--header--> <div class="contents"> <p>This keeps track of a list of currently available reader structures. <a href="#details">More...</a></p> <div class="textblock"><code>#include "config.h"</code><br /> <code>#include <stdio.h></code><br /> <code>#include <stdlib.h></code><br /> <code>#include <string.h></code><br /> <code>#include <unistd.h></code><br /> <code>#include <sys/types.h></code><br /> <code>#include <sys/stat.h></code><br /> <code>#include <errno.h></code><br /> <code>#include <fcntl.h></code><br /> <code>#include <pthread.h></code><br /> <code>#include "misc.h"</code><br /> <code>#include "<a class="el" href="pcscd_8h_source.html">pcscd.h</a>"</code><br /> <code>#include "<a class="el" href="debuglog_8h_source.html">debuglog.h</a>"</code><br /> <code>#include "<a class="el" href="readerfactory_8h_source.html">readerfactory.h</a>"</code><br /> <code>#include "<a class="el" href="dyn__generic_8h_source.html">dyn_generic.h</a>"</code><br /> <code>#include "<a class="el" href="sys__generic_8h_source.html">sys_generic.h</a>"</code><br /> <code>#include "<a class="el" href="eventhandler_8h_source.html">eventhandler.h</a>"</code><br /> <code>#include "<a class="el" href="ifdwrapper_8h_source.html">ifdwrapper.h</a>"</code><br /> <code>#include "<a class="el" href="hotplug_8h_source.html">hotplug.h</a>"</code><br /> <code>#include "<a class="el" href="strlcpycat_8h_source.html">strlcpycat.h</a>"</code><br /> <code>#include "configfile.h"</code><br /> <code>#include "utils.h"</code><br /> </div> <p><a href="readerfactory_8c_source.html">Go to the source code of this file.</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> Macros</h2></td></tr> <tr class="memitem:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa8cecfc5c5c054d2875c03e77b7be15d"></a> #define </td><td class="memItemRight" valign="bottom"><b>TRUE</b>   1</td></tr> <tr class="separator:aa8cecfc5c5c054d2875c03e77b7be15d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa93f0eb578d23995850d61f7d61c55c1"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa93f0eb578d23995850d61f7d61c55c1"></a> #define </td><td class="memItemRight" valign="bottom"><b>FALSE</b>   0</td></tr> <tr class="separator:aa93f0eb578d23995850d61f7d61c55c1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a137cdb9c3d0df9656c1ee9a77023de27"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a137cdb9c3d0df9656c1ee9a77023de27"></a> #define </td><td class="memItemRight" valign="bottom"><b>IDENTITY_SHIFT</b>   16</td></tr> <tr class="separator:a137cdb9c3d0df9656c1ee9a77023de27"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0d6eb3d175a2147e3112e19433aaa918"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESS_OPTIONALv2</b>(s, code)</td></tr> <tr class="separator:a0d6eb3d175a2147e3112e19433aaa918"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a290956b7c41ae583d36b48772a959381"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESSv2</b>(s)</td></tr> <tr class="separator:a290956b7c41ae583d36b48772a959381"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a898b8972d7ce943f56d5b0ff12eae869"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESS_OPTIONALv3</b>(s, code)</td></tr> <tr class="separator:a898b8972d7ce943f56d5b0ff12eae869"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6d647157ee6bd2695a72843b69c87e87"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><b>GET_ADDRESSv3</b>(s)</td></tr> <tr class="separator:a6d647157ee6bd2695a72843b69c87e87"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:af474609f07d0679ab73994b3750fe091"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af474609f07d0679ab73994b3750fe091"></a> static LONG </td><td class="memItemRight" valign="bottom"><b>removeReader</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *sReader)</td></tr> <tr class="separator:af474609f07d0679ab73994b3750fe091"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a8eb79359fe9185c9516b8a19d4df25ff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a8eb79359fe9185c9516b8a19d4df25ff"></a> static int </td><td class="memItemRight" valign="bottom"><b>RDR_CLIHANDLES_seeker</b> (const void *el, const void *key)</td></tr> <tr class="separator:a8eb79359fe9185c9516b8a19d4df25ff"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa60a771a124c755673b2113ef78ebe30"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa60a771a124c755673b2113ef78ebe30"></a> LONG </td><td class="memItemRight" valign="bottom"><b>_RefReader</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *sReader)</td></tr> <tr class="separator:aa60a771a124c755673b2113ef78ebe30"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6a65d284ed2b0d2a4462690f267ccd37"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a6a65d284ed2b0d2a4462690f267ccd37"></a> LONG </td><td class="memItemRight" valign="bottom"><b>_UnrefReader</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *sReader)</td></tr> <tr class="separator:a6a65d284ed2b0d2a4462690f267ccd37"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a1642ec51326be86454522188a5ba5001"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1642ec51326be86454522188a5ba5001"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFAllocateReaderSpace</b> (unsigned int customMaxReaderHandles)</td></tr> <tr class="separator:a1642ec51326be86454522188a5ba5001"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aea710703b7f4be6185697d1fa2bb94ab"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aea710703b7f4be6185697d1fa2bb94ab"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFAddReader</b> (const char *readerNameLong, int port, const char *library, const char *device)</td></tr> <tr class="separator:aea710703b7f4be6185697d1fa2bb94ab"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ada4fcaa0bddeba72fb492fb6e7b78f62"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ada4fcaa0bddeba72fb492fb6e7b78f62"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFRemoveReader</b> (const char *readerName, int port)</td></tr> <tr class="separator:ada4fcaa0bddeba72fb492fb6e7b78f62"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac89e5a9290a416e38b6b057eb85bfcf6"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac89e5a9290a416e38b6b057eb85bfcf6"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFSetReaderName</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext, const char *readerName, const char *libraryName, int port)</td></tr> <tr class="separator:ac89e5a9290a416e38b6b057eb85bfcf6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a054b17c9141237be7302bcc92d9a5160"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a054b17c9141237be7302bcc92d9a5160"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFReaderInfo</b> (const char *readerName, <a class="el" href="structReaderContext.html">READER_CONTEXT</a> **sReader)</td></tr> <tr class="separator:a054b17c9141237be7302bcc92d9a5160"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3f19a5794a94f48c08e350c111109508"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3f19a5794a94f48c08e350c111109508"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFReaderInfoById</b> (<a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard, <a class="el" href="structReaderContext.html">READER_CONTEXT</a> **sReader)</td></tr> <tr class="separator:a3f19a5794a94f48c08e350c111109508"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:affe8783b1e1ea9bad543ae30685f443b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="affe8783b1e1ea9bad543ae30685f443b"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFLoadReader</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:affe8783b1e1ea9bad543ae30685f443b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae7209713f9920f6caba53c3f422baf17"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ae7209713f9920f6caba53c3f422baf17"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFBindFunctions</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:ae7209713f9920f6caba53c3f422baf17"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a22c08bd65090bf0cb7bbcb4c6f0d5b7b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22c08bd65090bf0cb7bbcb4c6f0d5b7b"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnBindFunctions</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:a22c08bd65090bf0cb7bbcb4c6f0d5b7b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a66052c24553336c002225c078e53da26"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a66052c24553336c002225c078e53da26"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnloadReader</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:a66052c24553336c002225c078e53da26"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad24b1fd707edee5f26d480534dc02661"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad24b1fd707edee5f26d480534dc02661"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFCheckSharing</b> (<a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard, <a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:ad24b1fd707edee5f26d480534dc02661"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa5133799a221bd06ea648891c717c0b3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aa5133799a221bd06ea648891c717c0b3"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFLockSharing</b> (<a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard, <a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:aa5133799a221bd06ea648891c717c0b3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a364d471255f2e523c223cd92ad0f6b10"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a364d471255f2e523c223cd92ad0f6b10"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnlockSharing</b> (<a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard, <a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:a364d471255f2e523c223cd92ad0f6b10"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2c87ece049dd76062c43a2ac0c5ab40a"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a2c87ece049dd76062c43a2ac0c5ab40a"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnlockAllSharing</b> (<a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard, <a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:a2c87ece049dd76062c43a2ac0c5ab40a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a22d72fc93ee0ddbfb4248b1eea9dd279"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a22d72fc93ee0ddbfb4248b1eea9dd279"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFInitializeReader</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:a22d72fc93ee0ddbfb4248b1eea9dd279"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4ddf9b9f18be02a3f1a96ff3f4a67ab0"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4ddf9b9f18be02a3f1a96ff3f4a67ab0"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFUnInitializeReader</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:a4ddf9b9f18be02a3f1a96ff3f4a67ab0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a98a7a92fe38859941b02a85a2994a7c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a98a7a92fe38859941b02a85a2994a7c3"></a> <a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> </td><td class="memItemRight" valign="bottom"><b>RFCreateReaderHandle</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:a98a7a92fe38859941b02a85a2994a7c3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a42c38f85d751e52b5c967571c7e61c34"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a42c38f85d751e52b5c967571c7e61c34"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFDestroyReaderHandle</b> (<a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard)</td></tr> <tr class="separator:a42c38f85d751e52b5c967571c7e61c34"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac8d48540a22186d330869059ff0700b8"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac8d48540a22186d330869059ff0700b8"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFAddReaderHandle</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext, <a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard)</td></tr> <tr class="separator:ac8d48540a22186d330869059ff0700b8"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aacd0c536f8eec5ac1f1458fcaa6caaaf"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aacd0c536f8eec5ac1f1458fcaa6caaaf"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFRemoveReaderHandle</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext, <a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard)</td></tr> <tr class="separator:aacd0c536f8eec5ac1f1458fcaa6caaaf"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a94b888c6f03f2f0f5445d661e20633c3"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a94b888c6f03f2f0f5445d661e20633c3"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFSetReaderEventState</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext, DWORD dwEvent)</td></tr> <tr class="separator:a94b888c6f03f2f0f5445d661e20633c3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af62002905615b2d429d8ff1d018bef14"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="af62002905615b2d429d8ff1d018bef14"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFCheckReaderEventState</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext, <a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard)</td></tr> <tr class="separator:af62002905615b2d429d8ff1d018bef14"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4e143c6a6c895e1ec3c551bc5d3002ed"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a4e143c6a6c895e1ec3c551bc5d3002ed"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFClearReaderEventState</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext, <a class="el" href="pcsclite_8h.html#af328aca3e11de737ecd771bcf1f75fb5">SCARDHANDLE</a> hCard)</td></tr> <tr class="separator:a4e143c6a6c895e1ec3c551bc5d3002ed"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac96dc477fc017296934cbbcfdd200a3f"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ac96dc477fc017296934cbbcfdd200a3f"></a> LONG </td><td class="memItemRight" valign="bottom"><b>RFCheckReaderStatus</b> (<a class="el" href="structReaderContext.html">READER_CONTEXT</a> *rContext)</td></tr> <tr class="separator:ac96dc477fc017296934cbbcfdd200a3f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:acccd0e6a79ea2505f8d930c5c8324e0c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="acccd0e6a79ea2505f8d930c5c8324e0c"></a> void </td><td class="memItemRight" valign="bottom"><b>RFCleanupReaders</b> (void)</td></tr> <tr class="separator:acccd0e6a79ea2505f8d930c5c8324e0c"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="var-members"></a> Variables</h2></td></tr> <tr class="memitem:a1adfcc73f45f3fb0846c6f2bfe635dbd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a1adfcc73f45f3fb0846c6f2bfe635dbd"></a> static <a class="el" href="structReaderContext.html">READER_CONTEXT</a> * </td><td class="memItemRight" valign="bottom"><b>sReadersContexts</b> [<a class="el" href="pcsclite_8h.html#af750e6e22c809de2b523c17e4a092036">PCSCLITE_MAX_READERS_CONTEXTS</a>]</td></tr> <tr class="separator:a1adfcc73f45f3fb0846c6f2bfe635dbd"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad70f4ad5a6e9b001970ee9afc2130875"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad70f4ad5a6e9b001970ee9afc2130875"></a> <a class="el" href="eventhandler_8h.html#a14acdf20e86897434649f849c17f9ea6">READER_STATE</a> </td><td class="memItemRight" valign="bottom"><b>readerStates</b> [<a class="el" href="pcsclite_8h.html#af750e6e22c809de2b523c17e4a092036">PCSCLITE_MAX_READERS_CONTEXTS</a>]</td></tr> <tr class="separator:ad70f4ad5a6e9b001970ee9afc2130875"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a65432ea475ee4a005bd4c9ac4bc1fa3b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a65432ea475ee4a005bd4c9ac4bc1fa3b"></a> static int </td><td class="memItemRight" valign="bottom"><b>maxReaderHandles</b> = PCSC_MAX_READER_HANDLES</td></tr> <tr class="separator:a65432ea475ee4a005bd4c9ac4bc1fa3b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5afe29bc3ccda13a034ebd2ab10a55dd"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a5afe29bc3ccda13a034ebd2ab10a55dd"></a> static DWORD </td><td class="memItemRight" valign="bottom"><b>dwNumReadersContexts</b> = 0</td></tr> <tr class="separator:a5afe29bc3ccda13a034ebd2ab10a55dd"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a21709a45e82b32704abdc66474dded3c"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a21709a45e82b32704abdc66474dded3c"></a> static pthread_mutex_t </td><td class="memItemRight" valign="bottom"><b>LockMutex</b> = PTHREAD_MUTEX_INITIALIZER</td></tr> <tr class="separator:a21709a45e82b32704abdc66474dded3c"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>This keeps track of a list of currently available reader structures. </p> <p>Definition in file <a class="el" href="readerfactory_8c_source.html">readerfactory.c</a>.</p> </div><h2 class="groupheader">Macro Definition Documentation</h2> <a class="anchor" id="a0d6eb3d175a2147e3112e19433aaa918"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESS_OPTIONALv2</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">s, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">code </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <b>Value:</b><div class="fragment"><div class="line">{ \</div> <div class="line"> void *f1 = NULL; \</div> <div class="line"> int rvl = DYN_GetAddress(rContext->vHandle, &f1, <span class="stringliteral">"IFDH"</span> #s, FALSE); \</div> <div class="line"> if (<a class="code" href="pcsclite_8h.html#a4a3c56f69570971d366642a563b34a75">SCARD_S_SUCCESS</a> != rvl) \</div> <div class="line"> { \</div> <div class="line"> code \</div> <div class="line"> } \</div> <div class="line"> rContext->psFunctions.psFunctions_v2.pvf ## s = f1; \</div> <div class="line">}</div> <div class="ttc" id="pcsclite_8h_html_a4a3c56f69570971d366642a563b34a75"><div class="ttname"><a href="pcsclite_8h.html#a4a3c56f69570971d366642a563b34a75">SCARD_S_SUCCESS</a></div><div class="ttdeci">#define SCARD_S_SUCCESS</div><div class="ttdoc">error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx </div><div class="ttdef"><b>Definition:</b> <a href="pcsclite_8h_source.html#l00106">pcsclite.h:106</a></div></div> </div><!-- fragment --> </div> </div> <a class="anchor" id="a898b8972d7ce943f56d5b0ff12eae869"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESS_OPTIONALv3</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">s, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">code </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <b>Value:</b><div class="fragment"><div class="line">{ \</div> <div class="line"> void *f1 = NULL; \</div> <div class="line"> int rvl = DYN_GetAddress(rContext->vHandle, &f1, <span class="stringliteral">"IFDH"</span> #s, FALSE); \</div> <div class="line"> if (<a class="code" href="pcsclite_8h.html#a4a3c56f69570971d366642a563b34a75">SCARD_S_SUCCESS</a> != rvl) \</div> <div class="line"> { \</div> <div class="line"> code \</div> <div class="line"> } \</div> <div class="line"> rContext->psFunctions.psFunctions_v3.pvf ## s = f1; \</div> <div class="line">}</div> <div class="ttc" id="pcsclite_8h_html_a4a3c56f69570971d366642a563b34a75"><div class="ttname"><a href="pcsclite_8h.html#a4a3c56f69570971d366642a563b34a75">SCARD_S_SUCCESS</a></div><div class="ttdeci">#define SCARD_S_SUCCESS</div><div class="ttdoc">error codes from http://msdn.microsoft.com/en-us/library/aa924526.aspx </div><div class="ttdef"><b>Definition:</b> <a href="pcsclite_8h_source.html#l00106">pcsclite.h:106</a></div></div> </div><!-- fragment --> </div> </div> <a class="anchor" id="a290956b7c41ae583d36b48772a959381"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESSv2</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">s</td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <b>Value:</b><div class="fragment"><div class="line">GET_ADDRESS_OPTIONALv2(s, \</div> <div class="line"> Log1(PCSC_LOG_CRITICAL, <span class="stringliteral">"IFDHandler functions missing: "</span> #s ); \</div> <div class="line"> return(rv); )</div> </div><!-- fragment --> </div> </div> <a class="anchor" id="a6d647157ee6bd2695a72843b69c87e87"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define GET_ADDRESSv3</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">s</td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <b>Value:</b><div class="fragment"><div class="line">GET_ADDRESS_OPTIONALv3(s, \</div> <div class="line"> Log1(PCSC_LOG_CRITICAL, <span class="stringliteral">"IFDHandler functions missing: "</span> #s ); \</div> <div class="line"> return(rv); )</div> </div><!-- fragment --> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated on Wed Oct 15 2014 11:57:56 for pcsc-lite by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.8 </small></address> </body> </html>