AMR_T800/Devices/Libraries/Systems/CANopenSocket/docs/group__CO__SYNC.html

414 lines
25 KiB
HTML
Executable File

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://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.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>CANopenNode: SYNC</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="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function() { init_search(); });
/* @license-end */
</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 id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">CANopenNode
</div>
</td>
<td> <div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<img id="MSearchSelect" src="search/mag_sel.png"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
alt=""/>
<input type="text" id="MSearchField" value="Search" accesskey="S"
onfocus="searchBox.OnSearchFieldFocus(true)"
onblur="searchBox.OnSearchFieldFocus(false)"
onkeyup="searchBox.OnSearchFieldChange(event)"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
</span>
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('group__CO__SYNC.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div class="header">
<div class="summary">
<a href="#files">Files</a> &#124;
<a href="#nested-classes">Data Structures</a> &#124;
<a href="#enum-members">Enumerations</a> &#124;
<a href="#func-members">Functions</a> </div>
<div class="headertitle">
<div class="title">SYNC<div class="ingroups"><a class="el" href="group__CO__CANopen__301.html">CANopen_301</a></div></div> </div>
</div><!--header-->
<div class="contents">
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="files"></a>
Files</h2></td></tr>
<tr class="memitem:CO__SYNC_8h"><td class="memItemLeft" align="right" valign="top">file &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="CO__SYNC_8h.html">CO_SYNC.h</a></td></tr>
<tr class="memdesc:CO__SYNC_8h"><td class="mdescLeft">&#160;</td><td class="mdescRight">CANopen Synchronisation protocol. <br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCO__SYNC__t.html">CO_SYNC_t</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">SYNC producer and consumer object. <a href="structCO__SYNC__t.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a>
Enumerations</h2></td></tr>
<tr class="memitem:ga121ede6e0c90c66076a7ed950db38517"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__SYNC.html#ga121ede6e0c90c66076a7ed950db38517">CO_SYNC_status_t</a> { <a class="el" href="group__CO__SYNC.html#gga121ede6e0c90c66076a7ed950db38517aeff7846423b9eb92cd2c69df745ea429">CO_SYNC_NONE</a> = 0,
<a class="el" href="group__CO__SYNC.html#gga121ede6e0c90c66076a7ed950db38517aa03c21a78b503a4adebb2d9d7aa655bf">CO_SYNC_RECEIVED</a> = 1,
<a class="el" href="group__CO__SYNC.html#gga121ede6e0c90c66076a7ed950db38517a5b112bec6cb10119879703a6313de41e">CO_SYNC_OUTSIDE_WINDOW</a> = 2
}</td></tr>
<tr class="memdesc:ga121ede6e0c90c66076a7ed950db38517"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return value for <a class="el" href="group__CO__SYNC.html#ga66b8f42fd430daa2a57ff15aa49c814c" title="Process SYNC communication.">CO_SYNC_process</a>. <a href="group__CO__SYNC.html#ga121ede6e0c90c66076a7ed950db38517">More...</a><br /></td></tr>
<tr class="separator:ga121ede6e0c90c66076a7ed950db38517"><td class="memSeparator" colspan="2">&#160;</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:ga3047b679d5e3261eedf1980ea87b5135"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532">CO_ReturnError_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__SYNC.html#ga3047b679d5e3261eedf1980ea87b5135">CO_SYNC_init</a> (<a class="el" href="structCO__SYNC__t.html">CO_SYNC_t</a> *SYNC, <a class="el" href="structCO__EM__t.html">CO_EM_t</a> *em, CO_SDO_t *SDO, <a class="el" href="group__CO__NMT__Heartbeat.html#ga1e8c2a6c0fd4a33183503d25a7c6d744">CO_NMT_internalState_t</a> *operatingState, <a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a> COB_ID_SYNCMessage, <a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a> communicationCyclePeriod, <a class="el" href="group__CO__dataTypes.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a> synchronousCounterOverflowValue, <a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *CANdevRx, <a class="el" href="group__CO__dataTypes.html#ga1f1825b69244eb3ad2c7165ddc99c956">uint16_t</a> CANdevRxIdx, <a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *CANdevTx, <a class="el" href="group__CO__dataTypes.html#ga1f1825b69244eb3ad2c7165ddc99c956">uint16_t</a> CANdevTxIdx)</td></tr>
<tr class="memdesc:ga3047b679d5e3261eedf1980ea87b5135"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize SYNC object. <a href="group__CO__SYNC.html#ga3047b679d5e3261eedf1980ea87b5135">More...</a><br /></td></tr>
<tr class="separator:ga3047b679d5e3261eedf1980ea87b5135"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gaf1005766c7f1588262b018fe04960777"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__SYNC.html#gaf1005766c7f1588262b018fe04960777">CO_SYNC_initCallbackPre</a> (<a class="el" href="structCO__SYNC__t.html">CO_SYNC_t</a> *SYNC, void *object, void(*pFunctSignalPre)(void *object))</td></tr>
<tr class="memdesc:gaf1005766c7f1588262b018fe04960777"><td class="mdescLeft">&#160;</td><td class="mdescRight">Initialize SYNC callback function. <a href="group__CO__SYNC.html#gaf1005766c7f1588262b018fe04960777">More...</a><br /></td></tr>
<tr class="separator:gaf1005766c7f1588262b018fe04960777"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:gabbc8625d068d19d8b632d034f396a1ff"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532">CO_ReturnError_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__SYNC.html#gabbc8625d068d19d8b632d034f396a1ff">CO_SYNCsend</a> (<a class="el" href="structCO__SYNC__t.html">CO_SYNC_t</a> *SYNC)</td></tr>
<tr class="memdesc:gabbc8625d068d19d8b632d034f396a1ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Send SYNC message. <a href="group__CO__SYNC.html#gabbc8625d068d19d8b632d034f396a1ff">More...</a><br /></td></tr>
<tr class="separator:gabbc8625d068d19d8b632d034f396a1ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ga66b8f42fd430daa2a57ff15aa49c814c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="group__CO__SYNC.html#ga121ede6e0c90c66076a7ed950db38517">CO_SYNC_status_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__CO__SYNC.html#ga66b8f42fd430daa2a57ff15aa49c814c">CO_SYNC_process</a> (<a class="el" href="structCO__SYNC__t.html">CO_SYNC_t</a> *SYNC, <a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a> timeDifference_us, <a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a> ObjDict_synchronousWindowLength, <a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a> *timerNext_us)</td></tr>
<tr class="memdesc:ga66b8f42fd430daa2a57ff15aa49c814c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Process SYNC communication. <a href="group__CO__SYNC.html#ga66b8f42fd430daa2a57ff15aa49c814c">More...</a><br /></td></tr>
<tr class="separator:ga66b8f42fd430daa2a57ff15aa49c814c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<p>CANopen Synchronisation protocol.</p>
<p>For CAN identifier see <a class="el" href="group__CO__driver.html#ga01dd35ae53fd2209ceccabdc8bf8dd06" title="Default CANopen identifiers.">CO_Default_CAN_ID_t</a></p>
<p>SYNC message is used for synchronization of the nodes on network. One node can be SYNC producer, others can be SYNC consumers. Synchronous TPDOs are transmitted after the CANopen SYNC message. Synchronous received PDOs are accepted(copied to OD) immediatelly after the reception of the next SYNC message.</p>
<h4>Contents of SYNC message</h4>
<p>By default SYNC message has no data. If <em>Synchronous counter overflow value</em> from Object dictionary (index 0x1019) is different than 0, SYNC message has one data byte: <em>counter</em> incremented by 1 with every SYNC transmission.</p>
<h4>SYNC in CANopenNode</h4>
<p>According to CANopen, synchronous RPDOs must be processed after reception of the next sync messsage. For that reason, there is a double receive buffer for each synchronous RPDO. At the moment, when SYNC is received or transmitted, internal variable CANrxToggle toggles. That variable is then used by synchronous RPDO to determine, which of the two buffers is used for RPDO reception and which for RPDO processing. </p>
<h2 class="groupheader">Enumeration Type Documentation</h2>
<a id="ga121ede6e0c90c66076a7ed950db38517"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga121ede6e0c90c66076a7ed950db38517">&#9670;&nbsp;</a></span>CO_SYNC_status_t</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="group__CO__SYNC.html#ga121ede6e0c90c66076a7ed950db38517">CO_SYNC_status_t</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>Return value for <a class="el" href="group__CO__SYNC.html#ga66b8f42fd430daa2a57ff15aa49c814c" title="Process SYNC communication.">CO_SYNC_process</a>. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="gga121ede6e0c90c66076a7ed950db38517aeff7846423b9eb92cd2c69df745ea429"></a>CO_SYNC_NONE&#160;</td><td class="fielddoc"><p>SYNC not received. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga121ede6e0c90c66076a7ed950db38517aa03c21a78b503a4adebb2d9d7aa655bf"></a>CO_SYNC_RECEIVED&#160;</td><td class="fielddoc"><p>SYNC received. </p>
</td></tr>
<tr><td class="fieldname"><a id="gga121ede6e0c90c66076a7ed950db38517a5b112bec6cb10119879703a6313de41e"></a>CO_SYNC_OUTSIDE_WINDOW&#160;</td><td class="fielddoc"><p>SYNC received outside SYNC window. </p>
</td></tr>
</table>
</div>
</div>
<h2 class="groupheader">Function Documentation</h2>
<a id="ga3047b679d5e3261eedf1980ea87b5135"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga3047b679d5e3261eedf1980ea87b5135">&#9670;&nbsp;</a></span>CO_SYNC_init()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532">CO_ReturnError_t</a> CO_SYNC_init </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structCO__SYNC__t.html">CO_SYNC_t</a> *&#160;</td>
<td class="paramname"><em>SYNC</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structCO__EM__t.html">CO_EM_t</a> *&#160;</td>
<td class="paramname"><em>em</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">CO_SDO_t *&#160;</td>
<td class="paramname"><em>SDO</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__CO__NMT__Heartbeat.html#ga1e8c2a6c0fd4a33183503d25a7c6d744">CO_NMT_internalState_t</a> *&#160;</td>
<td class="paramname"><em>operatingState</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a>&#160;</td>
<td class="paramname"><em>COB_ID_SYNCMessage</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a>&#160;</td>
<td class="paramname"><em>communicationCyclePeriod</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__CO__dataTypes.html#gaba7bc1797add20fe3efdf37ced1182c5">uint8_t</a>&#160;</td>
<td class="paramname"><em>synchronousCounterOverflowValue</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *&#160;</td>
<td class="paramname"><em>CANdevRx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__CO__dataTypes.html#ga1f1825b69244eb3ad2c7165ddc99c956">uint16_t</a>&#160;</td>
<td class="paramname"><em>CANdevRxIdx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="structCO__CANmodule__t.html">CO_CANmodule_t</a> *&#160;</td>
<td class="paramname"><em>CANdevTx</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__CO__dataTypes.html#ga1f1825b69244eb3ad2c7165ddc99c956">uint16_t</a>&#160;</td>
<td class="paramname"><em>CANdevTxIdx</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize SYNC object. </p>
<p>Function must be called in the communication reset section.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">SYNC</td><td>This object will be initialized. </td></tr>
<tr><td class="paramname">em</td><td>Emergency object. </td></tr>
<tr><td class="paramname">SDO</td><td>SDO server object. </td></tr>
<tr><td class="paramname">operatingState</td><td>Pointer to variable indicating CANopen device NMT internal state. </td></tr>
<tr><td class="paramname">COB_ID_SYNCMessage</td><td>From Object dictionary (index 0x1005). </td></tr>
<tr><td class="paramname">communicationCyclePeriod</td><td>From Object dictionary (index 0x1006). </td></tr>
<tr><td class="paramname">synchronousCounterOverflowValue</td><td>From Object dictionary (index 0x1019). </td></tr>
<tr><td class="paramname">CANdevRx</td><td>CAN device for SYNC reception. </td></tr>
<tr><td class="paramname">CANdevRxIdx</td><td>Index of receive buffer in the above CAN device. </td></tr>
<tr><td class="paramname">CANdevTx</td><td>CAN device for SYNC transmission. </td></tr>
<tr><td class="paramname">CANdevTxIdx</td><td>Index of transmit buffer in the above CAN device.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532" title="Return values of some CANopen functions.">CO_ReturnError_t</a>: CO_ERROR_NO or CO_ERROR_ILLEGAL_ARGUMENT. </dd></dl>
</div>
</div>
<a id="gaf1005766c7f1588262b018fe04960777"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gaf1005766c7f1588262b018fe04960777">&#9670;&nbsp;</a></span>CO_SYNC_initCallbackPre()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void CO_SYNC_initCallbackPre </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structCO__SYNC__t.html">CO_SYNC_t</a> *&#160;</td>
<td class="paramname"><em>SYNC</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>object</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void(*)(void *object)&#160;</td>
<td class="paramname"><em>pFunctSignalPre</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Initialize SYNC callback function. </p>
<p>Function initializes optional callback function, which should immediately start processing of <a class="el" href="group__CO__SYNC.html#ga66b8f42fd430daa2a57ff15aa49c814c" title="Process SYNC communication.">CO_SYNC_process()</a> function. Callback is called after SYNC message is received from the CAN bus.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">SYNC</td><td>This object. </td></tr>
<tr><td class="paramname">object</td><td>Pointer to object, which will be passed to pFunctSignalPre(). Can be NULL </td></tr>
<tr><td class="paramname">pFunctSignalPre</td><td>Pointer to the callback function. Not called if NULL. </td></tr>
</table>
</dd>
</dl>
</div>
</div>
<a id="gabbc8625d068d19d8b632d034f396a1ff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#gabbc8625d068d19d8b632d034f396a1ff">&#9670;&nbsp;</a></span>CO_SYNCsend()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__CO__driver.html#ga1cb2d3466eb0c6d267f3b5ff1a0d9532">CO_ReturnError_t</a> CO_SYNCsend </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structCO__SYNC__t.html">CO_SYNC_t</a> *&#160;</td>
<td class="paramname"><em>SYNC</em></td><td>)</td>
<td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Send SYNC message. </p>
<p>This function prepares and sends a SYNC object. The application should only call this if direct control of SYNC transmission is needed, otherwise use <a class="el" href="group__CO__SYNC.html#ga66b8f42fd430daa2a57ff15aa49c814c" title="Process SYNC communication.">CO_SYNC_process()</a>.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">SYNC</td><td>SYNC object.</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Same as <a class="el" href="group__CO__driver.html#ga4664a9f5d547cb0605a9e929fb079f2e" title="Send CAN message.">CO_CANsend()</a>. </dd></dl>
</div>
</div>
<a id="ga66b8f42fd430daa2a57ff15aa49c814c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ga66b8f42fd430daa2a57ff15aa49c814c">&#9670;&nbsp;</a></span>CO_SYNC_process()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="group__CO__SYNC.html#ga121ede6e0c90c66076a7ed950db38517">CO_SYNC_status_t</a> CO_SYNC_process </td>
<td>(</td>
<td class="paramtype"><a class="el" href="structCO__SYNC__t.html">CO_SYNC_t</a> *&#160;</td>
<td class="paramname"><em>SYNC</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a>&#160;</td>
<td class="paramname"><em>timeDifference_us</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a>&#160;</td>
<td class="paramname"><em>ObjDict_synchronousWindowLength</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="group__CO__dataTypes.html#ga33594304e786b158f3fb30289278f5af">uint32_t</a> *&#160;</td>
<td class="paramname"><em>timerNext_us</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Process SYNC communication. </p>
<p>Function must be called cyclically.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir"></td><td class="paramname">SYNC</td><td>This object. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">timeDifference_us</td><td>Time difference from previous function call in [microseconds]. </td></tr>
<tr><td class="paramdir"></td><td class="paramname">ObjDict_synchronousWindowLength</td><td><em>Synchronous window length</em> variable from Object dictionary (index 0x1007). </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">timerNext_us</td><td>info to OS - see CO_process_SYNC_PDO().</td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><a class="el" href="group__CO__SYNC.html#ga121ede6e0c90c66076a7ed950db38517" title="Return value for CO_SYNC_process.">CO_SYNC_status_t</a>: CO_SYNC_NONE, CO_SYNC_RECEIVED or CO_SYNC_OUTSIDE_WINDOW. </dd></dl>
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="footer">Generated on Thu Dec 24 2020 14:30:50 for CANopenNode by
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.17 </li>
</ul>
</div>
</body>
</html>