Sophie

Sophie

distrib > Fedora > 16 > i386 > by-pkgid > 4bc66056a634db26a1f4d0845dc41ca6 > files > 800

mrpt-doc-0.9.5-0.1.20110925svn2670.fc16.i686.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>CInterfaceFTDI.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<div align="left"><a href="http://www.mrpt.org/">Main MRPT website</a> &gt; <b>C++ reference</b> </div>
<div align="right">
<a href="index.html"><img border="0" src="mrpt_logo.png" alt="MRPT logo"></a>
</div>
<!-- Generated by Doxygen 1.7.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
          <div class="left">
            <form id="FSearchBox" action="search.php" method="get">
              <img id="MSearchSelect" src="search/mag.png" alt=""/>
              <input type="text" id="MSearchField" name="query" value="Search" size="20" accesskey="S" 
                     onfocus="searchBox.OnSearchFieldFocus(true)" 
                     onblur="searchBox.OnSearchFieldFocus(false)"/>
            </form>
          </div><div class="right"></div>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
      <li><a href="globals.html"><span>File&#160;Members</span></a></li>
    </ul>
  </div>
<div class="header">
  <div class="headertitle">
<div class="title">CInterfaceFTDI.h</div>  </div>
</div>
<div class="contents">
<a href="_c_interface_f_t_d_i_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* +---------------------------------------------------------------------------+</span>
<a name="l00002"></a>00002 <span class="comment">   |          The Mobile Robot Programming Toolkit (MRPT) C++ library          |</span>
<a name="l00003"></a>00003 <span class="comment">   |                                                                           |</span>
<a name="l00004"></a>00004 <span class="comment">   |                       http://www.mrpt.org/                                |</span>
<a name="l00005"></a>00005 <span class="comment">   |                                                                           |</span>
<a name="l00006"></a>00006 <span class="comment">   |   Copyright (C) 2005-2011  University of Malaga                           |</span>
<a name="l00007"></a>00007 <span class="comment">   |                                                                           |</span>
<a name="l00008"></a>00008 <span class="comment">   |    This software was written by the Machine Perception and Intelligent    |</span>
<a name="l00009"></a>00009 <span class="comment">   |      Robotics Lab, University of Malaga (Spain).                          |</span>
<a name="l00010"></a>00010 <span class="comment">   |    Contact: Jose-Luis Blanco  &lt;jlblanco@ctima.uma.es&gt;                     |</span>
<a name="l00011"></a>00011 <span class="comment">   |                                                                           |</span>
<a name="l00012"></a>00012 <span class="comment">   |  This file is part of the MRPT project.                                   |</span>
<a name="l00013"></a>00013 <span class="comment">   |                                                                           |</span>
<a name="l00014"></a>00014 <span class="comment">   |     MRPT is free software: you can redistribute it and/or modify          |</span>
<a name="l00015"></a>00015 <span class="comment">   |     it under the terms of the GNU General Public License as published by  |</span>
<a name="l00016"></a>00016 <span class="comment">   |     the Free Software Foundation, either version 3 of the License, or     |</span>
<a name="l00017"></a>00017 <span class="comment">   |     (at your option) any later version.                                   |</span>
<a name="l00018"></a>00018 <span class="comment">   |                                                                           |</span>
<a name="l00019"></a>00019 <span class="comment">   |   MRPT is distributed in the hope that it will be useful,                 |</span>
<a name="l00020"></a>00020 <span class="comment">   |     but WITHOUT ANY WARRANTY; without even the implied warranty of        |</span>
<a name="l00021"></a>00021 <span class="comment">   |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         |</span>
<a name="l00022"></a>00022 <span class="comment">   |     GNU General Public License for more details.                          |</span>
<a name="l00023"></a>00023 <span class="comment">   |                                                                           |</span>
<a name="l00024"></a>00024 <span class="comment">   |     You should have received a copy of the GNU General Public License     |</span>
<a name="l00025"></a>00025 <span class="comment">   |     along with MRPT.  If not, see &lt;http://www.gnu.org/licenses/&gt;.         |</span>
<a name="l00026"></a>00026 <span class="comment">   |                                                                           |</span>
<a name="l00027"></a>00027 <span class="comment">   +---------------------------------------------------------------------------+ */</span>
<a name="l00028"></a>00028 
<a name="l00029"></a>00029 <span class="preprocessor">#ifndef CInterfaceFTDI_H</span>
<a name="l00030"></a>00030 <span class="preprocessor"></span><span class="preprocessor">#define CInterfaceFTDI_H</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;mrpt/config.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;<a class="code" href="_c_stream_8h.html">mrpt/utils/CStream.h</a>&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;<a class="code" href="stl__extensions_8h.html">mrpt/utils/stl_extensions.h</a>&gt;</span>
<a name="l00035"></a>00035 
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;<a class="code" href="hwdrivers_2include_2mrpt_2hwdrivers_2link__pragmas_8h.html">mrpt/hwdrivers/link_pragmas.h</a>&gt;</span>
<a name="l00037"></a>00037 
<a name="l00038"></a>00038 <span class="keyword">namespace </span>mrpt
<a name="l00039"></a>00039 {
<a name="l00040"></a>00040         <span class="keyword">namespace </span>hwdrivers
<a name="l00041"></a>00041         {
<a name="l00042"></a>00042 <span class="comment"></span>
<a name="l00043"></a>00043 <span class="comment">                /** A list of FTDI devices and their descriptors.</span>
<a name="l00044"></a>00044 <span class="comment">                  * \sa CInterfaceFTDI::ListAllDevices</span>
<a name="l00045"></a>00045 <span class="comment">                  * \ingroup mrpt_hwdrivers_grp</span>
<a name="l00046"></a>00046 <span class="comment">                  */</span>
<a name="l00047"></a>00047                 <span class="keyword">struct </span><a class="code" href="hwdrivers__impexp_8h.html#a5bcf681973c7e4e76310bd0791f1b612">HWDRIVERS_IMPEXP</a> TFTDIDevice
<a name="l00048"></a>00048                 {
<a name="l00049"></a><a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#a207ada4f58f0f70a63e91ce893803147">00049</a>                         std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a>     <a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#a207ada4f58f0f70a63e91ce893803147">ftdi_manufacturer</a>;
<a name="l00050"></a><a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#ac72410bd0dad075d89bf4fecb50c9e37">00050</a>                         std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a>     <a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#ac72410bd0dad075d89bf4fecb50c9e37">ftdi_description</a>;
<a name="l00051"></a><a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#ae983b0f48b8ba793ddbac2d6c34ed7d4">00051</a>                         std<a class="code" href="classstd_1_1string.html" title="STL class.">::string</a>     <a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#ae983b0f48b8ba793ddbac2d6c34ed7d4">ftdi_serial</a>;
<a name="l00052"></a>00052 
<a name="l00053"></a><a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#affb09561a2d460b847672b9551790a54">00053</a>                         uint16_t                <a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#affb09561a2d460b847672b9551790a54">usb_idVendor</a>;
<a name="l00054"></a><a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#ae2ccf41801c82b43872859faa1019091">00054</a>                         uint16_t                <a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#ae2ccf41801c82b43872859faa1019091">usb_idProduct</a>;
<a name="l00055"></a><a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#aa96d75500f44cce1f3efd5f1102f777c">00055</a>                         uint8_t                 <a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html#aa96d75500f44cce1f3efd5f1102f777c">usb_serialNumber</a>;
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 <span class="preprocessor">        #if defined(MRPT_OS_LINUX) || defined(MRPT_OS_APPLE)</span>
<a name="l00058"></a>00058 <span class="preprocessor"></span><span class="comment">                        /** Only for Linux: the corresponding libusb&#39;s  &quot;usb_device*&quot; */</span>
<a name="l00059"></a>00059                         <span class="keywordtype">void</span>                    *usb_device_struct;
<a name="l00060"></a>00060 <span class="preprocessor">        #endif</span>
<a name="l00061"></a>00061 <span class="preprocessor"></span>                };
<a name="l00062"></a>00062 <span class="comment"></span>
<a name="l00063"></a>00063 <span class="comment">                /** Print out all the information of a FTDI device in textual form. */</span>
<a name="l00064"></a>00064                 std<a class="code" href="classstd_1_1ostream.html" title="STL class.">::ostream</a> <a class="code" href="hwdrivers__impexp_8h.html#a5bcf681973c7e4e76310bd0791f1b612">HWDRIVERS_IMPEXP</a>  &amp;<a class="code" href="namespacemrpt_1_1hwdrivers.html#ae4c1c24d111a6fdd34cc1d25be0aa806" title="Print out all the information of a FTDI device in textual form.">operator &lt;&lt; </a>( <a class="code" href="classstd_1_1ostream.html" title="STL class.">std::ostream</a> &amp;o, <span class="keyword">const</span> <a class="code" href="structmrpt_1_1hwdrivers_1_1_t_f_t_d_i_device.html" title="A list of FTDI devices and their descriptors.">TFTDIDevice</a> &amp;d);
<a name="l00065"></a>00065 <span class="comment"></span>
<a name="l00066"></a>00066 <span class="comment">                /** Used in  CInterfaceFTDI::ListAllDevices */</span>
<a name="l00067"></a><a class="code" href="namespacemrpt_1_1hwdrivers.html#a549627d0c657fd60edd28e3c894e42cc">00067</a>                 <span class="keyword">typedef</span>  std<a class="code" href="classstd_1_1deque.html" title="STL class.">::deque&lt;TFTDIDevice&gt;</a> <a class="code" href="namespacemrpt_1_1hwdrivers.html#a549627d0c657fd60edd28e3c894e42cc" title="Used in CInterfaceFTDI::ListAllDevices.">TFTDIDeviceList</a>;
<a name="l00068"></a>00068 <span class="comment"></span>
<a name="l00069"></a>00069 <span class="comment">                /** A definition of a CStream actually representing a USB connection to a FTDI chip.</span>
<a name="l00070"></a>00070 <span class="comment">                 *</span>
<a name="l00071"></a>00071 <span class="comment">                 *  This class implements the communication with FT245BM / FT245RL chips.</span>
<a name="l00072"></a>00072 <span class="comment">                 *   Using this class makes a program to depend on:</span>
<a name="l00073"></a>00073 <span class="comment">                 *              - Windows: &quot;FT2XX.DLL&quot; and the device drivers (see FTDI website).</span>
<a name="l00074"></a>00074 <span class="comment">                 *              - Linux: &quot;libusb.so&quot; (quite standard!), and &quot;libftdi.so&quot; only if linking against the dynamic library.</span>
<a name="l00075"></a>00075 <span class="comment">                 *</span>
<a name="l00076"></a>00076 <span class="comment">                 *  If there is any error during the communications (or loading the Windows DLL), a std::exception will be raised.</span>
<a name="l00077"></a>00077 <span class="comment">                 *</span>
<a name="l00078"></a>00078 <span class="comment">                 *  To write bulk data, use CStream::ReadBuffer and CStream::WriteBuffer. See also the derived classes for</span>
<a name="l00079"></a>00079 <span class="comment">                 *   higher level communication: CInterfaceFTDIMessages</span>
<a name="l00080"></a>00080 <span class="comment">                 *</span>
<a name="l00081"></a>00081 <span class="comment">                 * Warning: Avoid defining an object of this class in a global scope if you want to catch all potential</span>
<a name="l00082"></a>00082 <span class="comment">                 *      exceptions during the constructors (like DLL not found, etc...)</span>
<a name="l00083"></a>00083 <span class="comment">                 *</span>
<a name="l00084"></a>00084 <span class="comment">                 * VERSIONS:</span>
<a name="l00085"></a>00085 <span class="comment">                 *              - 11/APR/2005: Initial development. JLBC</span>
<a name="l00086"></a>00086 <span class="comment">                 *              - 16/FEB/2007: Integration into the MRPT framework. Support for device serial numbers. JLBC</span>
<a name="l00087"></a>00087 <span class="comment">                 *              - 15/APR/2008: Implemented for Linux using libftdi. JLBC</span>
<a name="l00088"></a>00088 <span class="comment">                 *</span>
<a name="l00089"></a>00089 <span class="comment">                 * \sa CInterfaceFTDIMessages, CStream</span>
<a name="l00090"></a>00090 <span class="comment">                  * \ingroup mrpt_hwdrivers_grp</span>
<a name="l00091"></a>00091 <span class="comment">                 */</span>
<a name="l00092"></a>00092                 <span class="keyword">class </span><a class="code" href="hwdrivers__impexp_8h.html#a5bcf681973c7e4e76310bd0791f1b612">HWDRIVERS_IMPEXP</a> <a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html" title="A definition of a CStream actually representing a USB connection to a FTDI chip.">CInterfaceFTDI</a> : <span class="keyword">public</span> utils::<a class="code" href="classmrpt_1_1utils_1_1_c_stream.html" title="This base class is used to provide a unified interface to files,memory buffers,..Please see the deriv...">CStream</a>
<a name="l00093"></a>00093                 {
<a name="l00094"></a>00094                 <span class="keyword">public</span>:<span class="comment"></span>
<a name="l00095"></a>00095 <span class="comment">                        /** Constructor, which loads driver interface (the DLL under Windows).</span>
<a name="l00096"></a>00096 <span class="comment">                          */</span>
<a name="l00097"></a>00097                         <a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html" title="A definition of a CStream actually representing a USB connection to a FTDI chip.">CInterfaceFTDI</a>();
<a name="l00098"></a>00098 <span class="comment"></span>
<a name="l00099"></a>00099 <span class="comment">                        /** Destructor, which closes the connection with the chip and unloads the driver interface.</span>
<a name="l00100"></a>00100 <span class="comment">                          */</span>
<a name="l00101"></a>00101                         <span class="keyword">virtual</span> ~<a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html" title="A definition of a CStream actually representing a USB connection to a FTDI chip.">CInterfaceFTDI</a>();
<a name="l00102"></a>00102 <span class="comment"></span>
<a name="l00103"></a>00103 <span class="comment">                        /** This object cannot be copied */</span>
<a name="l00104"></a>00104                         <a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html" title="A definition of a CStream actually representing a USB connection to a FTDI chip.">CInterfaceFTDI</a>(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html" title="A definition of a CStream actually representing a USB connection to a FTDI chip.">CInterfaceFTDI</a> &amp;o);
<a name="l00105"></a>00105 <span class="comment"></span>
<a name="l00106"></a>00106 <span class="comment">                        /** This object cannot be copied */</span>
<a name="l00107"></a>00107                         <a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html" title="A definition of a CStream actually representing a USB connection to a FTDI chip.">CInterfaceFTDI</a>&amp; operator =(<span class="keyword">const</span> <a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html" title="A definition of a CStream actually representing a USB connection to a FTDI chip.">CInterfaceFTDI</a> &amp;o);
<a name="l00108"></a>00108 <span class="comment"></span>
<a name="l00109"></a>00109 <span class="comment">                        /** Checks whether the chip has been successfully open.</span>
<a name="l00110"></a>00110 <span class="comment">                          * \sa OpenBySerialNumber, OpenByDescription</span>
<a name="l00111"></a>00111 <span class="comment">                          */</span>
<a name="l00112"></a>00112                         <span class="keywordtype">bool</span>  isOpen();
<a name="l00113"></a>00113 <span class="comment"></span>
<a name="l00114"></a>00114 <span class="comment">                        /** Open by device serial number</span>
<a name="l00115"></a>00115 <span class="comment">                          */</span>
<a name="l00116"></a>00116                         <span class="keywordtype">void</span>  OpenBySerialNumber( <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &amp;serialNumber );
<a name="l00117"></a>00117 <span class="comment"></span>
<a name="l00118"></a>00118 <span class="comment">                        /** Open by device description</span>
<a name="l00119"></a>00119 <span class="comment">                          */</span>
<a name="l00120"></a>00120                         <span class="keywordtype">void</span>  OpenByDescription( <span class="keyword">const</span> <a class="code" href="classstd_1_1string.html" title="STL class.">std::string</a> &amp;description );
<a name="l00121"></a>00121 <span class="comment"></span>
<a name="l00122"></a>00122 <span class="comment">                        /** Close the USB device */</span>
<a name="l00123"></a>00123                         <span class="keywordtype">void</span>  Close();
<a name="l00124"></a>00124 <span class="comment"></span>
<a name="l00125"></a>00125 <span class="comment">                        /** Reset the USB device */</span>
<a name="l00126"></a>00126                         <span class="keywordtype">void</span>  ResetDevice();
<a name="l00127"></a>00127 <span class="comment"></span>
<a name="l00128"></a>00128 <span class="comment">                        /** Purge the I/O buffers */</span>
<a name="l00129"></a>00129                         <span class="keywordtype">void</span>  Purge();
<a name="l00130"></a>00130 <span class="comment"></span>
<a name="l00131"></a>00131 <span class="comment">                        /** Change the latency timer (in milliseconds) implemented on the FTDI chip: for a few ms, data is not sent to the PC waiting for possible more data, to save USB trafic. */</span>
<a name="l00132"></a>00132                         <span class="keywordtype">void</span>  SetLatencyTimer (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span> latency_ms);
<a name="l00133"></a>00133 <span class="comment"></span>
<a name="l00134"></a>00134 <span class="comment">                        /** Change read &amp; write timeouts, in milliseconds. */</span>
<a name="l00135"></a>00135                         <span class="keywordtype">void</span>  SetTimeouts(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dwReadTimeout_ms, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dwWriteTimeout_ms);
<a name="l00136"></a>00136 
<a name="l00137"></a>00137 <span class="comment"></span>
<a name="l00138"></a>00138 <span class="comment">                        /** Generates a list with all FTDI devices connected right now.</span>
<a name="l00139"></a>00139 <span class="comment">                          */</span>
<a name="l00140"></a>00140                         <span class="keywordtype">void</span> ListAllDevices( <a class="code" href="classstd_1_1deque.html" title="STL class.">TFTDIDeviceList</a> &amp;outList );
<a name="l00141"></a>00141 <span class="comment"></span>
<a name="l00142"></a>00142 <span class="comment">                        /** Tries to read, raising no exception if not all the bytes are available, but raising one if there is some communication error.</span>
<a name="l00143"></a>00143 <span class="comment">                         */</span>
<a name="l00144"></a><a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html#ac7b6c0cf69441cd969852dcd5cf2f52f">00144</a>                         <span class="keywordtype">size_t</span>  ReadSync(<span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count)
<a name="l00145"></a>00145                         {
<a name="l00146"></a>00146                                 <span class="keywordflow">return</span> Read(Buffer,Count);
<a name="l00147"></a>00147                         }
<a name="l00148"></a>00148 <span class="comment"></span>
<a name="l00149"></a>00149 <span class="comment">                        /** Tries to write, raising no exception if not all the bytes are available, but raising one if there is some communication error.</span>
<a name="l00150"></a>00150 <span class="comment">                         */</span>
<a name="l00151"></a><a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html#a2aafe5ee30a3e4b3086160a92465e425">00151</a>                         <span class="keywordtype">size_t</span>  WriteSync(<span class="keyword">const</span> <span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count)
<a name="l00152"></a>00152                         {
<a name="l00153"></a>00153                                 <span class="keywordflow">return</span> Write(Buffer,Count);
<a name="l00154"></a>00154                         }
<a name="l00155"></a>00155 <span class="comment"></span>
<a name="l00156"></a>00156 <span class="comment">                        /** Reads a block of bytes from the stream into Buffer, and returns the amound of bytes actually read, without waiting for more extra bytes to arrive (just those already enqued in the stream).</span>
<a name="l00157"></a>00157 <span class="comment">                         *  In this class this method actually behaves as expected and does not fallback to ReadBuffer().</span>
<a name="l00158"></a>00158 <span class="comment">                         *      \exception std::exception On any error, or if ZERO bytes are read.</span>
<a name="l00159"></a>00159 <span class="comment">                         */</span>
<a name="l00160"></a>00160                         <span class="keyword">virtual</span> <span class="keywordtype">size_t</span>  ReadBufferImmediate(<span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count);
<a name="l00161"></a>00161 
<a name="l00162"></a>00162                 <span class="keyword">protected</span>:<span class="comment"></span>
<a name="l00163"></a>00163 <span class="comment">                        /** Introduces a pure virtual method responsible for reading from the stream.</span>
<a name="l00164"></a>00164 <span class="comment">                          *  It integrates a cache buffer to speed-up sequences of many, small readings.</span>
<a name="l00165"></a>00165 <span class="comment">                          */</span>
<a name="l00166"></a>00166                         <span class="keywordtype">size_t</span>  Read(<span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count);
<a name="l00167"></a>00167 
<a name="l00168"></a><a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html#a504cf4090e6f7086882164414feaa7da">00168</a>                         mrpt<a class="code" href="classmrpt_1_1utils_1_1circular__buffer.html">::utils::circular_buffer&lt;uint8_t&gt;</a>    <a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html#a504cf4090e6f7086882164414feaa7da" title="Used in Read.">m_readBuffer</a>;  <span class="comment">//!&lt; Used in Read</span>
<a name="l00169"></a>00169 <span class="comment"></span><span class="comment"></span>
<a name="l00170"></a>00170 <span class="comment">                        /** Introduces a pure virtual method responsible for writing to the stream.</span>
<a name="l00171"></a>00171 <span class="comment">                         *  Write attempts to write up to Count bytes to Buffer, and returns the number of bytes actually written.</span>
<a name="l00172"></a>00172 <span class="comment">                         */</span>
<a name="l00173"></a>00173                         <span class="keywordtype">size_t</span>  Write(<span class="keyword">const</span> <span class="keywordtype">void</span> *Buffer, <span class="keywordtype">size_t</span> Count);
<a name="l00174"></a>00174 <span class="comment"></span>
<a name="l00175"></a>00175 <span class="comment">                        /** This virtual method does nothing in this class.</span>
<a name="l00176"></a>00176 <span class="comment">                         */</span>
<a name="l00177"></a>00177                         uint64_t Seek(<span class="keywordtype">long</span> Offset, <a class="code" href="classmrpt_1_1utils_1_1_c_stream.html#aab22931626d22c919a50183386d24059" title="Used in CStream::Seek.">CStream::TSeekOrigin</a> Origin = sFromBeginning);
<a name="l00178"></a>00178 <span class="comment"></span>
<a name="l00179"></a>00179 <span class="comment">                        /** This virtual method does nothing in this class.</span>
<a name="l00180"></a>00180 <span class="comment">                         */</span>
<a name="l00181"></a>00181                         uint64_t getTotalBytesCount();
<a name="l00182"></a>00182 <span class="comment"></span>
<a name="l00183"></a>00183 <span class="comment">                        /** This virtual method does nothing in this class.</span>
<a name="l00184"></a>00184 <span class="comment">                         */</span>
<a name="l00185"></a>00185                         uint64_t getPosition();
<a name="l00186"></a>00186 
<a name="l00187"></a>00187 
<a name="l00188"></a>00188                         <span class="keywordtype">void</span>  ftdi_read(<span class="keywordtype">void</span>  *lpvBuffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dwBuffSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *lpdwBytesRead);
<a name="l00189"></a>00189                         <span class="keywordtype">void</span>  ftdi_write(<span class="keyword">const</span> <span class="keywordtype">void</span>  *lpvBuffer, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dwBuffSize, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *lpdwBytes);
<a name="l00190"></a>00190 
<a name="l00191"></a>00191 <span class="preprocessor">        #if defined(MRPT_OS_WINDOWS)</span>
<a name="l00192"></a>00192 <span class="preprocessor"></span>                <span class="keyword">private</span>:
<a name="l00193"></a>00193                         <span class="keywordtype">void</span>  checkErrorAndRaise(<span class="keywordtype">int</span> errorCode);
<a name="l00194"></a>00194 
<a name="l00195"></a>00195                         <span class="keywordtype">void</span>  ftdi_open(<span class="keywordtype">void</span>* pvDevice);
<a name="l00196"></a>00196                         <span class="keywordtype">void</span>  ftdi_openEx(<span class="keywordtype">void</span>* pArg1, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dwFlags);
<a name="l00197"></a>00197                         <span class="keywordtype">void</span>  ftdi_listDevices(<span class="keywordtype">void</span> *pArg1, <span class="keywordtype">void</span> *pArg2, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> dwFlags);
<a name="l00198"></a>00198                         <span class="keywordtype">void</span>  ftdi_getQueueStatus(<span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *lpdwAmountInRxQueue);
<a name="l00199"></a>00199 
<a name="l00200"></a>00200                         <span class="keywordtype">void</span>                            *m_hmodule;
<a name="l00201"></a>00201                         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>           m_ftHandle;
<a name="l00202"></a>00202 
<a name="l00203"></a>00203                         <span class="keywordtype">void</span>            loadDriver();
<a name="l00204"></a>00204 
<a name="l00205"></a>00205                         <span class="keyword">enum</span> FT_STATUS
<a name="l00206"></a>00206                         {
<a name="l00207"></a>00207                                 dummy
<a name="l00208"></a>00208                         };
<a name="l00209"></a>00209 
<a name="l00210"></a>00210                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToOpen)(<span class="keywordtype">void</span>*, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *);
<a name="l00211"></a>00211                         PtrToOpen m_pOpen;
<a name="l00212"></a>00212 
<a name="l00213"></a>00213                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToOpenEx)(<span class="keywordtype">void</span>*, <span class="keywordtype">unsigned</span> long, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *);
<a name="l00214"></a>00214                         PtrToOpenEx m_pOpenEx;
<a name="l00215"></a>00215 
<a name="l00216"></a>00216                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToListDevices)(<span class="keywordtype">void</span>*, <span class="keywordtype">void</span>*, <span class="keywordtype">unsigned</span> long);
<a name="l00217"></a>00217                         PtrToListDevices m_pListDevices;
<a name="l00218"></a>00218 
<a name="l00219"></a>00219                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToClose)(<span class="keywordtype">unsigned</span> long );
<a name="l00220"></a>00220                         PtrToClose m_pClose;
<a name="l00221"></a>00221 
<a name="l00222"></a>00222                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToRead)(<span class="keywordtype">unsigned</span> long , <span class="keywordtype">void</span>  *, <span class="keywordtype">unsigned</span> long, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *);
<a name="l00223"></a>00223                         PtrToRead m_pRead;
<a name="l00224"></a>00224 
<a name="l00225"></a>00225                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToWrite)(<span class="keywordtype">unsigned</span> long , <span class="keyword">const</span> <span class="keywordtype">void</span>  *, <span class="keywordtype">unsigned</span> long, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *);
<a name="l00226"></a>00226                         PtrToWrite m_pWrite;
<a name="l00227"></a>00227 
<a name="l00228"></a>00228                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToResetDevice)(<span class="keywordtype">unsigned</span> long );
<a name="l00229"></a>00229                         PtrToResetDevice m_pResetDevice;
<a name="l00230"></a>00230 
<a name="l00231"></a>00231                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToPurge)(<span class="keywordtype">unsigned</span> long , <span class="keywordtype">unsigned</span> long);
<a name="l00232"></a>00232                         PtrToPurge m_pPurge;
<a name="l00233"></a>00233 
<a name="l00234"></a>00234                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToSetTimeouts)(<span class="keywordtype">unsigned</span> long , <span class="keywordtype">unsigned</span> long, <span class="keywordtype">unsigned</span> long);
<a name="l00235"></a>00235                         PtrToSetTimeouts m_pSetTimeouts;
<a name="l00236"></a>00236 
<a name="l00237"></a>00237                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToGetQueueStatus)(<span class="keywordtype">unsigned</span> long , <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span>  *);
<a name="l00238"></a>00238                         PtrToGetQueueStatus m_pGetQueueStatus;
<a name="l00239"></a>00239 
<a name="l00240"></a>00240                         <span class="keyword">typedef</span> FT_STATUS (__stdcall *PtrToSetLatencyTimer )(<span class="keywordtype">unsigned</span> long , <span class="keywordtype">unsigned</span> char);
<a name="l00241"></a>00241                         PtrToSetLatencyTimer m_pSetLatencyTimer;
<a name="l00242"></a>00242 
<a name="l00243"></a>00243 <span class="preprocessor">        #else</span>
<a name="l00244"></a>00244 <span class="preprocessor"></span>                <span class="comment">// Declarations for Linux:</span>
<a name="l00245"></a><a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html#a80df6305dde56477e686b245cbf7e5f1">00245</a>                         <span class="keywordtype">void</span>            *<a class="code" href="classmrpt_1_1hwdrivers_1_1_c_interface_f_t_d_i.html#a80df6305dde56477e686b245cbf7e5f1">m_ftdi_context</a>;
<a name="l00246"></a>00246 <span class="comment"></span>
<a name="l00247"></a>00247 <span class="comment">                        /** Process recursively a USB device and its children: */</span>
<a name="l00248"></a>00248                         <span class="keywordtype">void</span> recursive_fill_list_devices( <span class="keywordtype">void</span> *usb_device_structure , <a class="code" href="classstd_1_1deque.html" title="STL class.">TFTDIDeviceList</a> &amp;outList );
<a name="l00249"></a>00249 
<a name="l00250"></a>00250 
<a name="l00251"></a>00251 <span class="preprocessor">        #endif</span>
<a name="l00252"></a>00252 <span class="preprocessor"></span>
<a name="l00253"></a>00253 
<a name="l00254"></a>00254                 }; <span class="comment">// end of class</span>
<a name="l00255"></a>00255 
<a name="l00256"></a>00256         } <span class="comment">// end of namespace</span>
<a name="l00257"></a>00257 } <span class="comment">// end of namespace</span>
<a name="l00258"></a>00258 
<a name="l00259"></a>00259 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
<br><hr><br> <table border="0" width="100%"> <tr> <td> Page generated by <a href="http://www.doxygen.org" target="_blank">Doxygen 1.7.5</a> for MRPT 0.9.5 SVN: at Sun Sep 25 17:20:18 UTC 2011</td><td></td> <td width="100"> </td> <td width="150">  </td></tr> </table>  </body></html>