⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nmt.c

📁 This library is Copyright (c) Raphael Zulliger <zulli@gmx.net>. It is licensed under the GNU L
💻 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 + -