📄 nmt.c
字号:
/***************************************************************************
nmt.c - description
-------------------
begin : Fri May 17 2002
copyright : (C) 2002 by Raphael Zulliger
email : zulli@hsr.ch
***************************************************************************/
/***************************************************************************
* *
* This library is Copyright (c) Raphael Zulliger <zulli@gmx.net>. *
* It is licensed under the GNU Library General Public License (LGPL). *
* *
***************************************************************************/
#include <nmt.h>
#include <def.h>
#include <general.h>
#include <lifegrd.h>
#include <init.h>
// helper function (taken from arbracan)
static BYTE sendNMT( BYTE, BYTE, char );
void processReceivedNMT( s_rx_buffer_message* canopenMessage )
{
if( ( canopenMessage->m.data[1] == 0 ) || ( canopenMessage->m.data[1] == bDeviceNodeId ) )
{ // this NMT-message is for this node
switch( canopenMessage->m.data[0] )
{
case (BYTE)START_REMOTE_NODE:
bStateMachineState = OPERATIONAL;
break;
case (BYTE)STOP_REMOTE_NODE:
bStateMachineState = STOPPED;
break;
case (BYTE)ENTER_PRE_OPERATIONAL_STATE:
bStateMachineState = PRE_OPERATIONAL;
break;
case (BYTE)RESET_REMOTE_NODE:
bStateMachineState = INITIALISATION_NODE;
break;
case (BYTE)RESET_REMOTE_COMMUNICATION:
bStateMachineState = INITIALISATION_COMMUNICATION;
break;
}
}
}
void bootNode( BYTE bNode )
{
// 0x01 means: start the remote node with node-id Node. if Node is 0-> all CANOpen nodes are started
sendNMT( 0, bNode, START_REMOTE_NODE );
}
void stopNode( BYTE bNode )
{
// 0x80 means: node stop node
sendNMT( 0, bNode, STOP_REMOTE_NODE );
}
void resetNode( BYTE bNode )
{
// 0x81 means: node reset remote node
sendNMT( 0, bNode, RESET_REMOTE_NODE );
}
void resetNodeCommunication( BYTE bNode )
{
// 0x82 means: node reset remote node's communication
sendNMT( 0, bNode, RESET_REMOTE_COMMUNICATION );
}
static BYTE sendNMT(BYTE bBusID, BYTE bNodeID, char cs)
{
Message m;
m.cob_id.w = 0x0000; /*(NMT) << 7*/
m.rtr = 0x00;
m.len = 2;
m.data[0] = cs;
m.data[1] = (char)bNodeID;
return canSend( bBusID, &m);
}
void sendBootUp( void )
{
Message m;
m.cob_id.w = (WORD)0x0700 + bDeviceNodeId;
m.rtr = 0x00;
m.len = 1;
m.data[0] = (BYTE)0x00;
canSend( 0, &m);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -