doc/doxygen/html/sync_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: src/sync.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_c0a169d39c08973f879fd54f07b9e9f7.html">src</a></div>
<h1>sync.c</h1><a href="sync_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="l00033"></a>00033 <span class="preprocessor">#include "<a class="code" href="data_8h.html">data.h</a>"</span>
<a name="l00034"></a>00034 <span class="preprocessor">#include "<a class="code" href="sync_8h.html">sync.h</a>"</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="win32_2canfestival_8h.html">canfestival.h</a>"</span>
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 <span class="comment">/* Prototypes for internals functions */</span>
<a name="l00038"></a>00038 
<a name="l00045"></a>00045 <span class="keywordtype">void</span> <a class="code" href="sync_8c.html#bbcce7b549414c7bc1aa72fa66258b45">SyncAlarm</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> <span class="keywordtype">id</span>);
<a name="l00046"></a>00046 <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> <a class="code" href="sync_8c.html#82595787f641ab85980d83522f1158b0">OnCOB_ID_SyncUpdate</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, <span class="keyword">const</span> <a class="code" href="structtd__indextable.html">indextable</a> * unsused_indextable, 
<a name="l00047"></a>00047         <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> unsused_bSubindex);
<a name="l00048"></a>00048 
<a name="l00055"></a><a class="code" href="sync_8c.html#bbcce7b549414c7bc1aa72fa66258b45">00055</a> <span class="keywordtype">void</span> <a class="code" href="sync_8c.html#bbcce7b549414c7bc1aa72fa66258b45">SyncAlarm</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> <span class="keywordtype">id</span>)
<a name="l00056"></a>00056 {
<a name="l00057"></a>00057         <a class="code" href="sync_8c.html#0bcc501eb14c12365ffbaa3453905b50">sendSYNC</a>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, *<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#eb1479220ec68407a35635bfbffa3386">COB_ID_Sync</a> &amp; 0x1FFFFFFF) ;
<a name="l00058"></a>00058 }
<a name="l00059"></a>00059 
<a name="l00069"></a><a class="code" href="sync_8c.html#82595787f641ab85980d83522f1158b0">00069</a> <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> <a class="code" href="sync_8c.html#82595787f641ab85980d83522f1158b0">OnCOB_ID_SyncUpdate</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, <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="l00070"></a>00070 {
<a name="l00071"></a>00071         <a class="code" href="sync_8c.html#2e0bf669f5b40dfbdda0f12a5ae3631a">startSYNC</a>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>);
<a name="l00072"></a>00072         <span class="keywordflow">return</span> 0;
<a name="l00073"></a>00073 }
<a name="l00074"></a>00074 
<a name="l00080"></a><a class="code" href="sync_8h.html#2e0bf669f5b40dfbdda0f12a5ae3631a">00080</a> <span class="keywordtype">void</span> <a class="code" href="sync_8c.html#2e0bf669f5b40dfbdda0f12a5ae3631a">startSYNC</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>)
<a name="l00081"></a>00081 {
<a name="l00082"></a>00082         <a class="code" href="objacces_8c.html#514e7b9c13835a86446b1cd38fa34049">RegisterSetODentryCallBack</a>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, 0x1005, 0, &amp;<a class="code" href="sync_8c.html#82595787f641ab85980d83522f1158b0">OnCOB_ID_SyncUpdate</a>);
<a name="l00083"></a>00083         <a class="code" href="objacces_8c.html#514e7b9c13835a86446b1cd38fa34049">RegisterSetODentryCallBack</a>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, 0x1006, 0, &amp;<a class="code" href="sync_8c.html#82595787f641ab85980d83522f1158b0">OnCOB_ID_SyncUpdate</a>);
<a name="l00084"></a>00084 
<a name="l00085"></a>00085         <span class="keywordflow">if</span>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#b8e7a429eb6e0bca2429685725516fe8">syncTimer</a> != TIMER_NONE){
<a name="l00086"></a>00086                 <a class="code" href="sync_8c.html#41c47dbd59d22bf9bab6cd288cf27164">stopSYNC</a>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>);
<a name="l00087"></a>00087         }
<a name="l00088"></a>00088         
<a name="l00089"></a>00089         <span class="keywordflow">if</span>(*<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#eb1479220ec68407a35635bfbffa3386">COB_ID_Sync</a> &amp; 0x40000000 &amp;&amp; *<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#2dddbef6ce165dca7ff916e2e1409142">Sync_Cycle_Period</a>)
<a name="l00090"></a>00090         {
<a name="l00091"></a>00091                 <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#b8e7a429eb6e0bca2429685725516fe8">syncTimer</a> = <a class="code" href="timer_8c.html#11c2616d78f06ed9144ef662f757b128">SetAlarm</a>(
<a name="l00092"></a>00092                                 <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>,
<a name="l00093"></a>00093                                 0 <span class="comment">/*No id needed*/</span>,
<a name="l00094"></a>00094                                 &amp;<a class="code" href="sync_8c.html#bbcce7b549414c7bc1aa72fa66258b45">SyncAlarm</a>,
<a name="l00095"></a>00095                                 <a class="code" href="hcs12_2applicfg_8h.html#56849fe35cb6cbe17f7768a2d3af62f8">US_TO_TIMEVAL</a>(*<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#2dddbef6ce165dca7ff916e2e1409142">Sync_Cycle_Period</a>), 
<a name="l00096"></a>00096                                 <a class="code" href="hcs12_2applicfg_8h.html#56849fe35cb6cbe17f7768a2d3af62f8">US_TO_TIMEVAL</a>(*<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#2dddbef6ce165dca7ff916e2e1409142">Sync_Cycle_Period</a>));
<a name="l00097"></a>00097         }
<a name="l00098"></a>00098 }
<a name="l00099"></a>00099 
<a name="l00105"></a><a class="code" href="sync_8h.html#41c47dbd59d22bf9bab6cd288cf27164">00105</a> <span class="keywordtype">void</span> <a class="code" href="sync_8c.html#41c47dbd59d22bf9bab6cd288cf27164">stopSYNC</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>)
<a name="l00106"></a>00106 {
<a name="l00107"></a>00107         <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#b8e7a429eb6e0bca2429685725516fe8">syncTimer</a> = <a class="code" href="timer_8c.html#991b3cfaac2f201b14d5530f75985c21">DelAlarm</a>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#b8e7a429eb6e0bca2429685725516fe8">syncTimer</a>);
<a name="l00108"></a>00108 }
<a name="l00109"></a>00109 
<a name="l00118"></a><a class="code" href="sync_8h.html#0bcc501eb14c12365ffbaa3453905b50">00118</a> <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> <a class="code" href="sync_8c.html#0bcc501eb14c12365ffbaa3453905b50">sendSYNC</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> cob_id)
<a name="l00119"></a>00119 {
<a name="l00120"></a>00120   <a class="code" href="structMessage.html">Message</a> m;
<a name="l00121"></a>00121   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> resultat ;
<a name="l00122"></a>00122   
<a name="l00123"></a>00123   <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3001, <span class="stringliteral">"sendSYNC "</span>, 0);
<a name="l00124"></a>00124   
<a name="l00125"></a>00125   m.<a class="code" href="structMessage.html#c5d40bde75d015beb48293c052a218b5">cob_id</a>.<a class="code" href="structSHORT__CAN.html#614e1c6a40f1261e2b15ad69b19e9698">w</a> = cob_id ;
<a name="l00126"></a>00126   m.<a class="code" href="structMessage.html#41c5a4e7eaeb2c2ae1af2b2c83129615">rtr</a> = <a class="code" href="def_8h.html#0c43b00ce49efc3586ad17dd80d73940">NOT_A_REQUEST</a>;
<a name="l00127"></a>00127   m.<a class="code" href="structMessage.html#d1dd9a88dda088ff4c7073d49613613d">len</a> = 0;
<a name="l00128"></a>00128   resultat = <a class="code" href="canOpenDriver_8c.html#b57b4b3c000e9f61135175495e874977">canSend</a>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#c960c3c56e8389105c2853cfb393de0c">canHandle</a>,&amp;m) ;
<a name="l00129"></a>00129   <a class="code" href="sync_8c.html#80cadcba23dc859db8a8d3f52789d6d1">proceedSYNC</a>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, &amp;m) ; 
<a name="l00130"></a>00130   <span class="keywordflow">return</span> resultat ;
<a name="l00131"></a>00131 }
<a name="l00132"></a>00132 
<a name="l00141"></a><a class="code" href="sync_8h.html#80cadcba23dc859db8a8d3f52789d6d1">00141</a> <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> <a class="code" href="sync_8c.html#80cadcba23dc859db8a8d3f52789d6d1">proceedSYNC</a>(<a class="code" href="structstruct__CO__Data.html">CO_Data</a>* <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, <a class="code" href="structMessage.html">Message</a> *m)
<a name="l00142"></a>00142 {
<a name="l00143"></a>00143 
<a name="l00144"></a>00144   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>  pdoNum,       <span class="comment">/* number of the actual processed pdo-nr. */</span>
<a name="l00145"></a>00145         prp_j;
<a name="l00146"></a>00146 
<a name="l00147"></a>00147   <span class="keyword">const</span> <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> *     pMappingCount = NULL;      <span class="comment">/* count of mapped objects...*/</span>
<a name="l00148"></a>00148   <span class="comment">/* pointer to the var which is mapped to a pdo */</span>
<a name="l00149"></a>00149   <span class="comment">/* void *     pMappedAppObject = NULL; */</span>
<a name="l00150"></a>00150   <span class="comment">/* pointer fo the var which holds the mapping parameter of an mapping entry  */</span>
<a name="l00151"></a>00151   <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> *    pMappingParameter = NULL;  
<a name="l00152"></a>00152   <span class="comment">/* pointer to the transmissiontype...*/</span>
<a name="l00153"></a>00153   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> *     pTransmissionType = NULL;  
<a name="l00154"></a>00154   <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> *    pwCobId = NULL;    
<a name="l00155"></a>00155 
<a name="l00156"></a>00156   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> dataType;
<a name="l00157"></a>00157   <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> index;
<a name="l00158"></a>00158   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> subIndex;
<a name="l00159"></a>00159   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> offset;
<a name="l00160"></a>00160   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> status;
<a name="l00161"></a>00161   <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> Size;
<a name="l00162"></a>00162   <a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a> objDict;        
<a name="l00163"></a>00163   <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> offsetObjdict;
<a name="l00164"></a>00164   <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> offsetObjdictMap;
<a name="l00165"></a>00165   <a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a> lastIndex;
<a name="l00166"></a>00166   
<a name="l00167"></a>00167   status = <a class="code" href="def_8h.html#07ae7798ee670d4db12e71b373c60e0a">state3</a>;
<a name="l00168"></a>00168   pdoNum = 0x00;
<a name="l00169"></a>00169   prp_j = 0x00;
<a name="l00170"></a>00170   offset = 0x00;
<a name="l00171"></a>00171   
<a name="l00172"></a>00172   <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3002, <span class="stringliteral">"SYNC received. Proceed. "</span>, 0);
<a name="l00173"></a>00173   
<a name="l00174"></a>00174   (*<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#7eeaefe180dfceca6e829a0a8018f342">post_sync</a>)();
<a name="l00175"></a>00175 
<a name="l00176"></a>00176   <span class="comment">/* only operational state allows PDO transmission */</span>
<a name="l00177"></a>00177   <span class="keywordflow">if</span>( <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#a03a5121facf5b21d541f8566a8345d6">nodeState</a> != <a class="code" href="states_8h.html#3136d2815abe9d284f985e0a7ec68646a80594b1522cb686b981f56bbec45124">Operational</a> ) 
<a name="l00178"></a>00178     <span class="keywordflow">return</span> 0;
<a name="l00179"></a>00179   
<a name="l00180"></a>00180   <span class="comment">/* So, the node is in operational state */</span>
<a name="l00181"></a>00181   <span class="comment">/* study all PDO stored in the objects dictionary */</span>  
<a name="l00182"></a>00182  
<a name="l00183"></a>00183   offsetObjdict = <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#f26b0fce2ed684c5983aa658efd6c52e">firstIndex</a>-&gt;<a class="code" href="structs__quick__index.html#48e0ba31ff7746f1fa63f240a132a906">PDO_TRS</a>;
<a name="l00184"></a>00184   lastIndex = <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#96d334a4fc8c304826b053681ccbf0d1">lastIndex</a>-&gt;<a class="code" href="structs__quick__index.html#48e0ba31ff7746f1fa63f240a132a906">PDO_TRS</a>;
<a name="l00185"></a>00185   offsetObjdictMap = <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#f26b0fce2ed684c5983aa658efd6c52e">firstIndex</a>-&gt;<a class="code" href="structs__quick__index.html#c91a86195b3615a98f7b07e0c51ac75f">PDO_TRS_MAP</a>;
<a name="l00186"></a>00186   
<a name="l00187"></a>00187   <span class="keywordflow">if</span>(offsetObjdict) <span class="keywordflow">while</span>( offsetObjdict &lt;= lastIndex) {  
<a name="l00188"></a>00188     <span class="keywordflow">switch</span>( status ) {
<a name="l00189"></a>00189                     
<a name="l00190"></a>00190     <span class="keywordflow">case</span> <a class="code" href="def_8h.html#07ae7798ee670d4db12e71b373c60e0a">state3</a>:    <span class="comment">/* get the PDO transmission type */</span>
<a name="l00191"></a>00191       <span class="keywordflow">if</span> (<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#a766a4db603786bffdd609817048ef04">objdict</a>[offsetObjdict].<a class="code" href="structtd__indextable.html#b0eaef21e60f3348e8928af66c2dbfcd">bSubCount</a> &lt;= 2) {
<a name="l00192"></a>00192           <a class="code" href="hcs12_2applicfg_8h.html#99178e2619db849578b20df5aa241844">MSG_ERR</a>(0x1004, <span class="stringliteral">"Subindex 2  not found at index "</span>, 0x1800 + pdoNum);
<a name="l00193"></a>00193           <span class="keywordflow">return</span> 0xFF;
<a name="l00194"></a>00194         }
<a name="l00195"></a>00195       pTransmissionType = <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#a766a4db603786bffdd609817048ef04">objdict</a>[offsetObjdict].<a class="code" href="structtd__indextable.html#fdd93efce94f77d57c5778e04a6a225c">pSubindex</a>[2].<a class="code" href="structtd__subindex.html#6c83d4e45acd437dcd6746fcf9b7495a">pObject</a>;    
<a name="l00196"></a>00196       <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3005, <span class="stringliteral">"Reading PDO at index : "</span>, 0x1800 + pdoNum);
<a name="l00197"></a>00197       status = <a class="code" href="def_8h.html#b92f9ec8f5b287c274ebe9c91fda5154">state4</a>; 
<a name="l00198"></a>00198       <span class="keywordflow">break</span>;     
<a name="l00199"></a>00199     <span class="keywordflow">case</span> <a class="code" href="def_8h.html#b92f9ec8f5b287c274ebe9c91fda5154">state4</a>:        <span class="comment">/* check if transmission type is after (this) SYNC */</span>
<a name="l00200"></a>00200                         <span class="comment">/* The message may not be transmited every SYNC but every n SYNC */</span>      
<a name="l00201"></a>00201       <span class="keywordflow">if</span>( (*pTransmissionType &gt;= <a class="code" href="objdictdef_8h.html#f514b6a153b17e6da21f46971e3e8807">TRANS_SYNC_MIN</a>) &amp;&amp; (*pTransmissionType &lt;= <a class="code" href="objdictdef_8h.html#fc747c839a17a8b35e569677bbf7549d">TRANS_SYNC_MAX</a>) &amp;&amp;
<a name="l00202"></a>00202           (++<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#83ae82d4401e78e3fd3a1ed5d457ade7">count_sync</a>[pdoNum] == *pTransmissionType) ) {   
<a name="l00203"></a>00203         <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#83ae82d4401e78e3fd3a1ed5d457ade7">count_sync</a>[pdoNum] = 0;
<a name="l00204"></a>00204         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3007, <span class="stringliteral">"  PDO is on SYNCHRO. Trans type : "</span>, *pTransmissionType);
<a name="l00205"></a>00205         status = <a class="code" href="def_8h.html#9c791e43dcf77cb119f7d79db324d1f8">state5</a>;
<a name="l00206"></a>00206         <span class="keywordflow">break</span>;
<a name="l00207"></a>00207       }
<a name="l00208"></a>00208       <span class="keywordflow">else</span> {
<a name="l00209"></a>00209         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3008, <span class="stringliteral">"  Not on synchro or not at this SYNC. Trans type : "</span>, 
<a name="l00210"></a>00210                 *pTransmissionType);
<a name="l00211"></a>00211         pdoNum++;
<a name="l00212"></a>00212         offsetObjdict++;
<a name="l00213"></a>00213         offsetObjdictMap++;
<a name="l00214"></a>00214         status = <a class="code" href="def_8h.html#be94c50e18055692ad2e0d220f09aea5">state11</a>;
<a name="l00215"></a>00215         <span class="keywordflow">break</span>;
<a name="l00216"></a>00216       }      
<a name="l00217"></a>00217     <span class="keywordflow">case</span> <a class="code" href="def_8h.html#9c791e43dcf77cb119f7d79db324d1f8">state5</a>:        <span class="comment">/* get PDO CobId */</span>
<a name="l00218"></a>00218         pwCobId = <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#a766a4db603786bffdd609817048ef04">objdict</a>[offsetObjdict].<a class="code" href="structtd__indextable.html#fdd93efce94f77d57c5778e04a6a225c">pSubindex</a>[1].<a class="code" href="structtd__subindex.html#6c83d4e45acd437dcd6746fcf9b7495a">pObject</a>;     
<a name="l00219"></a>00219         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3009, <span class="stringliteral">"  PDO CobId is : "</span>, *pwCobId);
<a name="l00220"></a>00220         status = <a class="code" href="def_8h.html#b05e63de91a6e1268f15c0939cfdea8b">state7</a>;
<a name="l00221"></a>00221         <span class="keywordflow">break</span>;     
<a name="l00222"></a>00222     <span class="keywordflow">case</span> <a class="code" href="def_8h.html#b05e63de91a6e1268f15c0939cfdea8b">state7</a>:  <span class="comment">/* get mapped objects number to transmit with this PDO */</span>
<a name="l00223"></a>00223       pMappingCount = <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#a766a4db603786bffdd609817048ef04">objdict</a>[offsetObjdictMap].<a class="code" href="structtd__indextable.html#fdd93efce94f77d57c5778e04a6a225c">pSubindex</a>[0].<a class="code" href="structtd__subindex.html#6c83d4e45acd437dcd6746fcf9b7495a">pObject</a>;
<a name="l00224"></a>00224         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x300D, <span class="stringliteral">"  Number of objects mapped : "</span>,*pMappingCount );
<a name="l00225"></a>00225         status = <a class="code" href="def_8h.html#8894c53332e89c6588e84f5dc15c7584">state8</a>;
<a name="l00226"></a>00226     <span class="keywordflow">case</span> <a class="code" href="def_8h.html#8894c53332e89c6588e84f5dc15c7584">state8</a>:        <span class="comment">/* get mapping parameters */</span>
<a name="l00227"></a>00227       pMappingParameter = <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#a766a4db603786bffdd609817048ef04">objdict</a>[offsetObjdictMap].<a class="code" href="structtd__indextable.html#fdd93efce94f77d57c5778e04a6a225c">pSubindex</a>[prp_j + 1].<a class="code" href="structtd__subindex.html#6c83d4e45acd437dcd6746fcf9b7495a">pObject</a>;
<a name="l00228"></a>00228         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x300F, <span class="stringliteral">"  got mapping parameter : "</span>, *pMappingParameter);
<a name="l00229"></a>00229         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3050, <span class="stringliteral">"    at index : "</span>, 0x1A00 + pdoNum);
<a name="l00230"></a>00230         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3051, <span class="stringliteral">"    sub-index : "</span>, prp_j + 1);
<a name="l00231"></a>00231         status = <a class="code" href="def_8h.html#df53b1fe0dcea7b0f27d351da8cb2c96">state9</a>;
<a name="l00232"></a>00232     
<a name="l00233"></a>00233     <span class="keywordflow">case</span> <a class="code" href="def_8h.html#df53b1fe0dcea7b0f27d351da8cb2c96">state9</a>:        <span class="comment">/* get data to transmit */</span> 
<a name="l00234"></a>00234         {
<a name="l00235"></a>00235           <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> ByteSize;
<a name="l00236"></a>00236           <a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a> tmp[]= {0,0,0,0,0,0,0,0};
<a name="l00237"></a>00237           index = (<a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a>)((*pMappingParameter) &gt;&gt; 16);
<a name="l00238"></a>00238           subIndex = (<a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>)(( (*pMappingParameter) &gt;&gt; (<a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>)8 ) &amp; (<a class="code" href="hcs12_2applicfg_8h.html#889a782714194ae2f780002d25d6e0be">UNS32</a>)0x000000FF);
<a name="l00239"></a>00239           Size = (<a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>)(*pMappingParameter); <span class="comment">/* Size in bits */</span>
<a name="l00240"></a>00240           ByteSize = 1 + ((Size - 1) &gt;&gt; 3); <span class="comment">/*1-&gt;8 =&gt; 1 ; 9-&gt;16 =&gt; 2, ... */</span>
<a name="l00241"></a>00241           objDict = <a class="code" href="objacces_8c.html#39c263a4bc5d2d824fefe22fdb4c2dac">getODentry</a>(<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, index, subIndex, tmp, &amp;ByteSize, &amp;dataType, 0 );
<a name="l00242"></a>00242           <span class="comment">/* copy bit per bit in little endian*/</span>
<a name="l00243"></a>00243           <a class="code" href="pdo_8c.html#e468510c9f77f502207d961d26389918">CopyBits</a>(Size, ((<a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>*)tmp), 0 , 0, (<a class="code" href="hcs12_2applicfg_8h.html#539234687760592d01a8b0d3357bc00e">UNS8</a>*)&amp;<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#26f4d508a9e409f2ace9c8c55d92d826">process_var</a>.<a class="code" href="structstruct__s__process__var.html#8790415d8a6886dadbb02c5f145bb543">data</a>[offset&gt;&gt;3], offset%8, 0);
<a name="l00244"></a>00244         }   
<a name="l00245"></a>00245         <span class="keywordflow">if</span>( objDict != <a class="code" href="def_8h.html#cb82b94eb8e368e8c347b2273b6e514e">OD_SUCCESSFUL</a> ){
<a name="l00246"></a>00246           <a class="code" href="hcs12_2applicfg_8h.html#99178e2619db849578b20df5aa241844">MSG_ERR</a>(0x1013, <span class="stringliteral">" Couldn't find mapped variable at index-subindex-size : "</span>, (<a class="code" href="hcs12_2applicfg_8h.html#5528eeccf214bfe021532622d78c6a96">UNS16</a>)(*pMappingParameter));
<a name="l00247"></a>00247           <span class="keywordflow">return</span> 0xFF;
<a name="l00248"></a>00248         }
<a name="l00249"></a>00249         
<a name="l00250"></a>00250         offset += Size ;
<a name="l00251"></a>00251         <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#26f4d508a9e409f2ace9c8c55d92d826">process_var</a>.<a class="code" href="structstruct__s__process__var.html#f5110cf5f12faa435cb992cc96e7ff6b">count</a> = 1 + ((offset - 1) &gt;&gt; 3);
<a name="l00252"></a>00252         prp_j++;
<a name="l00253"></a>00253         status = <a class="code" href="def_8h.html#865105d41739f49a0419502cb2683be1">state10</a>;        
<a name="l00254"></a>00254         <span class="keywordflow">break</span>;                                  
<a name="l00255"></a>00255       
<a name="l00256"></a>00256     <span class="keywordflow">case</span> <a class="code" href="def_8h.html#865105d41739f49a0419502cb2683be1">state10</a>:       <span class="comment">/* loop to get all the data to transmit */</span>
<a name="l00257"></a>00257       <span class="keywordflow">if</span>( prp_j &lt; *pMappingCount ){
<a name="l00258"></a>00258         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3014, <span class="stringliteral">"  next variable mapped : "</span>, prp_j);
<a name="l00259"></a>00259         status = <a class="code" href="def_8h.html#8894c53332e89c6588e84f5dc15c7584">state8</a>;
<a name="l00260"></a>00260         <span class="keywordflow">break</span>;
<a name="l00261"></a>00261       }
<a name="l00262"></a>00262       <span class="keywordflow">else</span> {
<a name="l00263"></a>00263         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3015, <span class="stringliteral">"  End scan mapped variable"</span>, 0);
<a name="l00264"></a>00264         <a class="code" href="pdo_8c.html#298b8291fa35cca22264cf8a70bf138a">PDOmGR</a>( <a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>, *pwCobId );  
<a name="l00265"></a>00265         <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3016, <span class="stringliteral">"  End of this pdo. Should have been sent"</span>, 0);
<a name="l00266"></a>00266         pdoNum++;
<a name="l00267"></a>00267         offsetObjdict++;
<a name="l00268"></a>00268         offsetObjdictMap++;
<a name="l00269"></a>00269         offset = 0x00;
<a name="l00270"></a>00270         prp_j = 0x00;
<a name="l00271"></a>00271         status = <a class="code" href="def_8h.html#be94c50e18055692ad2e0d220f09aea5">state11</a>;
<a name="l00272"></a>00272         <span class="keywordflow">break</span>;
<a name="l00273"></a>00273       }
<a name="l00274"></a>00274       
<a name="l00275"></a>00275     <span class="keywordflow">case</span> <a class="code" href="def_8h.html#be94c50e18055692ad2e0d220f09aea5">state11</a>:     
<a name="l00276"></a>00276       <a class="code" href="hcs12_2applicfg_8h.html#5f4e5133c4c3113931684d3aba518bba">MSG_WAR</a>(0x3017, <span class="stringliteral">"next pdo index : "</span>, pdoNum);
<a name="l00277"></a>00277       status = <a class="code" href="def_8h.html#07ae7798ee670d4db12e71b373c60e0a">state3</a>;
<a name="l00278"></a>00278       <span class="keywordflow">break</span>;
<a name="l00279"></a>00279       
<a name="l00280"></a>00280     <span class="keywordflow">default</span>:
<a name="l00281"></a>00281       <a class="code" href="hcs12_2applicfg_8h.html#99178e2619db849578b20df5aa241844">MSG_ERR</a>(0x1019,<span class="stringliteral">"Unknown state has been reached : %d"</span>,status);
<a name="l00282"></a>00282       <span class="keywordflow">return</span> 0xFF;
<a name="l00283"></a>00283     }<span class="comment">/* end switch case */</span>
<a name="l00284"></a>00284     
<a name="l00285"></a>00285   }<span class="comment">/* end while( prp_i&lt;dict_cstes.max_count_of_PDO_transmit ) */</span>
<a name="l00286"></a>00286    
<a name="l00287"></a>00287   (*<a class="code" href="structstruct__s__timer__entry.html#c08f4de0f4a517ce2bb72f18251cd13c">d</a>-&gt;<a class="code" href="structstruct__CO__Data.html#0cf540e2e36e14c04e1c783dc88d9a0e">post_TPDO</a>)();
<a name="l00288"></a>00288 
<a name="l00289"></a>00289   <span class="keywordflow">return</span> 0;
<a name="l00290"></a>00290 }
<a name="l00291"></a>00291 
<a name="l00292"></a>00292 
<a name="l00293"></a><a class="code" href="sync_8h.html#1da155dcbd7fa1271216d74a15e30490">00293</a> <span class="keywordtype">void</span> <a class="code" href="sync_8c.html#a5e0cde14192eb72627526bb75c033c5">_post_sync</a>(){}
<a name="l00294"></a><a class="code" href="sync_8h.html#1fdf94721303f1c60bb2de1a36b13cc4">00294</a> <span class="keywordtype">void</span> <a class="code" href="sync_8c.html#c4082a05eed4b4c472f4ff2f7323dd28">_post_TPDO</a>(){}
</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>