/*
-This file is part of CanFestival, a library implementing CanOpen Stack.
+ This file is part of CanFestival, a library implementing CanOpen
+ Stack.
-Copyright (C): Edouard TISSERANT and Francis DUPIN
+ Copyright (C): Edouard TISSERANT and Francis DUPIN
-See COPYING file for copyrights details.
+ See COPYING file for copyrights details.
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA
+*/
+/*!
+** @file nmtSlave.c
+** @author Edouard TISSERANT and Francis DUPIN
+** @date Tue Jun 5 08:50:53 2007
+**
+** @brief
+**
+**
*/
-
#include "nmtSlave.h"
#include "states.h"
+#include "canfestival.h"
+#include "sysdep.h"
-/*******************************************************************)*********/
-/* put the slave in the state wanted by the master */
+/*!
+** put the slave in the state wanted by the master
+**
+** @param d
+** @param m
+**/
void proceedNMTstateChange(CO_Data* d, Message *m)
{
if( d->nodeState == Pre_operational ||
d->nodeState == Operational ||
d->nodeState == Stopped ) {
-
+
MSG_WAR(0x3400, "NMT received. for node : ", (*m).data[1]);
-
- // Check if this NMT-message is for this node
- // byte 1 = 0 : all the nodes are concerned (broadcast)
-
+
+ /* Check if this NMT-message is for this node */
+ /* byte 1 = 0 : all the nodes are concerned (broadcast) */
+
if( ( (*m).data[1] == 0 ) || ( (*m).data[1] == *d->bDeviceNodeId ) ){
-
- switch( (*m).data[0]){ // command specifier (cs)
+
+ switch( (*m).data[0]){ /* command specifier (cs) */
case NMT_Start_Node:
if ( (d->nodeState == Pre_operational) || (d->nodeState == Stopped) )
setState(d,Operational);
- break;
-
+ break;
+
case NMT_Stop_Node:
if ( d->nodeState == Pre_operational ||
- d->nodeState == Operational )
+ d->nodeState == Operational )
setState(d,Stopped);
break;
-
+
case NMT_Enter_PreOperational:
- if ( d->nodeState == Operational ||
- d->nodeState == Stopped )
- setState(d,Pre_operational);
+ if ( d->nodeState == Operational ||
+ d->nodeState == Stopped )
+ setState(d,Pre_operational);
break;
-
+
case NMT_Reset_Node:
- setState(d,Initialisation);
+ if(d->NMT_Slave_Node_Reset_Callback != NULL)
+ d->NMT_Slave_Node_Reset_Callback(d);
+ setState(d,Initialisation);
break;
-
+
case NMT_Reset_Comunication:
- setState(d,Initialisation);
+ if(d->NMT_Slave_Communications_Reset_Callback != NULL)
+ d->NMT_Slave_Communications_Reset_Callback(d);
+#ifdef CO_ENABLE_LSS
+ if(getNodeId(d)!=d->lss_transfer.nodeID && getNodeId(d)>0 && getNodeId(d)<=127)
+ setNodeId(d, d->lss_transfer.nodeID);
+#endif
+ setState(d,Initialisation);
break;
-
- }// end switch
-
- }// end if( ( (*m).data[1] == 0 ) || ( (*m).data[1] == bDeviceNodeId ) )
+
+ }/* end switch */
+
+ }/* end if( ( (*m).data[1] == 0 ) || ( (*m).data[1] ==
+ bDeviceNodeId ) ) */
}
}
-/*****************************************************************************/
+/*!
+**
+**
+** @param d
+**
+** @return
+**/
UNS8 slaveSendBootUp(CO_Data* d)
{
Message m;
-
+
+#ifdef CO_ENABLE_LSS
+ if(*d->bDeviceNodeId==0xFF)return 0;
+#endif
+
MSG_WAR(0x3407, "Send a Boot-Up msg ", 0);
-
+
/* message configuration */
- m.cob_id.w = NODE_GUARD << 7 | *d->bDeviceNodeId;
+ {
+ UNS16 tmp = NODE_GUARD << 7 | *d->bDeviceNodeId;
+ m.cob_id = UNS16_LE(tmp);
+ }
m.rtr = NOT_A_REQUEST;
m.len = 1;
m.data[0] = 0x00;
-
- return (*d->canSend)(&m);
+
+ return canSend(d->canHandle,&m);
}