📄 node_8cpp-source.html
字号:
<a name="l00258"></a>00258 }<a name="l00259"></a>00259 <span class="keywordflow">if</span>( i == ct )<a name="l00260"></a>00260 done = <span class="keyword">true</span>;<a name="l00261"></a>00261 }<a name="l00262"></a>00262 <a name="l00263"></a>00263 <span class="keywordflow">if</span>( !done )<a name="l00264"></a>00264 {<a name="l00265"></a>00265 <span class="comment">// Clear out any old mapping</span><a name="l00266"></a>00266 err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a12">Dnld8</a>( base, 0, (<a class="code" href="CML__Utils_8h.html#a2">byte</a>)0 );<a name="l00267"></a>00267 <span class="keywordflow">if</span>( err ) <span class="keywordflow">return</span> err;<a name="l00268"></a>00268 <a name="l00269"></a>00269 <span class="comment">// Download the new mapping</span><a name="l00270"></a>00270 <span class="keywordflow">for</span>( <a class="code" href="CML__Utils_8h.html#a2">byte</a> i=0; i<ct; i++ )<a name="l00271"></a>00271 {<a name="l00272"></a>00272 err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a8">Dnld32</a>( base, i+1, codes[i] );<a name="l00273"></a>00273 <span class="keywordflow">if</span>( err ) <span class="keywordflow">return</span> err;<a name="l00274"></a>00274 }<a name="l00275"></a>00275 <a name="l00276"></a>00276 <span class="comment">// Active the new mapping</span><a name="l00277"></a>00277 err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a12">Dnld8</a>( base, 0, ct );<a name="l00278"></a>00278 <span class="keywordflow">if</span>( err ) <span class="keywordflow">return</span> err;<a name="l00279"></a>00279 }<a name="l00280"></a>00280 <a name="l00281"></a>00281 <span class="comment">// Enable the PDO if so requested</span><a name="l00282"></a>00282 <span class="keywordflow">if</span>( enable )<a name="l00283"></a>00283 <span class="keywordflow">return</span> <a class="code" href="classNode.html#a9">PdoEnable</a>( slot, pdo );<a name="l00284"></a>00284 <a name="l00285"></a>00285 <span class="keywordflow">return</span> 0;<a name="l00286"></a>00286 }<a name="l00287"></a>00287 <a name="l00288"></a>00288 <span class="comment">/***************************************************************************/</span><span class="comment"></span><a name="l00289"></a>00289 <span class="comment">/**</span><a name="l00290"></a>00290 <span class="comment">Enable the specified PDO. When this function is called it is assumed</span><a name="l00291"></a>00291 <span class="comment">that the PDO has already be setup.</span><a name="l00292"></a>00292 <span class="comment">@param n The slot number of the PDO to enable</span><a name="l00293"></a>00293 <span class="comment">@param base The index number in the object dictionary where this type</span><a name="l00294"></a>00294 <span class="comment"> of PDO starts (0x1800 for transmit, 0x1400 for receive)</span><a name="l00295"></a>00295 <span class="comment">@return A pointer to an error object, or NULL on success</span><a name="l00296"></a>00296 <span class="comment">*/</span><a name="l00297"></a>00297 <span class="comment">/***************************************************************************/</span><a name="l00298"></a>00298 <span class="keyword">const</span> <a class="code" href="classError.html">Error</a> *<a class="code" href="classNode.html#a9">Node::PdoEnable</a>( <a class="code" href="CML__Utils_8h.html#a8">uint16</a> n, <a class="code" href="CML__Utils_8h.html#a8">uint16</a> base )<a name="l00299"></a>00299 {<a name="l00300"></a>00300 <span class="comment">// Make sure the slot is reasonable.</span><a name="l00301"></a>00301 <span class="keywordflow">if</span>( n > 511 )<a name="l00302"></a>00302 <span class="keywordflow">return</span> &<a class="code" href="classCanOpenError.html#s1">CanOpenError::BadParam</a>;<a name="l00303"></a>00303 <a name="l00304"></a>00304 n += base;<a name="l00305"></a>00305 <a name="l00306"></a>00306 <span class="comment">// Upload the PDO's ID</span><a name="l00307"></a>00307 <a class="code" href="CML__Utils_8h.html#a10">uint32</a> id;<a name="l00308"></a>00308 <span class="keyword">const</span> <a class="code" href="classError.html">Error</a> *err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a9">Upld32</a>( n, 1, <span class="keywordtype">id</span> );<a name="l00309"></a>00309 <span class="keywordflow">if</span>( err ) <span class="keywordflow">return</span> err;<a name="l00310"></a>00310 <a name="l00311"></a>00311 <span class="comment">// If it's not yet enabled, enable it</span><a name="l00312"></a>00312 <span class="keywordflow">if</span>( <span class="keywordtype">id</span> & 0x80000000 )<a name="l00313"></a>00313 err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a8">Dnld32</a>( n, 1, <span class="keywordtype">id</span>&0x7fffffff );<a name="l00314"></a>00314 <a name="l00315"></a>00315 <span class="keywordflow">return</span> err;<a name="l00316"></a>00316 }<a name="l00317"></a>00317 <a name="l00318"></a>00318 <span class="comment">/***************************************************************************/</span><span class="comment"></span><a name="l00319"></a>00319 <span class="comment">/**</span><a name="l00320"></a>00320 <span class="comment">Disable the specified PDO.</span><a name="l00321"></a>00321 <span class="comment">@param n The slot number of the transmit PDO to disable</span><a name="l00322"></a>00322 <span class="comment">@param base The index number in the object dictionary where this type</span><a name="l00323"></a>00323 <span class="comment"> of PDO starts (0x1800 for transmit, 0x1400 for receive)</span><a name="l00324"></a>00324 <span class="comment">@return A pointer to an error object, or NULL on success</span><a name="l00325"></a>00325 <span class="comment">*/</span><a name="l00326"></a>00326 <span class="comment">/***************************************************************************/</span><a name="l00327"></a>00327 <span class="keyword">const</span> <a class="code" href="classError.html">Error</a> *<a class="code" href="classNode.html#a10">Node::PdoDisable</a>( <a class="code" href="CML__Utils_8h.html#a8">uint16</a> n, <a class="code" href="CML__Utils_8h.html#a8">uint16</a> base )<a name="l00328"></a>00328 {<a name="l00329"></a>00329 <span class="comment">// Make sure the slot is reasonable.</span><a name="l00330"></a>00330 <span class="keywordflow">if</span>( n > 511 )<a name="l00331"></a>00331 <span class="keywordflow">return</span> &<a class="code" href="classCanOpenError.html#s1">CanOpenError::BadParam</a>;<a name="l00332"></a>00332 <a name="l00333"></a>00333 n += base;<a name="l00334"></a>00334 <a name="l00335"></a>00335 <span class="comment">// Upload the PDO's ID</span><a name="l00336"></a>00336 <a class="code" href="CML__Utils_8h.html#a10">uint32</a> id;<a name="l00337"></a>00337 <span class="keyword">const</span> <a class="code" href="classError.html">Error</a> *err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a9">Upld32</a>( n, 1, <span class="keywordtype">id</span> );<a name="l00338"></a>00338 <span class="keywordflow">if</span>( err ) <span class="keywordflow">return</span> err;<a name="l00339"></a>00339 <a name="l00340"></a>00340 <span class="comment">// If it's enabled, disable it</span><a name="l00341"></a>00341 <span class="keywordflow">if</span>( !(<span class="keywordtype">id</span> & 0x80000000) )<a name="l00342"></a>00342 err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a8">Dnld32</a>( n, 1, (<a class="code" href="CML__Utils_8h.html#a10">uint32</a>)(<span class="keywordtype">id</span>|0x80000000) );<a name="l00343"></a>00343 <a name="l00344"></a>00344 <span class="keywordflow">return</span> err;<a name="l00345"></a>00345 }<a name="l00346"></a>00346 <a name="l00347"></a>00347 <span class="comment">/***************************************************************************/</span><span class="comment"></span><a name="l00348"></a>00348 <span class="comment">/**</span><a name="l00349"></a>00349 <span class="comment">Get the error history array (CANopen object 0x1003).</span><a name="l00350"></a>00350 <span class="comment"></span><a name="l00351"></a>00351 <span class="comment">@param ct When the function is first called, this variable holds the maximum number</span><a name="l00352"></a>00352 <span class="comment"> of errors that can be stored in the err array (i.e. the length of the array).</span><a name="l00353"></a>00353 <span class="comment"> On return, the actual number of errors uploaded will be stored here.</span><a name="l00354"></a>00354 <span class="comment">@param array An array of 32-bit integers that will be used to return the list of errors.</span><a name="l00355"></a>00355 <span class="comment">@return A pointer to an error object, or NULL on success</span><a name="l00356"></a>00356 <span class="comment">*/</span><a name="l00357"></a>00357 <span class="comment">/***************************************************************************/</span><a name="l00358"></a><a class="code" href="classNode.html#a24">00358</a> <span class="keyword">const</span> <a class="code" href="classError.html">Error</a> *<a class="code" href="classNode.html#a24">Node::GetErrorHistory</a>( <a class="code" href="CML__Utils_8h.html#a8">uint16</a> &ct, <a class="code" href="CML__Utils_8h.html#a10">uint32</a> *array )<a name="l00359"></a>00359 {<a name="l00360"></a>00360 <a class="code" href="CML__Utils_8h.html#a10">uint32</a> i;<a name="l00361"></a>00361 <a name="l00362"></a>00362 <span class="comment">// Upload the first element in the error array.</span><a name="l00363"></a>00363 <span class="comment">// This holds the actual number of errors in it's </span><a name="l00364"></a>00364 <span class="comment">// lowest byte.</span><a name="l00365"></a>00365 <span class="keyword">const</span> <a class="code" href="classError.html">Error</a> *err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a9">Upld32</a>( 0x1003, 0, i );<a name="l00366"></a>00366 <span class="keywordflow">if</span>( err ) <span class="keywordflow">return</span> err;<a name="l00367"></a>00367 <a name="l00368"></a>00368 <span class="keywordflow">if</span>( i > 254 ) i = 254;<a name="l00369"></a>00369 <a name="l00370"></a>00370 <span class="comment">// Limit the number of errors to download to ct</span><a name="l00371"></a>00371 <span class="keywordflow">if</span>( i < (<a class="code" href="CML__Utils_8h.html#a10">uint32</a>)ct ) ct = i;<a name="l00372"></a>00372 <a name="l00373"></a>00373 <span class="keywordflow">for</span>( i=1; i<=(<a class="code" href="CML__Utils_8h.html#a10">uint32</a>)ct; i++ )<a name="l00374"></a>00374 {<a name="l00375"></a>00375 err = <a class="code" href="classNode.html#o0">sdo</a>.<a class="code" href="classSDO.html#a9">Upld32</a>( 0x1003, i, array[i-1] );<a name="l00376"></a>00376 <span class="keywordflow">if</span>( err ) <span class="keywordflow">return</span> err;<a name="l00377"></a>00377 }<a name="l00378"></a>00378 <a name="l00379"></a>00379 <span class="keywordflow">return</span> 0;<a name="l00380"></a>00380 }<a name="l00381"></a>00381 <a name="l00382"></a>00382 <span class="comment">/***************************************************************************/</span><span class="comment"></span><a name="l00383"></a>00383 <span class="comment">/**</span><a name="l00384"></a>00384 <span class="comment">Get the CANopen identity object for this node (object dictionary entry 0x1018).</span><a name="l00385"></a>00385 <span class="comment">Note that only the VendorID field is mandatory. Any unsupported fields will</span><a name="l00386"></a>00386 <span class="comment">be returned as zero.</span><a name="l00387"></a>00387 <span class="comment"></span><a name="l00388"></a>00388 <span class="comment">@param id The identity object to be filled in by this call</span><a name="l00389"></a>00389 <span class="comment">@return A pointer to an error object, or NULL on success</span><a name="l00390"></a>00390 <span class="comment">*/</span>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -