src/nmtMaster.c
changeset 0 4472ee7c6c3e
child 71 95cd3376cc9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/nmtMaster.c	Wed May 10 16:59:40 2006 +0200
@@ -0,0 +1,83 @@
+/*
+This file is part of CanFestival, a library implementing CanOpen Stack. 
+
+Copyright (C): Edouard TISSERANT and Francis DUPIN
+
+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 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
+*/
+
+#include "nmtMaster.h"
+
+/******************************************************************************/
+UNS8 masterSendNMTstateChange(CO_Data* d, UNS8 Node_ID, UNS8 cs)
+{
+  Message m;
+
+  MSG_WAR(0x3501, "Send_NMT cs : ", cs);
+  MSG_WAR(0x3502, "    to node : ", Node_ID);
+  /* message configuration */
+  m.cob_id.w = 0x0000; /*(NMT) << 7*/
+  m.rtr = NOT_A_REQUEST;
+  m.len = 2;
+  m.data[0] = cs;
+  m.data[1] = Node_ID;
+  
+  return (*d->canSend)(&m);
+}
+
+
+/****************************************************************************/
+UNS8 masterSendNMTnodeguard(CO_Data* d, UNS8 nodeId)
+{
+  Message m;
+  
+  MSG_WAR(0x3503, "Send_NODE_GUARD to node : ", nodeId);
+	
+  /* message configuration */
+  m.cob_id.w = nodeId | (NODE_GUARD << 7);
+  m.rtr = REQUEST;
+  m.len = 1;
+  
+  return (*d->canSend)(&m);
+}
+
+/******************************************************************************/
+void masterRequestNodeState(CO_Data* d, UNS8 nodeId)
+{
+  // FIXME: should warn for bad toggle bit.
+
+  /* NMTable configuration to indicate that the master is waiting
+   * for a Node_Guard frame from the slave whose node_id is ID */
+  d->NMTable[nodeId] = Unknown_state; // A state that does not exist
+
+  if (nodeId == 0) { // NMT broadcast
+    UNS8 i = 0;
+    for (i = 0 ; i < NMT_MAX_NODE_ID ; i++) {
+      d->NMTable[i] = Unknown_state;
+    }
+  }
+  masterSendNMTnodeguard(d,nodeId);
+}
+
+
+
+
+
+
+
+
+