SOES/soes/doc/html/esc__foe_8c.html

482 lines
21 KiB
HTML

<!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>SOES: esc_foe.c File Reference</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.4 -->
<div id="top">
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td style="padding-left: 0.5em;">
<div id="projectname">SOES&#160;<span id="projectnumber">v1.0.0</span></div>
</td>
</tr>
</tbody>
</table>
</div>
<div id="navrow1" class="tabs">
<ul class="tablist">
<li><a href="index.html"><span>Main&#160;Page</span></a></li>
<li><a href="annotated.html"><span>Data&#160;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&#160;List</span></a></li>
<li><a href="globals.html"><span>Globals</span></a></li>
</ul>
</div>
</div>
<div class="header">
<div class="summary">
<a href="#define-members">Defines</a> &#124;
<a href="#func-members">Functions</a> &#124;
<a href="#var-members">Variables</a> </div>
<div class="headertitle">
<div class="title">esc_foe.c File Reference</div> </div>
</div>
<div class="contents">
<p>File over EtherCAT (FoE) module.
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;osal.h&quot;</code><br/>
<code>#include &quot;utypes.h&quot;</code><br/>
<code>#include &quot;<a class="el" href="esc_8h.html">esc.h</a>&quot;</code><br/>
<code>#include &quot;<a class="el" href="esc__foe_8h.html">esc_foe.h</a>&quot;</code><br/>
<code>#include &lt;string.h&gt;</code><br/>
</div><table class="memberdecls">
<tr><td colspan="2"><h2><a name="define-members"></a>
Defines</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a57a35bfd7d13bdfab37a48171286ecee">DPRINT</a>(...)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a40eaa99769ad24d7b1f0d91276497e96">DEBUG_ASSERT</a>(expression)</td></tr>
<tr><td colspan="2"><h2><a name="func-members"></a>
Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a1068bb4cb4200dd0a12a01fa875a4d4b">FOE_fopen</a> (char *name, uint8 num_chars, uint32 pass, uint8 op)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint16&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a2fe564ee56395c2ad9b3e294046ab11a">FOE_fwrite</a> (uint8 *data, uint16 length)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#ada27a980ed9be4adb6e9e72a80bac0e6">FOE_fclose</a> (void)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#ab759787663f3dbf3eefc2d7d4ebb7a48">FOE_init</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a3dc61a42f1df1418e1b713b4ef6124c3">FOE_abort</a> (uint32 code)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a2d6c4bf6859f6b1ebd6a0b63fca21420">FOE_send_ack</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a429078d3edbb532b67f887adb0ec59de">FOE_read</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#af0f456ea750b97416b704ade6d074a4d">FOE_write</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#af0f447cb34aefab559845633acba7eea">FOE_data</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a50fcf09f71a9f45ebc806ebdf109a275">FOE_error</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a0b138231b97d90990427644659e92e0c">FOE_config</a> (<a class="el" href="structfoe__cfg__t.html">foe_cfg_t</a> *cfg, foe_writefile_cfg_t *cfg_files)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a57ace265be44ccc2a0af313d007261b2">ESC_foeprocess</a> (void)</td></tr>
<tr><td colspan="2"><h2><a name="var-members"></a>
Variables</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">char&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a1f2c07c0dfd2d9a88c27b47abf1651af">foe_file_name</a> [FOE_FN_MAX+1]</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="structfoe__cfg__t.html">foe_cfg_t</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a7cc484767f3b463b2a72365d9c761a1f">foe_cfg</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static foe_writefile_cfg_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#ab37a5f7aab01e0690365e1c73c56b496">foe_files</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static foe_writefile_cfg_t *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#a2896ae544c74758f24d85208eba3477b">foe_file</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="struct__FOEvar.html">_FOEvar</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="esc__foe_8c.html#adcd7d70e05228c39934e5605bc705839">FOEvar</a></td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>File over EtherCAT (FoE) module. </p>
<p>FOE read / write and FOE service functions </p>
</div><hr/><h2>Define Documentation</h2>
<a class="anchor" id="a40eaa99769ad24d7b1f0d91276497e96"></a><!-- doxytag: member="esc_foe.c::DEBUG_ASSERT" ref="a40eaa99769ad24d7b1f0d91276497e96" args="(expression)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DEBUG_ASSERT</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname">expression</td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a57a35bfd7d13bdfab37a48171286ecee"></a><!-- doxytag: member="esc_foe.c::DPRINT" ref="a57a35bfd7d13bdfab37a48171286ecee" args="(...)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define DPRINT</td>
<td>(</td>
<td class="paramtype">&#160;</td>
<td class="paramname"><em>...</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<hr/><h2>Function Documentation</h2>
<a class="anchor" id="a57ace265be44ccc2a0af313d007261b2"></a><!-- doxytag: member="esc_foe.c::ESC_foeprocess" ref="a57ace265be44ccc2a0af313d007261b2" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ESC_foeprocess </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Main FoE function checking the status on current mailbox buffers carrying data, distributing the mailboxes to appropriate FOE functions depending on requested opcode. On Error an FoE Error or FoE Abort will be sent. </p>
</div>
</div>
<a class="anchor" id="a3dc61a42f1df1418e1b713b4ef6124c3"></a><!-- doxytag: member="esc_foe.c::FOE_abort" ref="a3dc61a42f1df1418e1b713b4ef6124c3" args="(uint32 code)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FOE_abort </td>
<td>(</td>
<td class="paramtype">uint32&#160;</td>
<td class="paramname"><em>code</em></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Function for sending an FOE abort frame.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">code</td><td>= abort code </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="a0b138231b97d90990427644659e92e0c"></a><!-- doxytag: member="esc_foe.c::FOE_config" ref="a0b138231b97d90990427644659e92e0c" args="(foe_cfg_t *cfg, foe_writefile_cfg_t *cfg_files)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FOE_config </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structfoe__cfg__t.html">foe_cfg_t</a> *&#160;</td>
<td class="paramname"><em>cfg</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">foe_writefile_cfg_t *&#160;</td>
<td class="paramname"><em>cfg_files</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Function copying the application configuration variable to the FoE module local pointer variable.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">cfg</td><td>= Pointer to by the Application static declared configuration variable holding application specific details. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">cfg_files</td><td>= Pointer to by the Application static declared configuration variable holding file specific details for files to be handled by FoE </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a class="anchor" id="af0f447cb34aefab559845633acba7eea"></a><!-- doxytag: member="esc_foe.c::FOE_data" ref="af0f447cb34aefab559845633acba7eea" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FOE_data </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>FoE data request handler. Validates and reads data until we're finsihed. Every read frame follwed by an Ack frame. On error we will send FOE Abort. </p>
</div>
</div>
<a class="anchor" id="a50fcf09f71a9f45ebc806ebdf109a275"></a><!-- doxytag: member="esc_foe.c::FOE_error" ref="a50fcf09f71a9f45ebc806ebdf109a275" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FOE_error </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>FoE error requesthandler. Send an FOE Abort. </p>
</div>
</div>
<a class="anchor" id="ada27a980ed9be4adb6e9e72a80bac0e6"></a><!-- doxytag: member="esc_foe.c::FOE_fclose" ref="ada27a980ed9be4adb6e9e72a80bac0e6" args="(void)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint32_t FOE_fclose </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Function handling the final FOE_fwrite when we close up regardless if we have filled the buffers or not.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>Number of copied bytes on success, 0= if failed. </dd></dl>
</div>
</div>
<a class="anchor" id="a1068bb4cb4200dd0a12a01fa875a4d4b"></a><!-- doxytag: member="esc_foe.c::FOE_fopen" ref="a1068bb4cb4200dd0a12a01fa875a4d4b" args="(char *name, uint8 num_chars, uint32 pass, uint8 op)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int FOE_fopen </td>
<td>(</td>
<td class="paramtype">char *&#160;</td>
<td class="paramname"><em>name</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8&#160;</td>
<td class="paramname"><em>num_chars</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint32&#160;</td>
<td class="paramname"><em>pass</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint8&#160;</td>
<td class="paramname"><em>op</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Validate a write or read request by checking filename and password.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">name</td><td>= Filename </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">num_chars</td><td>= Length of filename </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">pass</td><td>= Numeric variable of password </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">op</td><td>= Request op-code </td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>0= if we succeed, FOE_ERR_NOTFOUND something wrong with filename or password </dd></dl>
</div>
</div>
<a class="anchor" id="a2fe564ee56395c2ad9b3e294046ab11a"></a><!-- doxytag: member="esc_foe.c::FOE_fwrite" ref="a2fe564ee56395c2ad9b3e294046ab11a" args="(uint8 *data, uint16 length)" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">uint16 FOE_fwrite </td>
<td>(</td>
<td class="paramtype">uint8 *&#160;</td>
<td class="paramname"><em>data</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">uint16&#160;</td>
<td class="paramname"><em>length</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Function reading mailbox buffer to local buffer to be handled by application write hook. Ex. flash routine used by software update. It will consume the buffer and call the write hook every time the configured flush buffer limit is reached.</p>
<dl><dt><b>Parameters:</b></dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">data</td><td>= Pointer to buffer </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">length</td><td>= Length of data to read</td></tr>
</table>
</dd>
</dl>
<dl class="return"><dt><b>Returns:</b></dt><dd>Number of copied bytes. </dd></dl>
</div>
</div>
<a class="anchor" id="ab759787663f3dbf3eefc2d7d4ebb7a48"></a><!-- doxytag: member="esc_foe.c::FOE_init" ref="ab759787663f3dbf3eefc2d7d4ebb7a48" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FOE_init </td>
<td>(</td>
<td class="paramtype">void&#160;</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Initialize by clearing all current status variables. </p>
</div>
</div>
<a class="anchor" id="a429078d3edbb532b67f887adb0ec59de"></a><!-- doxytag: member="esc_foe.c::FOE_read" ref="a429078d3edbb532b67f887adb0ec59de" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FOE_read </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
</div>
</div>
<a class="anchor" id="a2d6c4bf6859f6b1ebd6a0b63fca21420"></a><!-- doxytag: member="esc_foe.c::FOE_send_ack" ref="a2d6c4bf6859f6b1ebd6a0b63fca21420" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">int FOE_send_ack </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Sends an FoE ack data frame.</p>
<dl class="return"><dt><b>Returns:</b></dt><dd>0= or error number. </dd></dl>
</div>
</div>
<a class="anchor" id="af0f456ea750b97416b704ade6d074a4d"></a><!-- doxytag: member="esc_foe.c::FOE_write" ref="af0f456ea750b97416b704ade6d074a4d" args="()" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void FOE_write </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>FoE write request handler. Starts with Initialize, Open and Ack that we can/will receive data. On error we will send FOE Abort. </p>
</div>
</div>
<hr/><h2>Variable Documentation</h2>
<a class="anchor" id="a7cc484767f3b463b2a72365d9c761a1f"></a><!-- doxytag: member="esc_foe.c::foe_cfg" ref="a7cc484767f3b463b2a72365d9c761a1f" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="structfoe__cfg__t.html">foe_cfg_t</a>* <a class="el" href="esc__foe_8c.html#a7cc484767f3b463b2a72365d9c761a1f">foe_cfg</a><code> [static]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Main FoE configuration pointer data array. Structure i allocated and filled by the application defining what preferences it require. </p>
</div>
</div>
<a class="anchor" id="a2896ae544c74758f24d85208eba3477b"></a><!-- doxytag: member="esc_foe.c::foe_file" ref="a2896ae544c74758f24d85208eba3477b" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">foe_writefile_cfg_t* <a class="el" href="esc__foe_8c.html#a2896ae544c74758f24d85208eba3477b">foe_file</a><code> [static]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Pointer to current file configuration item used by FoE. </p>
</div>
</div>
<a class="anchor" id="a1f2c07c0dfd2d9a88c27b47abf1651af"></a><!-- doxytag: member="esc_foe.c::foe_file_name" ref="a1f2c07c0dfd2d9a88c27b47abf1651af" args="[FOE_FN_MAX+1]" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">char <a class="el" href="esc__foe_8c.html#a1f2c07c0dfd2d9a88c27b47abf1651af">foe_file_name</a>[FOE_FN_MAX+1]</td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Variable holding current filename read at FOE Open. </p>
</div>
</div>
<a class="anchor" id="ab37a5f7aab01e0690365e1c73c56b496"></a><!-- doxytag: member="esc_foe.c::foe_files" ref="ab37a5f7aab01e0690365e1c73c56b496" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">foe_writefile_cfg_t* <a class="el" href="esc__foe_8c.html#ab37a5f7aab01e0690365e1c73c56b496">foe_files</a><code> [static]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Collection of files possible to receive by FoE. Structure i allocated and filled by the application defining what preferences it require. </p>
</div>
</div>
<a class="anchor" id="adcd7d70e05228c39934e5605bc705839"></a><!-- doxytag: member="esc_foe.c::FOEvar" ref="adcd7d70e05228c39934e5605bc705839" args="" -->
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="struct__FOEvar.html">_FOEvar</a> <a class="el" href="esc__foe_8c.html#adcd7d70e05228c39934e5605bc705839">FOEvar</a><code> [static]</code></td>
</tr>
</table>
</div>
<div class="memdoc">
<p>Main FoE status data array. Structure gets filled with current status variables during FoE usage. </p>
</div>
</div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Wed Jul 10 2013 11:14:19 for SOES by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.4 </small></address>
</body>
</html>