doc/doxygen/html/TestMasterSlave_8c-source.html
author etisserant
Mon, 02 Jul 2007 18:22:58 +0200
changeset 236 905677ed00f3
parent 215 f49e5a6b7804
child 240 34654679f262
permissions -rw-r--r--
Full preliminary implementation of TPDO transmit type:
- SYNC (N) (1-240)
- RTR only + SYNC (252)
- RTR only (253)
- EVENT, with timer and inhibit time (254 and 255)

User app have to call sendPDOevent(d) to eventually signal mapped data changes.
Callbacks added to 0x140N, TPDO comm parameters for on the fly timers values change.
TestMasterSlave updated.
<!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>CanFestival: examples/TestMasterSlave/TestMasterSlave.c Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.1 -->
<div class="tabs">
  <ul>
    <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="annotated.html"><span>Data&nbsp;Structures</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="dirs.html"><span>Directories</span></a></li>
  </ul></div>
<div class="tabs">
  <ul>
    <li><a href="files.html"><span>File&nbsp;List</span></a></li>
    <li><a href="globals.html"><span>Globals</span></a></li>
  </ul></div>
<div class="nav">
<a class="el" href="dir_fc8d77725c328f9de5a130dceab5a508.html">examples</a>&nbsp;&raquo&nbsp;<a class="el" href="dir_cb9d6d827bc8780b4808994475b6fec1.html">TestMasterSlave</a></div>
<h1>TestMasterSlave.c</h1><a href="TestMasterSlave_8c.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">This file is part of CanFestival, a library implementing CanOpen Stack. </span>
<a name="l00003"></a>00003 <span class="comment"></span>
<a name="l00004"></a>00004 <span class="comment">Copyright (C): Edouard TISSERANT and Francis DUPIN</span>
<a name="l00005"></a>00005 <span class="comment"></span>
<a name="l00006"></a>00006 <span class="comment">See COPYING file for copyrights details.</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">This library is free software; you can redistribute it and/or</span>
<a name="l00009"></a>00009 <span class="comment">modify it under the terms of the GNU Lesser General Public</span>
<a name="l00010"></a>00010 <span class="comment">License as published by the Free Software Foundation; either</span>
<a name="l00011"></a>00011 <span class="comment">version 2.1 of the License, or (at your option) any later version.</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment">This library is distributed in the hope that it will be useful,</span>
<a name="l00014"></a>00014 <span class="comment">but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00015"></a>00015 <span class="comment">MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00016"></a>00016 <span class="comment">Lesser General Public License for more details.</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">You should have received a copy of the GNU Lesser General Public</span>
<a name="l00019"></a>00019 <span class="comment">License along with this library; if not, write to the Free Software</span>
<a name="l00020"></a>00020 <span class="comment">Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA</span>
<a name="l00021"></a>00021 <span class="comment">*/</span>
<a name="l00022"></a>00022 
<a name="l00023"></a>00023 <span class="preprocessor">#if defined(WIN32) &amp;&amp; !defined(__CYGWIN__)</span>
<a name="l00024"></a>00024 <span class="preprocessor"></span><span class="preprocessor">#include &lt;windows.h&gt;</span>
<a name="l00025"></a>00025 <span class="preprocessor">#include "getopt.h"</span>
<a name="l00026"></a>00026 <span class="keywordtype">void</span> pause(<span class="keywordtype">void</span>)
<a name="l00027"></a>00027 {
<a name="l00028"></a>00028         system(<span class="stringliteral">"PAUSE"</span>);
<a name="l00029"></a>00029 }
<a name="l00030"></a>00030 <span class="preprocessor">#else</span>
<a name="l00031"></a>00031 <span class="preprocessor"></span><span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00032"></a>00032 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;signal.h&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#endif</span>
<a name="l00037"></a>00037 <span class="preprocessor"></span>
<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="win32_2canfestival_8h.html">canfestival.h</a>"</span>
<a name="l00039"></a>00039 <span class="comment">//#include &lt;can_driver.h&gt;</span>
<a name="l00040"></a>00040 <span class="comment">//#include &lt;timers_driver.h&gt;</span>
<a name="l00041"></a>00041 
<a name="l00042"></a>00042 <span class="preprocessor">#include "<a class="code" href="Master_8h.html">Master.h</a>"</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include "<a class="code" href="Slave_8h.html">Slave.h</a>"</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include "<a class="code" href="TestMasterSlave_8h.html">TestMasterSlave.h</a>"</span>
<a name="l00045"></a>00045 
<a name="l00046"></a><a class="code" href="TestMasterSlave_8c.html#bd99872d05af9bf63e28d6f010c1b174">00046</a> <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> <a class="code" href="TestMasterSlave_8c.html#bd99872d05af9bf63e28d6f010c1b174">OnMasterMap1Update</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* d, <span class="keyword">const</span> <a class="code" href="structtd__indextable.html">indextable</a> * unsused_indextable, <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> unsused_bSubindex)
<a name="l00047"></a>00047 {
<a name="l00048"></a>00048         <a class="code" href="TestMasterSlave_8h.html#82f06ace20f96f70bc165247e69fac57">eprintf</a>(<span class="stringliteral">"OnSlaveMap1Update:%d\n"</span>, <a class="code" href="TestSlave_8c.html#3b4b401356ff09a256301a35ad988d1f">SlaveMap1</a>);
<a name="l00049"></a>00049         <span class="keywordflow">return</span> 0;
<a name="l00050"></a>00050 }
<a name="l00051"></a>00051 
<a name="l00052"></a><a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">00052</a> <a class="code" href="structstruct__s__BOARD.html">s_BOARD</a> <a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">SlaveBoard</a> = {<span class="stringliteral">"0"</span>, <span class="stringliteral">"125K"</span>};
<a name="l00053"></a><a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">00053</a> <a class="code" href="structstruct__s__BOARD.html">s_BOARD</a> <a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">MasterBoard</a> = {<span class="stringliteral">"1"</span>, <span class="stringliteral">"125K"</span>};
<a name="l00054"></a>00054 
<a name="l00055"></a>00055 <span class="preprocessor">#if !defined(WIN32) || defined(__CYGWIN__)</span>
<a name="l00056"></a><a class="code" href="TestMasterSlave_8c.html#f2dc378d0481adcc49b61efb98493a9b">00056</a> <span class="preprocessor"></span><span class="keywordtype">void</span> <a class="code" href="TestMasterSlave_8c.html#f2dc378d0481adcc49b61efb98493a9b">catch_signal</a>(<span class="keywordtype">int</span> sig)
<a name="l00057"></a>00057 {
<a name="l00058"></a>00058   signal(SIGTERM, <a class="code" href="TestMasterSlave_8c.html#f2dc378d0481adcc49b61efb98493a9b">catch_signal</a>);
<a name="l00059"></a>00059   signal(SIGINT, <a class="code" href="TestMasterSlave_8c.html#f2dc378d0481adcc49b61efb98493a9b">catch_signal</a>);
<a name="l00060"></a>00060   <a class="code" href="TestMasterSlave_8h.html#82f06ace20f96f70bc165247e69fac57">eprintf</a>(<span class="stringliteral">"Got Signal %d\n"</span>,sig);
<a name="l00061"></a>00061 }
<a name="l00062"></a>00062 <span class="preprocessor">#endif</span>
<a name="l00063"></a>00063 <span class="preprocessor"></span>
<a name="l00064"></a><a class="code" href="TestMasterSlave_8c.html#97ee70a8770dc30d06c744b24eb2fcfc">00064</a> <span class="keywordtype">void</span> <a class="code" href="TestMasterSlave_8c.html#97ee70a8770dc30d06c744b24eb2fcfc">help</a>()
<a name="l00065"></a>00065 {
<a name="l00066"></a>00066   printf(<span class="stringliteral">"**************************************************************\n"</span>);
<a name="l00067"></a>00067   printf(<span class="stringliteral">"*  TestMasterSlave                                           *\n"</span>);
<a name="l00068"></a>00068   printf(<span class="stringliteral">"*                                                            *\n"</span>);
<a name="l00069"></a>00069   printf(<span class="stringliteral">"*  A simple example for PC. It does implement 2 CanOpen      *\n"</span>);
<a name="l00070"></a>00070   printf(<span class="stringliteral">"*  nodes in the same process. A master and a slave. Both     *\n"</span>);
<a name="l00071"></a>00071   printf(<span class="stringliteral">"*  communicate together, exchanging periodically NMT, SYNC,  *\n"</span>);
<a name="l00072"></a>00072   printf(<span class="stringliteral">"*  SDO and PDO. Master configure heartbeat producer time     *\n"</span>);
<a name="l00073"></a>00073   printf(<span class="stringliteral">"*  at 1000 ms for slave node-id 0x02 by concise DCF.         *\n"</span>);                                  
<a name="l00074"></a>00074   printf(<span class="stringliteral">"*                                                            *\n"</span>);
<a name="l00075"></a>00075   printf(<span class="stringliteral">"*   Usage:                                                   *\n"</span>);
<a name="l00076"></a>00076   printf(<span class="stringliteral">"*   ./TestMasterSlave  [OPTIONS]                             *\n"</span>);
<a name="l00077"></a>00077   printf(<span class="stringliteral">"*                                                            *\n"</span>);
<a name="l00078"></a>00078   printf(<span class="stringliteral">"*   OPTIONS:                                                 *\n"</span>);
<a name="l00079"></a>00079   printf(<span class="stringliteral">"*     -l : Can library [\"libcanfestival_can_virtual.so\"]     *\n"</span>);
<a name="l00080"></a>00080   printf(<span class="stringliteral">"*                                                            *\n"</span>);
<a name="l00081"></a>00081   printf(<span class="stringliteral">"*    Slave:                                                  *\n"</span>);
<a name="l00082"></a>00082   printf(<span class="stringliteral">"*     -s : bus name [\"0\"]                                    *\n"</span>);
<a name="l00083"></a>00083   printf(<span class="stringliteral">"*     -S : 1M,500K,250K,125K,100K,50K,20K,10K,none(disable)  *\n"</span>);
<a name="l00084"></a>00084   printf(<span class="stringliteral">"*                                                            *\n"</span>);
<a name="l00085"></a>00085   printf(<span class="stringliteral">"*    Master:                                                 *\n"</span>);
<a name="l00086"></a>00086   printf(<span class="stringliteral">"*     -m : bus name [\"1\"]                                    *\n"</span>);
<a name="l00087"></a>00087   printf(<span class="stringliteral">"*     -M : 1M,500K,250K,125K,100K,50K,20K,10K,none(disable)  *\n"</span>);
<a name="l00088"></a>00088   printf(<span class="stringliteral">"*                                                            *\n"</span>);
<a name="l00089"></a>00089   printf(<span class="stringliteral">"**************************************************************\n"</span>);
<a name="l00090"></a>00090 }
<a name="l00091"></a>00091 
<a name="l00092"></a>00092 <span class="comment">/***************************  INIT  *****************************************/</span>
<a name="l00093"></a><a class="code" href="TestMasterSlave_8c.html#8a51032f7610fe37c131376e5a392fd5">00093</a> <span class="keywordtype">void</span> <a class="code" href="TestMasterSlave_8c.html#8a51032f7610fe37c131376e5a392fd5">InitNodes</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* d, <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> <span class="keywordtype">id</span>)
<a name="l00094"></a>00094 {
<a name="l00095"></a>00095         <span class="comment">/****************************** INITIALISATION SLAVE *******************************/</span>
<a name="l00096"></a>00096         <span class="keywordflow">if</span>(strcmp(<a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">SlaveBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a>, <span class="stringliteral">"none"</span>)) {
<a name="l00097"></a>00097                 <span class="comment">/* Defining the node Id */</span>
<a name="l00098"></a>00098                 <a class="code" href="states_8c.html#d47a53979b9311a374d029f7923abbe1">setNodeId</a>(&amp;<a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>, 0x02);
<a name="l00099"></a>00099                 <span class="comment">/* init */</span>
<a name="l00100"></a>00100                 <a class="code" href="states_8c.html#0a5004efd1dedbee82a4f21ec5c44fb5">setState</a>(&amp;<a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>, <a class="code" href="states_8h.html#3136d2815abe9d284f985e0a7ec68646eb3ae26d7a1629aa0fc6c83f46306cf5">Initialisation</a>);
<a name="l00101"></a>00101         }
<a name="l00102"></a>00102 
<a name="l00103"></a>00103         <span class="comment">/****************************** INITIALISATION MASTER *******************************/</span>
<a name="l00104"></a>00104         <span class="keywordflow">if</span>(strcmp(<a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">MasterBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a>, <span class="stringliteral">"none"</span>)){
<a name="l00105"></a>00105                 <a class="code" href="objacces_8c.html#514e7b9c13835a86446b1cd38fa34049">RegisterSetODentryCallBack</a>(&amp;<a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>, 0x2000, 0, &amp;<a class="code" href="TestMasterSlave_8c.html#bd99872d05af9bf63e28d6f010c1b174">OnMasterMap1Update</a>);
<a name="l00106"></a>00106                 
<a name="l00107"></a>00107                 <span class="comment">/* Defining the node Id */</span>
<a name="l00108"></a>00108                 <a class="code" href="states_8c.html#d47a53979b9311a374d029f7923abbe1">setNodeId</a>(&amp;<a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>, 0x01);
<a name="l00109"></a>00109 
<a name="l00110"></a>00110                 <span class="comment">/* init */</span>
<a name="l00111"></a>00111                 <a class="code" href="states_8c.html#0a5004efd1dedbee82a4f21ec5c44fb5">setState</a>(&amp;<a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>, <a class="code" href="states_8h.html#3136d2815abe9d284f985e0a7ec68646eb3ae26d7a1629aa0fc6c83f46306cf5">Initialisation</a>);
<a name="l00112"></a>00112                         
<a name="l00113"></a>00113         }
<a name="l00114"></a>00114 }
<a name="l00115"></a>00115 
<a name="l00116"></a>00116 <span class="comment">/****************************************************************************/</span>
<a name="l00117"></a>00117 <span class="comment">/***************************  MAIN  *****************************************/</span>
<a name="l00118"></a>00118 <span class="comment">/****************************************************************************/</span>
<a name="l00119"></a><a class="code" href="TestMasterSlave_8c.html#3c04138a5bfe5d72780bb7e82a18e627">00119</a> <span class="keywordtype">int</span> <a class="code" href="appli_8c.html#ef83014be811ae964a5ef7f0af7b46a2">main</a>(<span class="keywordtype">int</span> argc,<span class="keywordtype">char</span> **argv)
<a name="l00120"></a>00120 {
<a name="l00121"></a>00121 
<a name="l00122"></a>00122   <span class="keywordtype">int</span> c;
<a name="l00123"></a>00123   <span class="keyword">extern</span> <span class="keywordtype">char</span> *<a class="code" href="TestMasterSlave_2getopt_8c.html#db50a0eab9fed92fc3bfc7dfa4f2c410">optarg</a>;
<a name="l00124"></a>00124   <span class="keywordtype">char</span>* LibraryPath=<span class="stringliteral">"libcanfestival_can_virtual.so"</span>;
<a name="l00125"></a>00125 
<a name="l00126"></a>00126   <span class="keywordflow">while</span> ((c = <a class="code" href="TestMasterSlave_2getopt_8c.html#1b2ada39ab92162c6ec9c67c8093fa2e">getopt</a>(argc, argv, <span class="stringliteral">"-m:s:M:S:l:"</span>)) != EOF)
<a name="l00127"></a>00127   {
<a name="l00128"></a>00128     <span class="keywordflow">switch</span>(c)
<a name="l00129"></a>00129     {
<a name="l00130"></a>00130       <span class="keywordflow">case</span> <span class="charliteral">'s'</span> :
<a name="l00131"></a>00131         <span class="keywordflow">if</span> (optarg[0] == 0)
<a name="l00132"></a>00132         {
<a name="l00133"></a>00133           <a class="code" href="TestMasterSlave_8c.html#97ee70a8770dc30d06c744b24eb2fcfc">help</a>();
<a name="l00134"></a>00134           exit(1);
<a name="l00135"></a>00135         }
<a name="l00136"></a>00136         <a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">SlaveBoard</a>.<a class="code" href="structstruct__s__BOARD.html#fb28847fd702021b624afe1f7d4b25b2">busname</a> = optarg;
<a name="l00137"></a>00137         <span class="keywordflow">break</span>;
<a name="l00138"></a>00138       <span class="keywordflow">case</span> <span class="charliteral">'m'</span> :
<a name="l00139"></a>00139         <span class="keywordflow">if</span> (optarg[0] == 0)
<a name="l00140"></a>00140         {
<a name="l00141"></a>00141           <a class="code" href="TestMasterSlave_8c.html#97ee70a8770dc30d06c744b24eb2fcfc">help</a>();
<a name="l00142"></a>00142           exit(1);
<a name="l00143"></a>00143         }
<a name="l00144"></a>00144         <a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">MasterBoard</a>.<a class="code" href="structstruct__s__BOARD.html#fb28847fd702021b624afe1f7d4b25b2">busname</a> = optarg;
<a name="l00145"></a>00145         <span class="keywordflow">break</span>;
<a name="l00146"></a>00146       <span class="keywordflow">case</span> <span class="charliteral">'S'</span> :
<a name="l00147"></a>00147         <span class="keywordflow">if</span> (optarg[0] == 0)
<a name="l00148"></a>00148         {
<a name="l00149"></a>00149           <a class="code" href="TestMasterSlave_8c.html#97ee70a8770dc30d06c744b24eb2fcfc">help</a>();
<a name="l00150"></a>00150           exit(1);
<a name="l00151"></a>00151         }
<a name="l00152"></a>00152         <a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">SlaveBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a> = optarg;
<a name="l00153"></a>00153         <span class="keywordflow">break</span>;
<a name="l00154"></a>00154       <span class="keywordflow">case</span> <span class="charliteral">'M'</span> :
<a name="l00155"></a>00155         <span class="keywordflow">if</span> (optarg[0] == 0)
<a name="l00156"></a>00156         {
<a name="l00157"></a>00157           <a class="code" href="TestMasterSlave_8c.html#97ee70a8770dc30d06c744b24eb2fcfc">help</a>();
<a name="l00158"></a>00158           exit(1);
<a name="l00159"></a>00159         }
<a name="l00160"></a>00160         <a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">MasterBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a> = optarg;
<a name="l00161"></a>00161         <span class="keywordflow">break</span>;
<a name="l00162"></a>00162       <span class="keywordflow">case</span> <span class="charliteral">'l'</span> :
<a name="l00163"></a>00163         <span class="keywordflow">if</span> (optarg[0] == 0)
<a name="l00164"></a>00164         {
<a name="l00165"></a>00165           <a class="code" href="TestMasterSlave_8c.html#97ee70a8770dc30d06c744b24eb2fcfc">help</a>();
<a name="l00166"></a>00166           exit(1);
<a name="l00167"></a>00167         }
<a name="l00168"></a>00168         LibraryPath = optarg;
<a name="l00169"></a>00169         <span class="keywordflow">break</span>;
<a name="l00170"></a>00170       <span class="keywordflow">default</span>:
<a name="l00171"></a>00171         <a class="code" href="TestMasterSlave_8c.html#97ee70a8770dc30d06c744b24eb2fcfc">help</a>();
<a name="l00172"></a>00172         exit(1);
<a name="l00173"></a>00173     }
<a name="l00174"></a>00174   }
<a name="l00175"></a>00175 
<a name="l00176"></a>00176 <span class="preprocessor">#if !defined(WIN32) || defined(__CYGWIN__)</span>
<a name="l00177"></a>00177 <span class="preprocessor"></span>  <span class="comment">/* install signal handler for manual break */</span>
<a name="l00178"></a>00178         signal(SIGTERM, <a class="code" href="TestMasterSlave_8c.html#f2dc378d0481adcc49b61efb98493a9b">catch_signal</a>);
<a name="l00179"></a>00179         signal(SIGINT, <a class="code" href="TestMasterSlave_8c.html#f2dc378d0481adcc49b61efb98493a9b">catch_signal</a>);
<a name="l00180"></a>00180 <span class="preprocessor">#endif</span>
<a name="l00181"></a>00181 <span class="preprocessor"></span>
<a name="l00182"></a>00182 <span class="preprocessor">#ifndef NOT_USE_DYNAMIC_LOADING</span>
<a name="l00183"></a>00183 <span class="preprocessor"></span>        <a class="code" href="unix_8c.html#a6eed61fc15f41f772d4645d7a5edeb5">LoadCanDriver</a>(LibraryPath);
<a name="l00184"></a>00184 <span class="preprocessor">#endif          </span>
<a name="l00185"></a>00185 <span class="preprocessor"></span>        <span class="comment">// Open CAN devices</span>
<a name="l00186"></a>00186 
<a name="l00187"></a>00187         <span class="keywordflow">if</span>(strcmp(<a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">SlaveBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a>, <span class="stringliteral">"none"</span>)){
<a name="l00188"></a>00188                 
<a name="l00189"></a>00189                 <a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>.<a class="code" href="structstruct__CO__Data.html#2ec2bc87656945d2c7dda7ebe662b245">heartbeatError</a> = <a class="code" href="Slave_8c.html#da03f81a4976684fe32771da3024e487">TestSlave_heartbeatError</a>;
<a name="l00190"></a>00190                 <a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>.<a class="code" href="structstruct__CO__Data.html#b45e9ca46cffe7924c35ae136db6a2b6">initialisation</a> = <a class="code" href="Slave_8c.html#58b26580ced4c123c0af29a291bbaa00">TestSlave_initialisation</a>;
<a name="l00191"></a>00191                 <a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>.<a class="code" href="structstruct__CO__Data.html#d7c66fb721e3f6279a6ff03bf91d82e2">preOperational</a> = <a class="code" href="Slave_8c.html#3b4bad40bd7f9f9e5a453ad5a0edca6d">TestSlave_preOperational</a>;
<a name="l00192"></a>00192                 <a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>.<a class="code" href="structstruct__CO__Data.html#432ddce132ec2f7473064e4fa8ef3f9a">operational</a> = <a class="code" href="Slave_8c.html#a2eebd6dfb45d05dfbe7a5af67b0e16d">TestSlave_operational</a>;
<a name="l00193"></a>00193                 <a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>.<a class="code" href="structstruct__CO__Data.html#89dd7dd17f9dd16b7a06c3cf30c2ca02">stopped</a> = <a class="code" href="Slave_8c.html#62ec5241885c4d8a0e620782e9aaa7ec">TestSlave_stopped</a>;
<a name="l00194"></a>00194                 <a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>.<a class="code" href="structstruct__CO__Data.html#7eeaefe180dfceca6e829a0a8018f342">post_sync</a> = <a class="code" href="Slave_8c.html#7ddf0673ec8de041368c7aec2edf40cd">TestSlave_post_sync</a>;
<a name="l00195"></a>00195                 <a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>.<a class="code" href="structstruct__CO__Data.html#0cf540e2e36e14c04e1c783dc88d9a0e">post_TPDO</a> = <a class="code" href="Slave_8c.html#b10ae2f1c6529172612a290687865585">TestSlave_post_TPDO</a>;
<a name="l00196"></a>00196                 <a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>.<a class="code" href="structstruct__CO__Data.html#d6cd6ffa658b1ed35d887b6bacb990cf">storeODSubIndex</a> = <a class="code" href="Slave_8c.html#0461b31d30605aa041476ae5ef4656b7">TestSlave_storeODSubIndex</a>;             
<a name="l00197"></a>00197 
<a name="l00198"></a>00198                 <span class="keywordflow">if</span>(!<a class="code" href="unix_8c.html#7476146ad15948a22e7f80a00c89c40a">canOpen</a>(&amp;<a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">SlaveBoard</a>,&amp;<a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>)){
<a name="l00199"></a>00199                         <a class="code" href="TestMasterSlave_8h.html#82f06ace20f96f70bc165247e69fac57">eprintf</a>(<span class="stringliteral">"Cannot open Slave Board (%s,%s)\n"</span>,<a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">SlaveBoard</a>.<a class="code" href="structstruct__s__BOARD.html#fb28847fd702021b624afe1f7d4b25b2">busname</a>, <a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">SlaveBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a>);
<a name="l00200"></a>00200                         <span class="keywordflow">goto</span> fail_slave;
<a name="l00201"></a>00201                 }
<a name="l00202"></a>00202         }
<a name="l00203"></a>00203         <span class="keywordflow">if</span>(strcmp(<a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">MasterBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a>, <span class="stringliteral">"none"</span>)){
<a name="l00204"></a>00204                 
<a name="l00205"></a>00205                 <a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>.<a class="code" href="structstruct__CO__Data.html#2ec2bc87656945d2c7dda7ebe662b245">heartbeatError</a> = <a class="code" href="Master_8c.html#47eb45e75b4db150fb465fcf171ef4b4">TestMaster_heartbeatError</a>;
<a name="l00206"></a>00206                 <a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>.<a class="code" href="structstruct__CO__Data.html#b45e9ca46cffe7924c35ae136db6a2b6">initialisation</a> = <a class="code" href="Master_8c.html#e08dfb379eebaa62524fac5bba2196d5">TestMaster_initialisation</a>;
<a name="l00207"></a>00207                 <a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>.<a class="code" href="structstruct__CO__Data.html#d7c66fb721e3f6279a6ff03bf91d82e2">preOperational</a> = <a class="code" href="Master_8c.html#8fe2bae5bb407a3a71ee5fa5ea5d617f">TestMaster_preOperational</a>;
<a name="l00208"></a>00208                 <a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>.<a class="code" href="structstruct__CO__Data.html#432ddce132ec2f7473064e4fa8ef3f9a">operational</a> = <a class="code" href="Master_8c.html#81c297f2b4b9676e906286bf46541fc1">TestMaster_operational</a>;
<a name="l00209"></a>00209                 <a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>.<a class="code" href="structstruct__CO__Data.html#89dd7dd17f9dd16b7a06c3cf30c2ca02">stopped</a> = <a class="code" href="Master_8c.html#897d573cafc13ac80abbc207c0ee41b0">TestMaster_stopped</a>;
<a name="l00210"></a>00210                 <a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>.<a class="code" href="structstruct__CO__Data.html#7eeaefe180dfceca6e829a0a8018f342">post_sync</a> = <a class="code" href="Master_8c.html#9a8f72cab7f649481ca84ab2222dd179">TestMaster_post_sync</a>;
<a name="l00211"></a>00211                 <a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>.<a class="code" href="structstruct__CO__Data.html#0cf540e2e36e14c04e1c783dc88d9a0e">post_TPDO</a> = <a class="code" href="Master_8c.html#5e466aa03eae00c269cf20359a7ee074">TestMaster_post_TPDO</a>;
<a name="l00212"></a>00212                 
<a name="l00213"></a>00213                 <span class="keywordflow">if</span>(!<a class="code" href="unix_8c.html#7476146ad15948a22e7f80a00c89c40a">canOpen</a>(&amp;<a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">MasterBoard</a>,&amp;<a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>)){
<a name="l00214"></a>00214                         <a class="code" href="TestMasterSlave_8h.html#82f06ace20f96f70bc165247e69fac57">eprintf</a>(<span class="stringliteral">"Cannot open Master Board (%s,%s)\n"</span>,<a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">MasterBoard</a>.<a class="code" href="structstruct__s__BOARD.html#fb28847fd702021b624afe1f7d4b25b2">busname</a>, <a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">MasterBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a>);
<a name="l00215"></a>00215                         <span class="keywordflow">goto</span> fail_master;
<a name="l00216"></a>00216                 }
<a name="l00217"></a>00217         }
<a name="l00218"></a>00218 
<a name="l00219"></a>00219         <span class="comment">// Start timer thread</span>
<a name="l00220"></a>00220         <a class="code" href="timers__unix_8c.html#c9e1731843825eb55e7a94894e6a8ec5">StartTimerLoop</a>(&amp;<a class="code" href="TestMasterSlave_8c.html#8a51032f7610fe37c131376e5a392fd5">InitNodes</a>);
<a name="l00221"></a>00221 
<a name="l00222"></a>00222         <span class="comment">// wait Ctrl-C</span>
<a name="l00223"></a>00223         
<a name="l00224"></a>00224         pause();
<a name="l00225"></a>00225         <a class="code" href="TestMasterSlave_8h.html#82f06ace20f96f70bc165247e69fac57">eprintf</a>(<span class="stringliteral">"Finishing.\n"</span>);
<a name="l00226"></a>00226         
<a name="l00227"></a>00227         <a class="code" href="nmtMaster_8c.html#6170d95d9900ef756921a934c5fb37d2">masterSendNMTstateChange</a> (&amp;<a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>, 0x02, <a class="code" href="def_8h.html#b349b5574a1ea67ff0ef76b9f9b6319e">NMT_Reset_Node</a>);
<a name="l00228"></a>00228         <a class="code" href="TestMasterSlave_8h.html#82f06ace20f96f70bc165247e69fac57">eprintf</a>(<span class="stringliteral">"reset\n"</span>);
<a name="l00229"></a>00229         <span class="comment">// Stop master</span>
<a name="l00230"></a>00230         <a class="code" href="states_8c.html#0a5004efd1dedbee82a4f21ec5c44fb5">setState</a>(&amp;<a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>, <a class="code" href="states_8h.html#3136d2815abe9d284f985e0a7ec686464d049c6d45e08a294523df186ad77a75">Stopped</a>);
<a name="l00231"></a>00231         
<a name="l00232"></a>00232         <span class="comment">// Stop timer thread</span>
<a name="l00233"></a>00233         <a class="code" href="timers__unix_8c.html#8758484f3cebb0cd44bb247c3f23d5e3">StopTimerLoop</a>();
<a name="l00234"></a>00234         
<a name="l00235"></a>00235         <span class="comment">// Close CAN devices (and can threads)</span>
<a name="l00236"></a>00236         <span class="keywordflow">if</span>(strcmp(<a class="code" href="TestMasterSlave_8c.html#57b2a6d78660d0ee6ca351fb40ffa859">SlaveBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a>, <span class="stringliteral">"none"</span>)) <a class="code" href="unix_8c.html#02957f72a9b951603adb98a142bd447b">canClose</a>(&amp;<a class="code" href="TestSlave_8c.html#4d4865305ebccdc72343c4faa0a25f47">TestSlave_Data</a>);
<a name="l00237"></a>00237 fail_master:
<a name="l00238"></a>00238         <span class="keywordflow">if</span>(strcmp(<a class="code" href="TestMasterSlave_8c.html#460b5e3b15bb47df23119998ea0fbd31">MasterBoard</a>.<a class="code" href="structstruct__s__BOARD.html#5316679ded23cf846c63c06ab51a4646">baudrate</a>, <span class="stringliteral">"none"</span>)) <a class="code" href="unix_8c.html#02957f72a9b951603adb98a142bd447b">canClose</a>(&amp;<a class="code" href="TestMasterSlave_2TestMaster_8c.html#ed10e5c829f0ea258ebc67896842cabe">TestMaster_Data</a>);    
<a name="l00239"></a>00239 fail_slave:
<a name="l00240"></a>00240         <span class="keywordflow">return</span> 0;
<a name="l00241"></a>00241 }
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Fri Jun 8 08:51:39 2007 for CanFestival by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.1 </small></address>
</body>
</html>